一名用户购买第三方 API 中转服务 Command Code 后,在 Claude Code CLI 中接入时报出 400 Invalid input at messages.role 错误。经排查,问题根因不在中转服务,而在 Claude Code 客户端的版本变更:自 2.1.154 版本起,Claude Code 会将环境上下文和精简系统提示以 {“role”:”system”} 的形式直接注入 messages 数组,而 Anthropic Messages API 规范规定 messages 数组仅允许 user 和 assistant 两种角色,system 内容必须作为请求体顶层字段传递。Command Code 按规范严格校验请求,因此返回 400 错误。相关官方 issue 被 Anthropic 以 not planned 关闭,官方认为这属于其自家网关的兼容行为,第三方网关需自行适配。排查中还发现替代路径存在局限:改走 OpenAI Chat Completions 转换管线虽可消除 400 错误,但 Command Code 的 Claude 系模型仅在 /messages 端点提供服务,该路径只能搭配 DeepSeek、GLM、Kimi 等非 Claude 模型,且协议转换会丢失 WebSearch、thinking 等 Anthropic 专有特性;原生 Anthropic Messages 透传则不会将 system 消息提取回顶层,依旧报错。可行方案为直连加本机中继,或降级 Claude Code 至 2.1.153(最后一个不注入 system 消息的版本),但降级意味着放弃近半年的功能更新,代价过高。
事件分析
核心观点:官方客户端率先偏离自家 API 规范,第三方网关被迫无限期追赶,生态封闭正转化为开发者的隐性接入成本。
原文链接:Linux.do

评论前必须登录!
立即登录 注册