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。