OpenAI 客户端接入 Anthropic 上游
AISIX 允许应用继续使用 OpenAI Chat Completions 请求格式,同时由网关调用 Anthropic 上游模型。当应用代码已经围绕兼容 OpenAI 的 SDK 构建,但平台团队希望把这类流量路 由到 Claude 时,可以使用这一模式。
AISIX 会解析模型别名,将请求转换为 Anthropic Messages 格式,使用已保存的服务提供方凭证调用 Anthropic,并把响应转换回兼容 OpenAI 的 Chat Completions 格式。
准备工作
请先准备以下内容:
- 一个 Admin 和代理监听器都可用的自托管 AISIX 网关。
- 网关
config.yaml中的 Admin Key。 - Anthropic API Key。
- 提供给应用使用的明文调用方 API Key。
- 如需运行 SDK 示例,请准备 Node.js 和官方 OpenAI SDK。
协议转换如何工作
应用继续保持兼容 OpenAI 的客户端契约。服务提供方选择和协议转换都留在网关中完成。
每次请求中,AISIX 都会接收兼容 OpenAI 的 Chat Completions 请求体,将请求中的模型别名解析到 Anthropic 支持的模型,向上游发送 Anthropic Messages 请求,并向客户端返回兼容 OpenAI 的 Chat Completions 响应。
AISIX 也会将 token 用量和停止原因转换为兼容 OpenAI 的响应结构,因此 SDK 调用方可以继续使用原有解析路径。
这一路径适合常见的兼容 OpenAI 的聊天请求。当应用依赖 Anthropic 专属内容块、cache control、thinking blocks 或精确的 Anthropic 工具语义时,建议使用 Anthropic 风格的 /v1/messages 路由。
配置 Anthropic 上游
为 Anthropic 创建服务提供方密钥。api_base 请设置为裸 host,因为 AISIX 会追加 Anthropic 路由路径。
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/provider_keys" \
-H "Authorization: Bearer YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "anthropic-prod",
"provider": "anthropic",
"adapter": "anthropic",
"secret": "YOUR_ANTHROPIC_API_KEY",
"api_base": "https://api.anthropic.com"
}'
复制返回的服务提供方密钥 ID,然后创建一个指向该 Anthropic 服务提供方密钥的模型别名。
创建 Anthropic 支持的模型别名:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/models" \
-H "Authorization: Bearer YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "claude-prod",
"provider": "anthropic",
"model_name": "claude-3-5-haiku-20241022",
"provider_key_id": "YOUR_PROVIDER_KEY_ID"
}'
display_name 是兼容 OpenAI 的客户端发送给 AISIX 的 model 值。model_name 是 AISIX 发送给 Anthropic 的上游模型 ID。
如后续需要删除示例资源,请复制返回的模型 ID。
创建调用方 API Key
对明文调用方 API Key 做哈希:
export AISIX_API_KEY="sk-anthropic-via-openai"
export CALLER_KEY_HASH=$(printf '%s' "${AISIX_API_KEY}" | shasum -a 256 | awk '{print $1}')
创建调用方 API Key,并允许它访问 Anthropic 支持的别名:
curl -sS -X POST "http://127.0.0.1:3001/admin/v1/apikeys" \
-H "Authorization: Bearer YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"key_hash": "'"${CALLER_KEY_HASH}"'",
"allowed_models": ["claude-prod"]
}'
如后续需要删除示例资源,请复制返回的调用方 API Key ID。
使用 OpenAI SDK 调用别名
安装 OpenAI SDK:
npm install openai
创建一个最小化 Chat Completions 客户端:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AISIX_API_KEY,
baseURL: "http://127.0.0.1:3000/v1",
});
const completion = await client.chat.completions.create({
model: "claude-prod",
messages: [{ role: "user", content: "Say hello from AISIX." }],
});
console.log(completion.choices[0]?.message.content);
console.log(completion.usage);
运行示例:
AISIX_API_KEY="sk-anthropic-via-openai" node anthropic-via-openai-sdk.mjs
响应会保持兼容 OpenAI 的格式。调用方不会收到 Anthropic 风格的内容块。
使用 HTTP 验证
你也可以使用 curl 查看响应:
curl -sS -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer sk-anthropic-via-openai" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-prod",
"messages": [{"role":"user","content":"Say hello from AISIX."}]
}'
成功响应会使用兼容 OpenAI 的 Chat Completions 结构:
{
"object": "chat.completion",
"model": "claude-prod",
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello from AISIX."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 5,
"total_tokens": 14
}
}
下一步
你已经将兼容 OpenAI 的客户端路由到 Anthropic 上游。请继续阅读兼容 OpenAI 的 API 了解面向调用方的路由行为;当你希望端到端使用 Anthropic 请求和响应结构时,请阅读 Anthropic 风格 Messages API;如需了解端点与服务提供方支持边界,请阅读服务提供方兼容性。