创建消息(Anthropic Messages)
BigModel.io 的 POST /v1/messages 接口:供 Claude Code 和 Anthropic SDK 使用的 Anthropic Messages 协议,支持流式、工具、扩展思考和提示词缓存。
POST
https://bigmodel.io/v1/messagesAnthropic Messages 接口。Anthropic SDK 和 Claude Code 的 Base URL 填 https://bigmodel.io,客户端会自己拼上 /v1/messages。Anthropic 分组原生提供;OpenAI 分组在允许 Messages 调度时会转换处理;仅对话补全分组(DeepSeek、GLM 平台)返回 404。
#请求
http
POST https://bigmodel.io/v1/messages#认证
| 请求头 | 值 |
|---|---|
Authorization |
Bearer $BIGMODEL_API_KEY |
x-api-key |
$BIGMODEL_API_KEY |
任选其一。
#请求头
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
anthropic-version |
string | Anthropic SDK 发送的 API 版本请求头。 |
#请求体
标准 Anthropic Messages 请求体。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型 ID,例如 glm-5.3。 |
max_tokens |
integer | 是 | 最多生成的 token 数。 |
messages |
array<object> | 是 | 交替的 user 和 assistant 消息。 |
messages[].role |
string | 是 | 可选值:user, assistant |
messages[].content |
string | array<object> | 是 | |
system |
string | array<object> | 系统提示词,内容块可带 cache_control。 |
|
stream |
boolean | 以 Anthropic SSE 流式返回。 默认 false |
|
tools |
array<object> | 工具定义(name、description、input_schema)。 |
|
tool_choice |
object | ||
thinking |
object | 扩展思考设置(仅支持的模型)。 | |
temperature |
number | ||
metadata |
object | ||
metadata.user_id |
string |
#响应
| 状态码 | 含义 |
|---|---|
200 |
消息结果;stream 为 true 时为 Anthropic SSE 事件流。 |
400 |
api_key_in_query_deprecated(Key 放在了查询参数里),或 invalid_request_error:请求体为空或不是合法 JSON、缺少 model、stream 不是布尔值等。 |
401 |
API_KEY_REQUIRED、INVALID_API_KEY、API_KEY_DISABLED、USER_NOT_FOUND、USER_INACTIVE。 |
403 |
INSUFFICIENT_BALANCE、API_KEY_EXPIRED、ACCESS_DENIED(IP 规则)、SUBSCRIPTION_NOT_FOUND、SUBSCRIPTION_INVALID,或 permission_error(Key 未分配分组、分组不允许该接口)。 |
404 |
not_found_error:该 Key 所在分组只提供 /v1/chat/completions。 |
409 |
malformed_session_state:对话历史中的思考块或工具 ID 无法被模型接受,请开新会话。 |
413 |
请求体过大。 |
429 |
API_KEY_QUOTA_EXHAUSTED、USAGE_LIMIT_EXCEEDED(套餐额度),或 rate_limit_exceeded / rate_limit_error(Key 的 5 小时/1 天/7 天限额、每分钟请求数、并发、上游限流)。每分钟限流会带 Retry-After。 |
502 |
upstream_error:模型服务商出错。 |
503 |
api_error 等:分组暂时没有该模型的可用容量,或分组不提供该模型(No available accounts)。 |
#响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | |
type |
any | |
role |
any | |
model |
string | |
content |
array<object> | text、thinking、tool_use 内容块。 |
stop_reason |
string | end_turn, max_tokens, tool_use, … |
usage |
object | |
usage.input_tokens |
integer | |
usage.output_tokens |
integer | |
usage.cache_creation_input_tokens |
integer | |
usage.cache_read_input_tokens |
integer |
stream: true 时返回 Anthropic 事件流:message_start、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop。
#示例
cURL
curl https://bigmodel.io/v1/messages \
-H "Authorization: Bearer $BIGMODEL_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3",
"max_tokens": 256,
"system": "你是一个简洁的助手。",
"messages": [{"role": "user", "content": "用一句话解释 HTTP 429。"}]
}'Python
import os
from anthropic import Anthropic
client = Anthropic(base_url="https://bigmodel.io", api_key=os.environ["BIGMODEL_API_KEY"])
msg = client.messages.create(
model="glm-5.3",
max_tokens=256,
system="你是一个简洁的助手。",
messages=[{"role": "user", "content": "用一句话解释 HTTP 429。"}],
)
print(msg.content[0].text)Node.js
import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({baseURL: 'https://bigmodel.io', apiKey: process.env.BIGMODEL_API_KEY})
const msg = await client.messages.create({
model: 'glm-5.3',
max_tokens: 256,
system: '你是一个简洁的助手。',
messages: [{role: 'user', content: '用一句话解释 HTTP 429。'}],
})
console.log(msg.content[0].text)响应示例(id、文本和 token 数仅作示意):
json
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"model": "glm-5.3",
"content": [
{"type": "text", "text": "HTTP 429 表示你在一段时间内请求过多,需要稍后重试。"}
],
"stop_reason": "end_turn",
"usage": {"input_tokens": 21, "output_tokens": 19, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0}
}#流式输出
Python
with client.messages.stream(
model="glm-5.3",
max_tokens=256,
messages=[{"role": "user", "content": "从 1 数到 3。"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Node.js
const stream = client.messages.stream({
model: 'glm-5.3',
max_tokens: 256,
messages: [{role: 'user', content: '从 1 数到 3。'}],
})
stream.on('text', text => process.stdout.write(text))
await stream.finalMessage()#提示词缓存
json
{
"model": "glm-5.3",
"max_tokens": 256,
"system": [
{"type": "text", "text": "<较长且稳定的指令>", "cache_control": {"type": "ephemeral"}}
],
"messages": [{"role": "user", "content": "第一个问题"}]
}#说明
- 仅对话补全分组返回
404。 DeepSeek、GLM 平台分组的 Key 会收到not_found_error:"… platform only supports /v1/chat/completions; /v1/messages is not available"。请改用对话补全,或换一个提供 Messages 的分组的 Key。 - OpenAI 分组只有在分组允许时才转换 Messages 请求,否则返回
403:"This group does not allow /v1/messages dispatch"。 model必填,缺少时返回400invalid_request_error。分组不提供或拼错的模型返回503api_error("No available accounts"),不是404。- 提示词缓存。
cache_control会透传。最多保留 4 个缓存断点,多余的依次从tools、messages、system中移除。thinking 块上的cache_control会被去掉。缓存写入和读取分别按模型的缓存写入价、缓存读取价计费。详见提示词缓存。 - 思考。
thinking和output_config.effort会被读取并转发。如果对话历史中的思考块或工具 ID 无法被模型接受,会返回409malformed_session_state,请开新会话。详见推理与思考。 metadata.user_id。 同一会话发送固定的值,会话中的请求会被一致地处理,有助于提示缓存命中。- 错误使用 Anthropic 结构
{"type":"error","error":{...}},Key 检查阶段的错误除外({"code","message"})。流式过程中的错误以 SSEerror事件返回。完整列表见错误码。
#相关文档
这篇文档有帮助吗?
更新于 · 以 Markdown 查看