← 返回航标笔记
#接入指南#协议

Anthropic Messages 协议在中转上的字段差异

研究桌上的服务模块、资料清单与放大镜,呈现 API 服务选型中的证据比对

system 是顶级字段、max_tokens 必填、图片走 base64 块——这三条在中转兼容层上最容易被打回。

Anthropic 的 Messages 协议与 OpenAI 的 chat completions 有几处结构性差异,中转兼容层如果只做字段映射而不做语义对齐,就会在细节上出错。

第一处是 system。Anthropic 把系统提示放在顶层 system 字段,而不是塞进 messages 数组里的一条 role=system。部分中转会把 role=system 的条目直接丢弃,导致人设与约束失效;反过来,用 OpenAI 客户端携带 system 消息再请求 Anthropic 端点,也可能因为它先转成顶层字段而丢失在后半段出现的系统指令。

第二处是 max_tokens。Anthropic 要求该字段必填,缺省时返回参数错误;OpenAI 客户端往往不传。中转如果没做默认值填充,就会出现“明明通了却一直 400”的情况。建议在客户端固定传一个明确值,并把它与业务侧的输出上限对齐。

第三处是多模态。Anthropic 的图片是 content 数组里的 image 块,source 支持 base64 与 url 两种;OpenAI 是 image_url 对象。中转做协议转换时,最常见的失败是 URL 形式的图片被上游拒绝,因为部分实现只支持 base64。遇到这类报错,先把图片转成 base64 再试。

第四处是 stop_sequences 与 thinking。部分中转会过滤未知字段,thinking 或 reasoning 相关参数被静默丢弃,表现为推理类模型效果变差但没有报错。排查方法是看响应里是否包含对应的 reasoning 块,而不是只看正文。

把这些差异整理成一张字段对照表,比在客户端里反复试错高效得多。切换协议时,先跑一条最小请求,再逐项开启 system、图片、工具,能快速定位是哪一层不兼容。