统一契约,不只是统一路由
把很多模型接到一个端点只解决碎片化的一半。另一半是方言:OpenAI SDK 要 /chat/completions,Anthropic SDK 要 /messages,OpenAI 较新的 Responses API 要 /responses。统一 AI API 在一个表面上实现三种请求形状,所以代码库已经会说的 SDK 不用改。
| Dialect | Endpoint | For |
|---|---|---|
| OpenAI chat | /api/v1/chat/completions | Drop-in for OpenAI's chat SDK |
| Anthropic messages | /api/v1/messages | Drop-in for Claude clients |
| OpenAI Responses | /api/v1/responses | The newer OpenAI Responses surface |
| Embeddings | /api/v1/embeddings | OpenAI-style vector embeddings |
同一个模型,两种方言
因为契约是标准 API,你留着手里的客户端库,只把它指到 AnyRouter。OpenAI 客户端:
from openai import OpenAI
client = OpenAI(base_url="https://anyrouter.dev/api/v1", api_key="sk-ar-v1-...")
resp = client.chat.completions.create(
model="anthropic/claude-opus-4-8",
messages=[{"role": "user", "content": "Hello"}],
)……或 Anthropic 客户端,对着同一账号和 key:
from anthropic import Anthropic
client = Anthropic(base_url="https://anyrouter.dev/api", api_key="sk-ar-v1-...")
msg = client.messages.create(
model="anthropic/claude-opus-4-8",
max_tokens=256,
messages=[{"role": "user", "content": "Hello"}],
)没有 SDK 锁定
统一层只有在离开它很容易时才安全。这里每个表面都是公开标准,不是私有协议——同一份代码随时可以指回 OpenAI 或 Anthropic。Model id 变成 provider/model 字符串,选模型是配置值,你在每种方言上拿到一把 key、一张账单、一份审计日志。
这是契约这一面。路由那一面——170+ 个模型上的自动失败切换和供应商偏好——见 /blog/zh/one-api-every-llm。
一个端点说 OpenAI chat、Anthropic /messages 和 Responses API。
看统一 API