跳到主要内容
版本:3.10.x

转换 Anthropic Messages 与 OpenAI Chat Completions 协议

本文介绍 API7 AI 网关如何把 Anthropic Messages API 请求转换为 OpenAI Chat Completions 格式。这样,团队可以继续使用 Anthropic SDK,同时把流量路由到兼容 OpenAI 协议的后端模型服务,而无需改写应用代码。

场景概述

不同团队可能使用不同模型 SDK。切换模型服务时,应用层通常需要改造请求结构、参数名称和流式响应处理。协议转换把这些差异收敛在网关层:

  • Anthropic SDK 到 OpenAI 后端:应用发送 Anthropic 格式请求,网关转换后转发给兼容 OpenAI 协议的模型服务。
  • 透明响应转换:后端响应会被转换回 Anthropic 格式。
备注

自动识别基于请求 URI /v1/messages。网关会将 Anthropic 格式请求转换为 OpenAI 格式后转发;反向场景不会自动识别。

支持的字段映射

Anthropic方向OpenAI
system 顶层字段messages[0].role: "system"
max_tokensmax_completion_tokens
stop_sequencesstop
stop_reason: "end_turn"finish_reason: "stop"
stop_reason: "max_tokens"finish_reason: "length"
stop_reason: "tool_use"finish_reason: "tool_calls"
input_tokens / output_tokensprompt_tokens / completion_tokens
工具调用块函数 / 工具调用

配置协议转换

将 Anthropic 格式请求路由到兼容 OpenAI 协议的后端。协议识别由 URI 自动触发,无需额外开关。

curl "http://127.0.0.1:7080/apisix/admin/routes?gateway_group_id=default" -X PUT \
-H "X-API-KEY: $ADMIN_API_KEY" \
-d '{
"id": "protocol-conversion",
"service_id": "'"$SERVICE_ID"'",
"paths": ["/v1/messages"],
"plugins": {
"ai-proxy": {
"provider": "openai-compatible",
"auth": {
"header": {
"Authorization": "Bearer your-api-key"
}
},
"options": {
"model": "your-model"
},
"override": {
"endpoint": "https://your-model-endpoint.example.com/v1/chat/completions"
}
}
}
}'

验证请求

curl "http://127.0.0.1:9080/v1/messages" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 256,
"messages": [
{"role": "user", "content": "Explain API gateways in one paragraph."}
]
}'

如果后端模型服务返回 OpenAI 格式响应,网关会将其转换为 Anthropic 格式后返回给客户端。

注意事项

  • 流式响应会涉及事件格式转换,建议在上线前单独验证客户端处理逻辑。
  • 对工具调用、停止原因和令牌用量字段,需要结合目标模型服务的实际响应进行回归测试。
  • 如果应用可以直接使用 OpenAI SDK,优先使用标准 OpenAI 兼容接口会更简单。