你的 agent 到现在只跟一个模型说过话。可市面上有 Anthropic、OpenAI、Google……换一家,请求的形状差得像两种语言。这一章讲:怎么让 agent 一套代码接所有家,换引擎不改代码。
你的 agent 现在能存、能转、能装、能动手了。但它一直只跟一个模型说话。
真实世界里模型不止一家:Anthropic 的 Claude、OpenAI 的 GPT、Google 的 Gemini……你多半想让 agent 能随时换一家——这家贵了换那家、这个任务用强模型那个用便宜的。问题是:这些家的 API,形状差得像两种语言。
这一章就解决这件事:怎么让 agent 一套代码接所有家,换引擎、代码一行不改。 先看看差异到底有多大。

同一个请求,两家的样子
你想发的东西是同一个:一句系统提示、一条用户消息、一个 read 工具。但 Anthropic 和 OpenAI 收的格式,长这样(示意,抓形状不抠字段):
Anthropic(messages)
system: "你是 agent…"
messages: [
{ role: "user",
content: [{type:"text",…}] }
]
tools: [
{ name: "read",
input_schema: {…} }
]
OpenAI(chat completions)
messages: [
{ role: "system", content:"你是…" },
{ role: "user", content: "…" }
]
tools: [
{ type:"function",
function: { name:"read",
parameters: {…} } }
]
同一个意思,三处就不一样:
- 系统提示:Anthropic 有个独立的
system字段;OpenAI 把它塞进messages里当一条role:"system"。 - 消息内容:Anthropic 爱用”内容块数组”;OpenAI 常用纯字符串。
- 工具:Anthropic 叫
input_schema;OpenAI 要套一层type:"function"、参数叫parameters。
再加上 Google、Bedrock、Mistral……每家一套方言。
天真的做法,和它的下场
带走这一句
模型不止一家,每家 API 是一套方言(系统提示放哪、工具怎么套、内容什么格式都不同)。要让 agent 能随时换家,绝不能把某一家的格式假设混进主循环——否则换家就是牵一发动全身。
下一课
答案是加一层适配(adapter):主循环只对着一个统一接口说话,每家配一个 adapter 负责翻译成它的方言。下一课看这层适配长什么样——你其实早就见过它的入口了。