claude-code-router 请求改写实战:给路由挂上自定义转换器
2026/9/1 11:27:02 网站建设 项目流程

claude-code-router 请求改写实战:给路由挂上自定义转换器

【免费下载链接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router

你正在给内部网关接入 claude-code-router,但这个网关要求每个请求都带上x-tenant-id头,缺失就直接拒绝。标准转发不会替你加这个头,手动改上游业务代码又不现实——请求改写(request rewrite)机制就是为这种场景准备的:在请求到达上游之前,按规则悄悄改一下它。

看懂请求改写能碰什么

路由规则的rewrites字段接受一组改写指令,命中规则的请求会在转发前被逐条修改:可以改请求头、增删改请求体里的任意 JSON 字段,操作类型包括 set、delete 以及数组的 append / prepend / remove / replace。如果逻辑无法用静态规则表达,还有 script 类型的路由规则,让你用一段 JavaScript 脚本读取请求内容、动态决定怎么改。整个过程都发生在网关层,业务侧完全无感。

给路由规则挂一个自定义头注入

先做最简单的事:往匹配路由的所有请求里注入一个租户头。改写指令写在规则的rewrites数组里,每条指令由keyoperationvalue组成,key必须以request开头,request.header.xxx指向头,request.body.a.b指向请求体字段。

// 路由规则的 rewrites 字段:每条都是一条改写指令 rewrites: [ { key: "request.header.x-tenant-id", operation: "set", value: "acme" }, { key: "request.body.max_tokens", operation: "set", value: "4096" }, { key: "request.header.x-legacy-flag", operation: "delete" } ]

写起来像声明配置,但有几个细节值得知道:字符串 value 会被自动解析成 JSON 字面量,"4096"落进 body 的是数字而不是字符串;delete不需要 value;数组操作用array-appendarray-replace等,其中array-replace还要求带match指定要替换的元素。每次改写的 before / after 值都会记录到请求日志里,验证"到底改了没有"不用靠猜。

在桌面端 UI 的路由管理页面里,你可以直接为规则增删改写项,配合匹配条件(如 model 前缀、请求头 contains 等)把注入范围圈定在需要的流量上。

用路由脚本写条件转换逻辑

静态 rewrites 的问题在于"无脑全改"。当改写依赖请求内容时,换成 script 规则:指向一个.js/.mjs/.cjs文件,脚本运行在独立 worker 沙箱里,超时上限 30 秒,输入对象input提供bodyheaderssummary(含最后一条用户消息文本、system 文本、工具名列表)等字段。

// 路由脚本:只在命中"billing"的请求上切换模型并打标 if (!input.summary.lastUserText.includes("billing")) return null; return { model: "Provider/audit", rewrites: [{ key: "request.header.x-routed-by", operation: "set", value: "script" }] };

返回nullfalse表示不匹配,路由继续尝试下一条规则;返回对象则同时指定目标模型和动态 rewrites,它们会与规则上静态配置的 rewrites 按顺序叠加生效。脚本还能返回fallback(retry / model-chain 模式)覆盖该规则的降级策略。

改写不生效时怎么查

  • Route rewrite cannot modify protected header:authorization、api-key、x-api-key 以及x-auth-*x-ccr-*前缀的头受保护,无法被改写覆盖——改注入x-tenant-id这类自定义头。
  • 改写静默没生效:多半是规则未命中或key没以request开头——查请求日志里该规则的 before / after 记录即可定位。
  • 脚本返回了 model 却报未配置:脚本指定的模型必须先在提供方配置里存在,先加模型再挂脚本。

下一步

先跑通最小场景:clone 仓库git clone https://gitcode.com/GitHub_Trending/cl/claude-code-router,启动后在一条路由上写一条头注入改写,发一个真实请求核对日志里的 before / after。改写的完整操作集和脚本沙箱的校验、超时、熔断逻辑,分别看 rewrite.ts 与 route-script-runtime.ts。

【免费下载链接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询