Anthropic 兼容 API

使用 Messages 请求格式和 Anthropic SDK,理解内容块、工具与 Thinking 的转换边界。

查看 Markdown

接口定位

Messages 接口接受 Anthropic 格式请求,内部转换成 Chat Completions,再把返回结果转换为 Messages 内容块。协议格式与模型厂商是不同概念:model 必须填 GFW 模型 ID,并不要求名称是 Claude 型号。

本文使用 deepseek-v4-pro 演示基础文本调用,模型可用性与授权范围请查看 模型库。示例不是官方 Anthropic 服务的能力承诺,也不是实际请求记录。

端点与 SDK 地址

项目值
首选路径POST https://api.gfw.net/v1/messages
兼容路径POST https://api.gfw.net/anthropic/v1/messages
Anthropic SDK base_urlhttps://api.gfw.net
鉴权x-api-key: $GFW_API_KEY,也支持 Bearer API Key
请求头Content-Type: application/json、anthropic-version: 2023-06-01

Anthropic SDK 会补上 /v1/messages,因此不要把 /v1 再写进它的 base_url。使用同一个 GFW API Key,不要用控制台登录 Token。

请求参数与内容块

字段类型必填说明
modelstring是GFW 模型 ID
max_tokensinteger是必须大于 0;输出预算应符合模型限制
messagesarray常规对话是带 role 与 content 的历史消息,主要使用 user、assistant
systemstring / array否顶层系统提示;数组中的文本被连接成 system 消息
temperature、top_p、top_knumber / integer否透传兼容参数;top_k 仅部分上游支持
stop_sequencesarray of strings否转成 Chat Completions 的 stop
streamboolean否true 返回命名 SSE 事件
toolsarray否name、description、input_schema 转成 function 定义,模型需支持工具调用
thinkingobject否type=enabled 时进入 Thinking 兼容转换,详见 推理模型

content 可以是文本字符串或内容块数组。转换器处理 text、image、tool_use、tool_result;不要默认文档块、服务器工具或其他类型都能被识别。视觉输入使用 source.type=base64、media_type 和 data;外部 URL 在转换后会被图片校验拒绝。

当前工具转换处理 tools,但未实现完整的 Anthropic tool_choice 映射。若需要精确选择工具,优先使用 Chat Completions,不要把原生参数直接当作已支持。

完整调用示例

设置 GFW_API_KEY;Python 示例依赖 anthropic 包。system 在顶层设置,不混入 messages 的 role。

curl --fail-with-body --silent --show-error \
  --max-time 120 \
  https://api.gfw.net/v1/messages \
  -H "x-api-key: ${GFW_API_KEY:?请先设置 GFW_API_KEY}" \
  -H 'anthropic-version: 2023-06-01' \
  -H 'Content-Type: application/json' \
  --data '{
    "model": "deepseek-v4-pro",
    "max_tokens": 512,
    "system": "你是一名后端工程师,用简洁的中文回答。",
    "messages": [{"role": "user", "content": "什么时候不应自动重试 POST 请求?"}],
    "stream": false
  }'

响应字段

以下为结构示意,内容和用量并非实测:

{
  "id": "msg_chatcmpl_example",
  "type": "message",
  "role": "assistant",
  "model": "deepseek-v4-pro",
  "content": [{"type": "text", "text": "当请求可能已经产生副作用且无法去重时,不应盲目重试。"}],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {"input_tokens": 32, "output_tokens": 25, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0}
}
字段说明
content[]按类型读取,可能包含 text、thinking、tool_use,不保证第一块就是文本
stop_reason=end_turn普通结束
stop_reason=max_tokens达到输出限制,应检查结果是否截断
stop_reason=tool_use应用需处理工具请求并用 tool_result 回传
usage转换后的 Token 用量;缓存创建字段在当前非流式桥接中为 0,不代表完整缓存功能已经实现

流式输出使用 message_start、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop。工具流转换为基础实现,不宜依赖复杂并行工具场景;生产工具循环建议先使用非流式路径。

兼容边界与相关文档

  • Thinking 块来自上游 reasoning_content 的转换,不保证存在签名或完整原生 Extended Thinking 语义。若上游没有最终文本而只有推理文本,当前非流式转换可能将其放入 text;应用必须知道这一差异。
  • 工具执行发生在你的应用中,网关不会执行工具。保留 tool_use.id,回传时作为 tool_result.tool_use_id。
  • 缓存控制、文档输入、服务器工具和 Token 计数端点等未在当前契约中完整确认,本文不提供对应路径或通用支持承诺。
  • Anthropic 错误通常为 type=error 加 error.type、error.message;和 OpenAI 错误、平台业务码不能混用。

相关文档:流式输出、工具调用、推理模型、Claude Code、错误码与重试。

本页目录