转换 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_tokens | → | max_completion_tokens |
stop_sequences | → | stop |
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_tokens | ← | prompt_tokens / completion_tokens |
| 工具调用块 | → | 函数 / 工具调用 |
配置协议转换
将 Anthropic 格式请求路由到兼容 OpenAI 协议的后端。协议识别由 URI 自动触发,无需额外开关。
- Admin API
- ADC
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"
}
}
}
}'
adc.yaml
services:
- name: Protocol Conversion Service
routes:
- name: protocol-conversion
uris:
- /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 格式后返回给客户端。