Asale

介面總覽

一個閘道,三種相容協定。把 OpenAI、Anthropic 或 Gemini 用戶端指向 Asale,改掉 base URL 和金鑰,其餘程式碼原封不動。

Asale 閘道同時以三種協定應答。你的用戶端已經會說哪一種,就繼續用哪一種——SDK、請求主體、串流解析全部保留,只改兩行:base URL 和金鑰。

本頁的內容三種協定通用。各自的介面清單與可直接執行的範例見:

Base URL

三種協定的 base URL 截斷深度不同,因為各家用戶端往後串接的路徑不同。用你手上那個 SDK 對應的那一行。

協定Base URL實際請求的介面
OpenAIhttps://gw.asale.ai/v1POST /v1/chat/completions
Anthropichttps://gw.asale.aiPOST /v1/messages
Geminihttps://gw.asale.aiPOST /v1beta/models/{model}:generateContent

gw.asale.ai 是推論閘道;api.asale.ai 是主控台介面(工作階段、錢包、行情),它不接受 sk-asale- 金鑰,把推論請求送過去只會拿到 404。

驗證

三個請求標頭,各對應一種協定,好讓各家 SDK 不改程式碼就能通過驗證。任一個在任一介面上都有效。

Authorization: Bearer sk-asale-...
x-api-key: sk-asale-...
x-goog-api-key: sk-asale-...

金鑰在 API 金鑰頁面管理:註冊時自動產生一把,之後可以新增、命名、設定有效期、停用而不刪除,副本遺失也能重新檢視。

每個帳號有一把標記為預設的金鑰。它是桌面用戶端買入時寫給各 AI 工具的那一把,與你自己發起的請求無關——後者以你實際送出的那把金鑰驗證。

模型

模型名稱是平台的,不是某一家廠商的型號表。直接問閘道能媒合到什麼:

curl https://gw.asale.ai/v1/models -H "Authorization: Bearer $ASALE_API_KEY"
{
  "object": "list",
  "data": [
    { "id": "claude-sonnet-4-5", "object": "model", "owned_by": "anthropic", "context_length": 200000 }
  ]
}

目錄裡有、但此刻沒人在賣的模型,回傳的是 503 no_supply 而不是 404——名稱是對的,只是這一秒沒有供給。市場頁面可以看到哪些模型有流動性。

串流

伺服器推送事件(SSE),保持各協定原生的事件格式,不做二次封裝:OpenAI 與 Anthropic 用 stream: true,Gemini 用 :streamGenerateContent。現有的串流解析程式碼無需更動。

一個請求要花多少

請求送出前,閘道會依你宣告的 max_tokens 乘以該模型的輸出價凍結一筆預估;回應結束後依真實用量計價,差額立即退回可用餘額。

以下情況不計費:請求發生錯誤、用量回傳為零、你中途斷線。計量細節見用量計費

錯誤

所有失敗都是同一種 JSON,配上對應的 HTTP 狀態碼:

{
  "error": {
    "message": "insufficient balance",
    "code": "payment_required",
    "key": "errors.wallet.insufficientBalance"
  }
}

請依 code 分支,不要依 message——文案會被翻譯與改寫。

狀態碼code怎麼處理
401unauthorized金鑰缺失、格式不對或不存在。檢查請求標頭與金鑰。
403forbidden金鑰已停用,或帳號被限制交易。
402payment_required錢包儲值。
429rate_limited退避重試,Retry-After 說明要等多久。
503no_supply這一刻沒人在賣這個模型。稍後重試,或換一個模型。
502upstream承接請求的上游失敗了,可以安全重試。

金鑰過期回傳 401keyerrors.apiKey.expired,被停用回傳 403 且為 errors.apiKey.disabled——兩者的修復方式不同,所以狀態碼也不同。

頻率限制

每把金鑰各有自己的每分鐘請求數與每分鐘 token 數上限,超過任一項回傳 429 並帶 Retry-After。上限是依金鑰計算的,所以把工作量拆到兩把金鑰上,額度也會跟著拆開。