API 端点¶
本代理实现完整的 Anthropic Messages API 兼容接口,并补充了 Claude Code 必需的几个端点。
端点总览¶
| 路径 | 方法 | 说明 |
|---|---|---|
/ |
GET | 服务信息 |
/v1/health |
GET | 详细健康检查 |
/v1/messages |
POST | Anthropic Messages API 兼容主端点 |
/v1/messages/count_tokens |
POST | token 估算(避免 Claude Code 404) |
GET /¶
服务自描述。
响应示例:
GET /v1/health¶
响应示例:
POST /v1/messages¶
Anthropic Messages API 兼容主端点,支持非流式和流式两种模式。
请求头¶
x-api-key: any # Claude Code SDK 会校验有值即可
anthropic-version: 2023-06-01 # 必填
content-type: application/json
请求体¶
完整字段同 Anthropic Messages API 规范, 本代理额外支持以下 Anthropic 字段(本地模拟实现):
| 字段 | 处理 |
|---|---|
cache_control |
递归剥离(避免上游 400) |
thinking |
剥离 + 注入 system 引导 |
tools[].type=web_search_* |
翻译为普通工具 |
tools[].type=code_execution_* |
翻译为普通工具 |
tools[].type=bash_* |
翻译为普通工具 |
复杂 input_schema ($ref/oneOf) |
拍平为简单 schema |
非流式响应¶
请求示例:
curl -X POST http://127.0.0.1:8787/v1/messages \
-H "x-api-key: any" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "MiniMax-M3",
"max_tokens": 200,
"messages": [{"role":"user","content":"用一句话介绍 Python asyncio"}]
}'
响应示例:
{
"id": "msg_067a2ab57a48e5b87e61840b73288ba7",
"type": "message",
"role": "assistant",
"model": "MiniMax-M3",
"content": [
{
"type": "text",
"text": "Python 的 asyncio 是一个用于编写单线程并发代码的库..."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 131,
"output_tokens": 24,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 114,
"service_tier": "standard"
}
}
cache_*_input_tokens
本代理强制注入这两个字段。真实值由上游返回或基于前缀缓存统计估算。
含义:
- cache_creation_input_tokens — 本次新增的缓存条目 token 数
- cache_read_input_tokens — 命中缓存的 token 数(> 0 表示有节省)
流式响应(SSE)¶
请求示例:
curl -N -X POST http://127.0.0.1:8787/v1/messages \
-H "x-api-key: any" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "MiniMax-M3",
"max_tokens": 100,
"stream": true,
"messages": [{"role":"user","content":"用一句话说 quicksort"}]
}'
响应(Server-Sent Events):
id: e1
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","model":"MiniMax-M3",...}}
id: e2
event: ping
data: {"type":"ping"}
id: e3
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
id: e4
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"选取"}}
id: e5
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"一个基准元素..."}}
id: e6
event: content_block_stop
data: {"type":"content_block_stop","index":0}
id: e7
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":22}}
id: e8
event: message_stop
data: {"type":"message_stop"}
SSE 事件 ID 续传
每个事件带递增 id: e1, e2, ...。
客户端断流后可发 Last-Event-ID 头(虽然本代理暂未实现断点续传,但事件 ID 仍可用于客户端去重)。
工具调用流式¶
tool_use 块在本代理中被整块缓冲后再发出,确保 Claude Code 收到的是完整原子化的 input:
id: e5
event: content_block_start
data: {"type":"content_block_start","index":0,
"content_block":{"type":"tool_use","id":"tu_1","name":"calc",
"input":{"x":42}}}
id: e6
event: content_block_stop
data: {"type":"content_block_stop","index":0}
不会有 input_json_delta 分散事件,因为本代理把上游多个 partial_json 合并后再发。
POST /v1/messages/count_tokens¶
Anthropic SDK 会调用此端点估算 token 数。本代理实现经验估算(每 3 字符约 1 token)。
请求示例:
curl -X POST http://127.0.0.1:8787/v1/messages/count_tokens \
-H "content-type: application/json" \
-d '{"messages":[{"role":"user","content":"hello world"}]}'
响应示例:
估算精度
本端点是经验估算(约 1 token / 3 字符),并非精确计费。 Claude Code 主要用它判断是否需要触发缓存压缩,对精度不敏感。
错误响应¶
代理透传上游错误(4xx 不重试),并在 500 时给出内部错误。
示例(上游 401):
{
"type": "error",
"error": {
"type": "upstream_error",
"message": "401: {\"error\":{\"type\":\"...\",\"message\":\"invalid api key\"}}"
}
}
示例(本地 500):
端到端示例¶
Python (Anthropic SDK)¶
import os
os.environ["ANTHROPIC_BASE_URL"] = "http://127.0.0.1:8787"
os.environ["ANTHROPIC_API_KEY"] = "any"
os.environ["ANTHROPIC_MODEL"] = "MiniMax-M3"
import anthropic
client = anthropic.Anthropic()
msg = client.messages.create(
model="MiniMax-M3",
max_tokens=200,
messages=[{"role": "user", "content": "你好"}]
)
print(msg.content[0].text)
Claude Code CLI¶
export ANTHROPIC_BASE_URL=http://127.0.0.1:8787
export ANTHROPIC_API_KEY=any-non-empty
export ANTHROPIC_MODEL=MiniMax-M3
claude