Claude Code Router 自定义路由脚本指南:4 步让每条请求按你的规则改写

发布时间:2026/9/1 11:44:24
Claude Code Router 自定义路由脚本指南:4 步让每条请求按你的规则改写 Claude Code Router 自定义路由脚本指南4 步让每条请求按你的规则改写【免费下载链接】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 接第三方模型时你是不是也遇到过头疼事同一个网关要按租户换模型某些参数只在特定请求里该改条件多了普通规则根本写不下。CCRClaude Code Router的自定义路由脚本就是干这个的写一个本地 JS 文件让它在请求转发前读一遍完整请求决定换哪个模型、改哪些参数。原理速览把路由脚本理解成柜台前的传菜口每笔 LLM 请求端上桌前CCR 先递给你写好的 JS 文件过目。脚本看一眼就能拦下它改模型、改参数、换备用链也可以说不碰这笔请求就照常落到下一条规则。脚本跑在独立 Worker 里超时、报错都不会拖垮主网关。 3 分钟在路由页创建第一条脚本规则操作打开 CCR 路由页点右上角「添加」。在弹窗里把规则类型从普通条件改成Node.js 脚本选一个.js/.mjs/.cjs本地文件设 10–30000 毫秒的超时先点「验证」再保存。关键代码脚本文件就是一个异步函数体直接用注入的input、api不需要import或module.exports// 只处理指定模型其余请求放行给后续规则 if (input.body.model ! deepseek/deepseek-chat) { return null; } return { model: anthropic/claude-sonnet-4 };预期结果命中时请求被切到anthropic/claude-sonnet-4返回null时该规则视为不命中继续匹配下一条规则。 用 input 读请求字段按租户分流模型操作脚本每次执行都会收到一份独立的只读input里面有完整 body、headers、sessionId、tokenCount还有帮你摘要好的summary.lastUserText、summary.toolNames等字段不用自己遍历消息。关键代码按自定义 Header 分流是最常见的用法const rawTenant input.headers[x-tenant-id]; const tenant Array.isArray(rawTenant) ? rawTenant[0] : rawTenant; if (!tenant) return null; // 没有租户信息的请求交给后续规则 // 读本地策略文件拿到该租户的主模型 const policy await api.fs.readJson(~/.config/ccr/policy.json); if (!policy?.[tenant]) return null; return { model: policy[tenant].model, rewrites: [ { key: request.body.temperature, operation: set, value: 0.2 }, { key: request.header.x-route-policy, operation: set, value: tenant } ] };预期结果不同租户的请求各自落到策略文件里配置的模型temperature和自定义 Header 被一并改写。改写key必须以request.body.或request.header.开头operation支持set、delete、array-append等六种。 返回值里带上备用模型链失败自动降级操作返回对象除了model、rewrites还能带fallback为这条规则单独指定失败后的降级策略覆盖页面顶部的全局默认。关键代码return { model: openrouter/claude-sonnet-4, rewrites: [{ key: request.body.temperature, operation: set, value: 0.3 }], fallback: { mode: model-chain, models: [anthropic/claude-haiku, deepseek/deepseek-chat] } };预期结果主模型遇到 4xx/5xx 时按数组顺序依次尝试claude-haiku、deepseek-chat响应头里会出现x-ccr-fallback-model等字段方便确认是否走了降级。常见问题改完脚本文件要不要重新保存规则不用。CCR 每次执行前重新读取文件内容变化后自动按新版本编译保存动作只对规则本身生效。脚本超时或抛错请求会被卡住吗不会。执行采用 fail-open 策略记录一条路由诊断后继续匹配下一条规则。同一规则 60 秒内失败 3 次还会熔断 30 秒避免坏脚本反复拖慢请求。怎么确认规则真的命中了发一次请求后看请求日志里的request model、resolved provider、resolved model三个字段再配合路由原因即可定位。有哪些硬性限制脚本文件最大 5 MiB超时范围 10–30000 毫秒返回值最大 64 KiB 且必须可 JSON 序列化动态改写最多 32 条api.fetch响应体上限 1 MiB。返回值能随便写吗只能返回null/false/true或{ match?, model?, rewrites?, fallback? }对象其中model必须是 CCR 已配置的模型否则整条结果按不命中处理并留下诊断信息。关键资源一句话总结把条件写不下的路由逻辑塞进一个本地 JS 文件CCR 负责安全地跑起来、可观测地降级。想继续深挖看这几处路由与脚本规则完整文档docs/src/content/docs/zh/configuration/routing.md脚本执行入口Worker 调度、熔断packages/core/src/routing/route-script-runtime.tsinput字段构造逻辑packages/core/src/routing/route-script-context.ts返回值归一化与限制校验packages/core/src/routing/route-script-result.ts扩展机制注册 HTTP 路由等更底层能力docs/src/content/docs/zh/configuration/extensions.md【免费下载链接】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),仅供参考