把 Anthropic 的调用改成 OpenAI 兼容只需要改三处
协议之间没有想象中差别那么大:一次模型调用本质上都是「把消息发出去、把结果拿回来」。差异集中在三个位置,改这三处就够了。
第一处:鉴权头
OpenAI 协议用 Authorization: Bearer $KEY;Anthropic 协议用 x-api-key 并在头部声明 anthropic-version: 2023-06-01;Gemini 协议用 x-goog-api-key,路径里带模型名。三套头不能混用,混用得到的通常是 401。
第二处:消息结构
OpenAI 的 messages 是 role + content 的平铺列表;Anthropic 要求系统提示词单独放在顶层字段,消息角色只有 user 与 assistant;Gemini 用的是 contents 加 parts。迁移时最容易出错的是把系统提示词塞进 messages 首条。
第三处:返回解析
OpenAI 取 choices[0].message.content;Anthropic 取 content[0].text;Gemini 取 candidates[0].content.parts[0].text。流式返回的增量字段名字各不相同,做统一封装时建议在适配层里收口,不要让业务代码认识三套结构。
唯一不用改的东西
base_url。把 SDK 的 base_url 指向 https://api.lk888.ai/v1,模型 ID 保持不变,四套协议共用同一个 Key。这就是「一个 Key 接所有模型」在工程上的具体含义。
迁移动手顺序
- 先在适配层加一条新协议的通道,保留旧通道。
- 用一个低风险接口(如摘要)切 10% 流量。
- 对比返回结构差异,补齐字段映射。
- 再全量切,旧通道留一周兜底。