两种调用 LLM 的方式
到达模型 API 有两种老实办法:用供应商自己的 SDK 和 key 直连,或把请求经一个网关,前面是多家供应商、后面是一份契约。两种都不错——权衡取决于你实际用几家,以及单次请求-响应之外还需要什么。
只用一家时直连更简单。一旦你在同时应付多家——不同 SDK、不同 key、不同的成本和延迟看板——网关才值这个复杂度。
直连 vs. 网关,并排看
| 维度 | 直连每家供应商 | 经一个网关 |
|---|---|---|
| Auth | 每家一把 API key,分开管 | 一把 key(sk-ar-v1-…)打到每家 |
| SDK | 每家自己的 SDK 和请求方言 | 一个兼容 OpenAI 的端点(外加 /messages 和 /responses) |
| Failover | 你自己按 SDK 写重试/回退 | 路由内置自动切到健康上游 |
| 账单 | 每个供应商账号单独发票和余额 | 跨供应商一份余额——或对你已在付的 key 做 $0 加价 BYOK |
| 审计日志 | 散落在各家自己的看板(如果有) | 一份按请求日志——成本、延迟、token——覆盖每家 |
| 切换成本 | 重新接入新 SDK、鉴权方案和错误处理 | 改一个 provider/model id 字符串;同一把 key,同一个端点 |
无论哪条路你都保留的东西
上面的对比只有在网关没有用另一种锁定换掉原来的锁定时才成立。AnyRouter 的契约是标准兼容 OpenAI 的表面,所以你写的客户端代码就是直连供应商时会写的同一份——只是指向一个 URL 而不是很多:
from openai import OpenAI
client = OpenAI(
base_url="https://anyrouter.dev/api/v1",
api_key="sk-ar-v1-...",
)
resp = client.chat.completions.create(
model="openai/gpt-5.5", # or anthropic/claude-opus-4-8, google/gemini-2.5-pro
messages=[{"role": "user", "content": "Hello"}],
)这次调用没有任何 AnyRouter 专有部分——同一套客户端库也能打任何兼容 OpenAI 的端点,包括供应商自己的。
什么时候直连仍然合理
如果项目只对接恰好一家供应商,也不需要 failover、按供应商的审计日志,或跨模型的共享余额,直连更简单——少一跳,少一个账号要推理。一旦第二家供应商、一条回退路径、或跨模型的单一成本视图出现,网关的复杂度就开始回本。

继续直连供应商,或经一把 key 和一份审计日志路由它们。
免费拿一把 key