Asale

OpenAI 相容介面

用官方 OpenAI SDK 呼叫 Asale 閘道的 Chat Completions 與 Responses。改掉 base URL 和金鑰,其餘程式碼原封不動。

OpenAI 協定是閘道支援面最廣的一種,也是絕大多數第三方函式庫預設對接的那一種。如果你的程式用的是 openai 套件,或任何模仿它的函式庫,看這一頁就夠了。

金鑰、模型、計費與錯誤碼請先看總覽;本頁只講 OpenAI 特有的部分。

連線參數

Base URLhttps://gw.asale.ai/v1
驗證標頭Authorization: Bearer sk-asale-...
SDK 環境變數OPENAI_API_KEYOPENAI_BASE_URL

這裡的 /v1 屬於 base URL:OpenAI 用戶端會在你給的位址後面自己串上 /chat/completions

介面清單

方法路徑說明
POST/v1/chat/completions主介面。
POST/v1/responsesResponses API。Codex ≥ 0.146 只會說這一種。
POST/v1/completions舊版文字補全,對應到同一條鏈路。
GET/v1/models平台此刻能媒合的模型。

呼叫

curl https://gw.asale.ai/v1/chat/completions \
  -H "Authorization: Bearer $ASALE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": false
  }'
# pip install openai
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ASALE_API_KEY"],
    base_url="https://gw.asale.ai/v1",
)

resp = client.chat.completions.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
// npm i openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.ASALE_API_KEY,
  baseURL: "https://gw.asale.ai/v1",
});

const resp = await client.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);

串流

stream: true 回傳 text/event-stream,事件為 chat.completion.chunk,最後以 data: [DONE] 結束,與 OpenAI 官方一致。現有解析程式碼無需更動。

stream = client.chat.completions.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "數到五"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

工具呼叫

toolstool_choice 原樣透傳,助理回傳的 tool_calls 結構也一致。執行結果照常以 role: "tool" 訊息回傳,帶上對應的 tool_call_id

一個請求背後可能由任一受支援廠商的賣家承接,閘道會在協定之間做翻譯。廠商私有的不透明欄位——思考簽名、encrypted_content 之類——只有在請求與承接方協定一致時才會原樣回傳;否則會被丟棄,而不是偽造一個。

實用提示

  • 請設定 max_tokens。餘額凍結額度是依它計算的。不寫會讓凍結偏保守,可能在餘額其實足夠的情況下回報「餘額不足」。
  • 模型名稱是平台的。用 GET /v1/models 取清單,市場可以看哪些有供給。
  • 圖片在模型支援時可用。請求主體上限 16 MiB,遠高於一般內嵌圖片;超過會回傳 413
  • n 會被忽略,一次請求只產生一個結果。