Asale

Anthropic 相容介面

用官方 Anthropic SDK 呼叫 Asale 閘道的 Messages API。改掉 base URL 和金鑰,請求主體原封不動。

Anthropic 協定是 Claude Code 和所有 anthropic SDK 說的那一種。把用戶端的 base URL 指向閘道,其餘程式碼原封不動。

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

連線參數

Base URLhttps://gw.asale.ai
驗證標頭x-api-key: sk-asale-...
SDK 環境變數ANTHROPIC_API_KEYANTHROPIC_BASE_URL

base URL 只寫到網域。Anthropic 用戶端會自己串上 /v1/messages,所以填 https://gw.asale.ai/v1 會變成 /v1/v1/messages,直接 404。

只認得 Authorization: Bearer 的用戶端也能用,這裡同樣接受。

介面清單

方法路徑說明
POST/v1/messages主介面。
POST/v1/messages/count_tokens估算值,不是廠商斷詞器的精確計數,見下文。

照常帶上 anthropic-version: 2023-06-01,SDK 會自動加。

呼叫

curl https://gw.asale.ai/v1/messages \
  -H "x-api-key: $ASALE_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'
# pip install anthropic
import os
from anthropic import Anthropic

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

msg = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)
// npm i @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

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

const msg = await client.messages.create({
  model: "claude-sonnet-4-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
console.log(msg.content[0].text);

串流

stream: true 回傳 Anthropic 原生的事件序列——message_startcontent_block_deltamessage_deltamessage_stop——以 SSE 形式推送,不做改寫。

with client.messages.stream(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "數到五"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

系統提示、工具與思考

  • system 原樣透傳,包括提示詞結尾的快取中斷點——那是所有 agent 用戶端都會設、也最值錢的那個中斷點。
  • tools / tool_use / tool_result 依原生結構透傳。
  • thinking 在模型支援時可用。思考區塊的 signature 只有在請求由同協定承接時才回傳;若由其他廠商的賣家承接,則不回傳簽名,而不是偽造一個。

計算 token

POST /v1/messages/count_tokens 回傳的是啟發式估算,依字元類別加權(拉丁文約 4 字元/token,中日韓約 1.5 字元/token),再加上每則訊息的框架開銷:

{ "input_tokens": 1234 }

它的存在是為了讓「不先算數就不肯送出請求」的用戶端能送出請求。不要拿它做逐 token 的預算——精確值需要廠商自家的斷詞器,閘道並不執行它。實際計費依據的是真實用量,不是這個數。

實用提示

  • max_tokens 是 Messages API 的必填欄位,同時也是餘額凍結額度的計算依據。寫大了不會多花錢——回應結束後差額會退回。
  • 模型名稱是平台的。可用 OpenAI 路徑的 GET /v1/models 取清單,市場可以看哪些有供給。
  • 請求主體上限 16 MiB。