让 Claude Code 点到想用的后端:把它写死的模型名映射到聚合站别名
本文解释 Claude Code 客户端内置的模型标识(如 claude-sonnet-4-20250514)在通过 LLM API 聚合站转发时如何被识别与映射,并给出三种重映射方案:利用聚合站别名配置、在客户端侧拦截改写请求、以及服务端代理层转换。文章不涉及具体价格与模型清单,仅讨论机制与操作要点,帮助开发者将 Claude Code 的请求导向 GPT、DeepSeek 或 Qwen 等非 Claude 后端。
Claude Code 把模型名写死在代码里,默认指向 Claude 系列模型。当它指向聚合站时,请求里带的仍是这些 claude-* 标识。聚合站需要在转发前把它们翻译成上游真实模型,或者让你主动重映射到 GPT、DeepSeek、Qwen 等后端。本文拆解这套映射发生在哪些环节,以及可行的拦截与改写方式。
Claude Code 如何选择模型标识
Claude Code 在发起 API 请求时,会在请求体中携带 model 字段。这个值来自内置配置或环境变量,常见形态是带日期后缀的 claude- 名称。由于代码写死,它不会主动改为 gpt- 或 deepseek-* 之类的名字。
因此,只要请求经过聚合站,聚合站收到的就是 Claude Code 认定的那个模型标识。能否落到别的后端,取决于聚合站是否把这个标识映射到其他模型。
聚合站一侧的翻译层
聚合站的核心工作之一是模型名翻译:接收客户端传来的 model 字段,按站点配置把它换成向上游服务商发请求时使用的真实模型名。常见做法有几种:
- 别名表:站点维护一张从客户端可见名称到上游模型的映射表。Claude Code 传来的
claude-*若在别名表中有条目,就被替换成目标后端。 - 前缀/路径路由:部分聚合站允许在模型名里加入路由信息,或通过不同接入点区分后端。
- 默认回退:若某个标识未命中任何映射,站点可能回退到默认模型,或直接返回错误。
换句话说,Claude Code 的模型名在聚合站内部只是一把“钥匙”;聚合站决定这把钥匙开哪扇门。
方式一:利用聚合站别名做重映射
最省事的方式是配置聚合站的别名表。通常站点会提供控制台或配置接口,允许你把某个客户端模型名指向任意上游模型。
操作要点:
- 确认聚合站是否支持自定义别名,以及别名作用域(是按 API key、按项目还是全局)。
- 把 Claude Code 实际会发出的
model值(可通过抓包或查看环境变量确认)登记为别名键。 - 把别名值设为你希望落到后端对应的模型标识(例如
gpt-、deepseek-、qwen-*等,以站点文档为准)。 - 用一次小请求验证响应头或返回体里的
model字段,确认已落到目标后端。
这种方式不改客户端,风险最低,但依赖聚合站是否开放别名配置。
方式二:在客户端侧拦截并改写请求
如果聚合站不开放别名,或者你想按请求条件动态切换后端,可以在客户端与聚合站之间加一层拦截。
常见做法是让 Claude Code 指向一个本地代理,由代理改写请求体里的 model 字段:
Claude Code -> 本地代理(改写 model) -> 聚合站 -> 上游后端
代理需要做几件事:
- 读取请求体 JSON,定位
model字段。 - 按规则替换为目标模型名;可以按路径、按 header 或按请求特征决定替换成哪个后端。
- 保留其他字段不变,尤其是流式参数与工具调用结构。
- 注意 Claude Code 可能走流式接口,代理要支持流式透传,不能在改写
model后缓冲整个响应。
这种方式的优点是灵活:你可以按任务类型把某些请求导向 GPT,某些导向 DeepSeek 或 Qwen。代价是要维护代理,并确保流式与错误处理正确。
方式三:服务端代理层做转换
如果你已经在客户端和聚合站之间有自建网关,也可以在网关层完成模型名转换。网关通常比本地代理更适合团队使用,因为配置集中、可审计。
实现要点与方式二类似,但需要注意:
- 网关要能识别 Claude Code 使用的接入点,避免影响其他客户端。
- 模型名转换规则最好用配置而不是代码写死,方便后续调整。
- 记录原始
model与改写后的model,便于排查落错后端的问题。
映射时需要注意的兼容性
不同后端的 API 结构并不完全一致。改模型名只是第一步,还需要确认:
- 消息格式:Claude Code 发出的消息结构是 Anthropic 风格还是 OpenAI 风格,取决于它调用的接入点。聚合站通常会在翻译层做格式转换,但重映射后要确认转换仍然正确。
- 工具调用:如果 Claude Code 使用工具调用,目标后端是否支持等价结构,聚合站是否做了适配。
- 流式响应:重映射后流式事件格式是否一致,客户端能否正常解析。
- 错误语义:上游返回的错误是否被正确翻译,避免客户端误判。
这些兼容性问题比模型名本身更容易导致“请求发出去了但结果不对”。
验证重映射是否生效
改写后不要只看请求是否成功,建议做三层验证:
- 请求侧:抓包或查看代理日志,确认发往聚合站的
model已是目标值。 - 响应侧:检查响应体里的
model字段与响应特征,确认来自目标后端而非回退模型。 - 行为侧:用可区分的提示词或任务观察输出风格与能力边界,辅助判断实际后端。
若聚合站返回的 model 字段与预期不符,优先检查别名表是否命中,以及代理是否在流式请求中正确改写了请求体。
小结
Claude Code 的模型名是写死的,但请求经过聚合站时可以翻译。三条路径各有取舍:别名配置最轻量,客户端代理最灵活,服务端网关最适合团队。核心都是把 model 字段从 claude-* 改写成目标后端标识,并确保消息格式、工具调用与流式响应在重映射后仍然兼容。