# 用 Anthropic SDK 调用 BigModel.io

> 在官方 Anthropic Python 和 TypeScript SDK 中把 base_url 设为 https://bigmodel.io，调用 BigModel.io 的 Anthropic 兼容 Messages API，含流式输出和工具调用示例。

网页版: https://bigmodel.io/zh-cn/docs/anthropic-sdk · 更新于 2026-10-18

BigModel.io 在 `https://bigmodel.io/v1/messages` 提供 Anthropic Messages API。官方 Anthropic SDK 指向网关根地址即可，`/v1/messages` 由 SDK 自己拼。

| 配置项 | 值 |
|---|---|
| Base URL | `https://bigmodel.io`（不带 `/v1`） |
| API Key | 你的 BigModel.io Key（`sk-...`） |
| 模型 | [模型目录](https://bigmodel.io/zh-cn/models)中的模型 ID，例如 `glm-5.3` |

> Key 所在分组必须提供 `/v1/messages`。GLM、DeepSeek 分组只支持 Chat Completions，这里会返回 404，这类 Key 请用 [OpenAI SDK](https://bigmodel.io/zh-cn/docs/openai-sdk-langchain)。

```bash
export BIGMODEL_API_KEY="sk-..."
```

## 安装

```bash [Python]
pip install anthropic
```

```bash [TypeScript]
npm install @anthropic-ai/sdk
```

## 最小调用

```python [Python]
import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://bigmodel.io",
    api_key=os.environ["BIGMODEL_API_KEY"],
)

message = client.messages.create(
    model="glm-5.3",
    max_tokens=512,
    messages=[{"role": "user", "content": "用三句话解释什么是向量数据库。"}],
)
print(message.content[0].text)
```

```ts [TypeScript]
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://bigmodel.io",
  apiKey: process.env.BIGMODEL_API_KEY,
});

const message = await client.messages.create({
  model: "glm-5.3",
  max_tokens: 512,
  messages: [{ role: "user", content: "用三句话解释什么是向量数据库。" }],
});
console.log(message.content[0].type === "text" ? message.content[0].text : message.content);
```

`api_key` / `apiKey` 以 `x-api-key` 请求头发送。想用 `Authorization: Bearer`，改传 `auth_token` / `authToken`，网关两种都接受。SDK 还会从环境变量读取 `ANTHROPIC_BASE_URL`、`ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN`，其他工具遗留的值记得清掉。

## 流式输出

```python [Python]
with client.messages.stream(
    model="glm-5.3",
    max_tokens=512,
    messages=[{"role": "user", "content": "写一首关于延迟的俳句。"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
```

```ts [TypeScript]
const stream = client.messages.stream({
  model: "glm-5.3",
  max_tokens: 512,
  messages: [{ role: "user", content: "写一首关于延迟的俳句。" }],
});
stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
```

流开始后出现的错误以 SSE `error` 事件返回，SDK 会把它抛成异常。

## 工具调用

工具使用标准 Messages 格式。模型调用工具的效果因模型而异，正式使用前先测一下。见[工具调用](https://bigmodel.io/zh-cn/docs/tool-calling)。

```python [Python]
message = client.messages.create(
    model="glm-5.3",
    max_tokens=512,
    tools=[{
        "name": "get_weather",
        "description": "查询城市当前天气",
        "input_schema": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    }],
    messages=[{"role": "user", "content": "杭州现在天气怎么样？"}],
)
for block in message.content:
    if block.type == "tool_use":
        print(block.name, block.input)
```

```ts [TypeScript]
const message = await client.messages.create({
  model: "glm-5.3",
  max_tokens: 512,
  tools: [{
    name: "get_weather",
    description: "查询城市当前天气",
    input_schema: {
      type: "object",
      properties: { city: { type: "string" } },
      required: ["city"],
    },
  }],
  messages: [{ role: "user", content: "杭州现在天气怎么样？" }],
});
for (const block of message.content) {
  if (block.type === "tool_use") console.log(block.name, block.input);
}
```

回传历史消息时，如果 thinking 块或工具 ID 对不上，网关会返回 409 `malformed_session_state`。请把收到的 assistant 内容原样传回。

## 提示缓存与 Token 计数

`cache_control` 断点会透传（最多 4 个，多出的会被移除），缓存写入和读取按模型的缓存价格计费。`client.messages.count_tokens(...)` 调用 `POST /v1/messages/count_tokens`，仅在提供 Messages 的分组可用。见[提示缓存](https://bigmodel.io/zh-cn/docs/prompt-caching)。

## 验证配置

运行上面的最小调用，然后打开[用量](https://bigmodel.io/usage)，确认请求出现且端点为 `/v1/messages`。也可以用 curl：

```bash
curl https://bigmodel.io/v1/messages \
  -H "x-api-key: $BIGMODEL_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"glm-5.3","max_tokens":64,"messages":[{"role":"user","content":"ping"}]}'
```

## 常见问题排查

**404 `... platform only supports /v1/chat/completions; /v1/messages is not available`。** Key 所在分组只支持 Chat Completions。换一个支持 Messages 的分组 Key，或改用 [OpenAI SDK](https://bigmodel.io/zh-cn/docs/openai-sdk-langchain)。

**所有请求都 404。** Base URL 末尾带了 `/v1`，SDK 实际请求的是 `/v1/v1/messages`。改成 `https://bigmodel.io`。

**401 `INVALID_API_KEY` 或 `API_KEY_REQUIRED`。** Key 为空或填错，或者环境里残留的 `ANTHROPIC_API_KEY` 被优先使用了。执行 `env | grep ANTHROPIC` 检查。

**403 `This group does not allow /v1/messages dispatch`。** 该分组不允许使用 Messages API，换一个分组。

**403 permission_error `API Key is not assigned to any group`。** 在 [API Keys](https://bigmodel.io/keys) 编辑这个 Key 并选择分组。

**503 `No available accounts: no available accounts supporting model: ...`。** 模型 ID 写错，或分组不提供该模型。从[模型目录](https://bigmodel.io/zh-cn/models)复制 ID。

**403 `INSUFFICIENT_BALANCE` 或 429 `API_KEY_QUOTA_EXHAUSTED`。** 到[充值](https://bigmodel.io/purchase)页面充值，或调高 Key 额度。见[限额与速率](https://bigmodel.io/zh-cn/docs/rate-limits)。

## 相关文档

- [Claude Code](https://bigmodel.io/zh-cn/docs/claude-code) 使用同一个 Messages 接口
- [OpenAI SDK](https://bigmodel.io/zh-cn/docs/openai-sdk-langchain)：调用 Chat Completions
- [LangChain](https://bigmodel.io/zh-cn/docs/langchain)（`ChatAnthropic`）和 [Vercel AI SDK](https://bigmodel.io/zh-cn/docs/vercel-ai-sdk)（`@ai-sdk/anthropic`）
- [错误码](https://bigmodel.io/zh-cn/docs/errors)
