拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Claude Code Router 请求改写实战:让任意内部网关都能被路由命中

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上周有读者反馈接了公司的内部 LLM 网关客户端走的是标准协议但网关要求请求体里多带一个租户标识、模型名还得换成内部代号直接转发过去就被 400 打回来了。在 claude-code-router 里这类转发前动动手脚的需求不需要你写代码——它的路由层自带一套请求改写Rewrite与路由脚本Route Script机制请求在发往上游之前会先被按需修改。改写发生在哪先看懂请求经过的路先给三个名词打个底后面反复会用到路由规则Route Rule决定一个进来的请求发给哪个 Provider、走哪个模型。请求改写Route Rewrite对匹配到的请求按声明式规则修改body或headers里的字段。路由脚本Route Script在独立 Worker 里运行的小段 JS可基于上下文动态决定改写内容。整条链路可以概括为请求进入网关 → 命中路由规则 → 执行改写/脚本 → 附加 Provider 凭据 → 发往上游。改写逻辑的核心实现在 packages/core/src/routing/rewrite.ts脚本运行时在 packages/core/src/routing/route-script-runtime.ts。项目里也有现成的转换落点可以参照比如托管联网搜索功能对请求和响应分别做的加工packages/core/src/gateway/features/hosted-web-search/request-transform.ts。跟着做一遍用声明式改写修好请求改一个 body 字段set 操作最常见的诉求是换个模型名或塞个参数。一条改写规则就是一个 JSON 对象key必须以request.开头指向body或header下的路径{ key: request.body.model, operation: set, value: deepseek-chat }operation支持set覆盖、delete删除、以及针对数组的array-append/array-prepend/array-remove/array-replace。给 body 里的数组删元素也很直白例如去掉某个不支持的工具声明{ key: request.body.tools, operation: array-remove, value: { type: web_search } }高频坑set这类非删除操作必须带value而且 header 的 value 只能是字符串body 的 value 会被按 JSON 解析——写123出来的是数字 123写true出来的是布尔值想保留纯文本请加引号包一层。改 header先绕开保护名单给内部网关加个自定义头就行{ key: request.header.x-tenant-id, operation: set, value: team-ai }高频坑authorization、api-key、x-api-key、x-goog-api-key等鉴权与连接相关头在保护名单里源码中protectedHeaderNames且所有x-auth-*、x-ccr-*前缀一律拒绝改写它们会直接报编译错误。凭据类字段应该配在 Provider 的 credentials 里由网关统一注入而不是走改写。条件替换array-replace 的 matcharray-replace支持match字段——数组元素命中 match 才替换不命中保持原样。比如把某个工具的描述替换成上游能接受的版本比全量 set 稳妥得多。这条操作是六种里唯一要求同时提供value和match的。进阶用路由脚本做动态改写规则是声明式的好处是稳代价是不灵活。当改成什么取决于请求内容本身比如按用户、按内容长度选模型时就轮到路由脚本出场。脚本运行在独立 Worker 进程里route-script-worker.ts通过compileScriptRouteRewrite校验返回值——脚本产出的改写和配置式改写走同一套编译与执行路径所以操作集完全一致// 脚本中返回一条改写即可生效 { key: request.body.model, operation: set, value: pickModel(request) }脚本侧的 key 校验会更严操作必须是六种之一、key 不能为空同样不允许碰保护头。脚本适合放策略规则适合放事实固定租户号、固定参数两者可以共存于同一条路由。组合玩法改写与路由联动改写不只是修数据还能改方向。源码里effectiveTargetProviderName会读取改写后的x-target-provider/x-gateway-target-provider头来重定向目标 Provider也就是说用一条 set 规则就能在不改动路由主规则的情况下切上游。常见组合如下组合链路典型场景改写 路由改 model → 命中不同 Provider外部统一暴露一个别名模型改写 ×2 串联改 body → 改 header内部网关同时校验模型名与租户头脚本 改写脚本定策略 → 规则兜底按请求动态选模型默认值保底改写 Provider 头set x-target-provider免改路由的临时切流、灰度配好后不用猜日志视图会记录每次改写的前后值before/after变更追踪哪些字段被动了、动成了什么一条请求的 trace 里看得清清楚楚。排障速查症状根因处理报path ... must start with request.key 没按request.body/header格式写补上request.前缀与 scope 段报cannot modify protected header authorization试图改写鉴权/连接类保护头凭据放到 Provider credentials 配置里报requires a value非 delete 操作漏了 value补 value或把 operation 改成 delete报contains a non-JSON valuevalue 不是合法 JSON 或 header 值非字符串header 用字符串body 用合法 JSON规则生效但 model 仍是旧值model 值还会经过路由选择器规范化如provider/model形式确认 model 标识写法看 trace 里 after 值是否按预期变化收口它的能力边界这套机制覆盖的是路由途中改 JSON声明式改写负责确定性的字段增删改路由脚本负责基于上下文的动态决策再配合 Provider 头改写就能做条件切流。它不做协议级的整体转译Anthropic ↔ OpenAI 这类全量格式转换由 Provider 侧适配完成也不支持在改写里跑任意 I/O——值必须是 JSON。先翻一遍 README再对着上面几个源码路径读一遍真实实现半小时就能把内部网关驯服。现在就去给你的路由规则加一条改写试试【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门