跳到主要内容

Anthropic 兼容 API

Anthropic API 已成为与 LLM 打交道的另一个主要接口,尤其是在基于 Claude 的应用和智能体工作流中。

什么是 Anthropic 兼容 API?

Anthropic 兼容 API 是指任何复刻了 Anthropic API 的接口、请求/响应模式(schema)和身份验证模型的 API。随着 Claude 模型的兴起,尤其是通过 Claude CodeClaude 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 字段都被支持。像 modelmessagesmax_tokens 这样的常见字段通常没问题,但除此之外的覆盖度就会变薄。例如:
    • 模态(Modalities)。官方 Anthropic API 接受如 "image""document" 这样的类型。对于许多开源 LLM,这些根本不受支持。在假设某种内容类型会通过之前,始终检查兼容性文档。
    • 高级特性。像提示缓存(用于缓存前缀的 cache_control)、扩展思考以及某些工具使用选项这样的能力可能会被忽略或拒绝。如果你依赖这些功能,在移植基于 Anthropic 的应用之前,请确认它们能端到端工作。

何时使用它

在以下情况下选择 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 APIAnthropic API
主要聊天端点通常是 /v1/chat/completions 或更新的 Responses API 端点/v1/messages
客户端形态围绕聊天补全、响应、工具和 choices 的 OpenAI SDK 约定围绕消息、内容块和类型化流事件的 Anthropic SDK 约定
系统提示通常表示为 systemdeveloper 消息,或等价的指令字段在 Messages API 中作为顶层的 system 字段传递
身份验证头通常是 Authorization: Bearer ...通常是 x-api-key 外加 anthropic-version
工具使用OpenAI 风格的工具定义和工具调用字段Anthropic 风格的工具定义和工具使用内容块

其他资源