Anthropic 兼容 API
Anthropic API 已成为与 LLM 打交道的另一个主要接口,尤其是在基于 Claude 的应用和智能体工作流中。
什么是 Anthropic 兼容 API?
Anthropic 兼容 API 是指任何复刻了 Anthropic API 的接口、请求/响应模式(schema)和身份验证模型的 API。随着 Claude 模型的兴起,尤其是通过 Claude Code 和 Claude Agent SDK 等智能体工具的推动,许多应用和框架都采用了 Anthropic Messages API 格式。
通过暴露一个 Anthropic 兼容端点,你可以在基本保持现有基于 Anthropic 的客户端、SDK 和智能体循环不变的情况下,提供开源模型(如 Llama、Qwen、DeepSeek)或其他提供商的服务。
如何调用 Anthropic 兼容 API
使用官方 Anthropic SDK,并将 base_url 指向你的端点:
from anthropic import Anthropic
client = Anthropic(
base_url="https://your-custom-endpoint.com",
api_key="your-api-key"
)
response = client.messages.create(
model="your-model-name",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[
{"role": "user", "content": "How can I integrate Anthropic-compatible APIs?"}
]
)
print(response.content[0].text)
你也可以直接用 curl 调用端点:
curl https://your-custom-endpoint.com/v1/messages \
-H "x-api-key: your-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model-name",
"max_tokens": 1024,
"system": "You are a helpful assistant.",
"messages": [
{"role": "user", "content": "How can I integrate Anthropic-compatible APIs?"}
]
}'
流式响应
Anthropic SDK 暴露了一个 messages.stream() 辅助方法,在模型生成响应时产生类型化事件。
from anthropic import Anthropic
client = Anthropic(
base_url="https://your-custom-endpoint.com",
api_key="your-api-key"
)
with client.messages.stream(
model="your-model-name",
max_tokens=1024,
messages=[
{"role": "user", "content": "Write a short poem about streaming."}
],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
确切的事件模式可能因框架而异。始终查看其官方文档。
列出可用模型
Anthropic 暴露了 /v1/models 端点,许多兼容服务器也实现了它。用它来发现后端接受哪些 model 名称:
from anthropic import Anthropic
client = Anthropic(
base_url="https://your-custom-endpoint.com",
api_key="your-api-key"
)
for model in client.models.list().data:
print(model.id)
或者通过 curl:
curl https://your-custom-endpoint.com/v1/models \
-H "x-api-key: your-api-key" \
-H "anthropic-version: 2023-06-01"
使用返回的任何 id 作为 messages.create() 调用中的 model 字段。
需要记住的事项
兼容端点会说 Anthropic 模式,但它并不是官方的 Anthropic API。有几个实际的注意事项:
- API 密钥可能被接受但不被校验。许多自托管推理框架并不验证该值,所以你通常可以传入任意字符串(例如
"EMPTY")。当端点或网关真的会检查它时,请把它当作真正的机密对待。 - 配置通常通过环境变量完成。许多框架的文档建议通过环境变量设置 API 密钥和基础 URL(这样 Anthropic SDK 会自动读取它们),而不是硬编码在客户端代码中。各框架的思路相同,但具体的变量名可能不同。
- 并非所有 API 字段都被支持。像
model、messages和max_tokens这样的常见字段通常没问题,但除此之外的覆盖度就会变薄。例如:
何时使用它
在以下情况下选择 Anthropic 兼容端点:
- 你的应用程序或智能体技术栈已经基于 Anthropic API 构建(例如 Claude Code、Claude Agent SDK,或使用 Anthropic 风格工具使用的自定义智能体循环)。
- 下游工具(SDK、代理、评估器)期望 Anthropic 模式,而将其重写为 OpenAI 兼容比运行一个兼容端点工作量更大。
对于没有现有集成的新应用,OpenAI 兼容 API仍然是更广泛支持的默认选择。如果你主要关心可预测的机器可读响应,还应将 API 表面与你所选后端中的结构化输出支持进行比较。
常见问题
我应该选择 OpenAI 兼容 API 还是 Anthropic 兼容 API?
根据你现有的技术栈来选择,而不仅仅是模型。如果你的客户端、智能体框架或 SDK 已经使用 OpenAI 模式,那么 OpenAI 兼容端点是最简单的路径。如果它们使用 Anthropic 模式,那么 Anthropic 兼容端点可以避免重写集成。任一端点背后的模型可以是相同的;只有 API 表面发生变化。
OpenAI API 和 Anthropic API 有什么区别?
两个 API 都允许应用发送提示、接收模型响应、流式输出和使用工具,但它们使用不同的请求和响应模式。兼容端点需要匹配你的客户端所期望的模式。
| 区域 | OpenAI API | Anthropic API |
|---|---|---|
| 主要聊天端点 | 通常是 /v1/chat/completions 或更新的 Responses API 端点 | /v1/messages |
| 客户端形态 | 围绕聊天补全、响应、工具和 choices 的 OpenAI SDK 约定 | 围绕消息、内容块和类型化流事件的 Anthropic SDK 约定 |
| 系统提示 | 通常表示为 system 或 developer 消息,或等价的指令字段 | 在 Messages API 中作为顶层的 system 字段传递 |
| 身份验证头 | 通常是 Authorization: Bearer ... | 通常是 x-api-key 外加 anthropic-version 头 |
| 工具使用 | OpenAI 风格的工具定义和工具调用字段 | Anthropic 风格的工具定义和工具使用内容块 |