求改寫實(shí)戰(zhàn):給路由掛上自定義轉(zhuǎn)換器)
claude-code-router 請(qǐng)求改寫實(shí)戰(zhàn)給路由掛上自定義轉(zhuǎn)換器【免費(fèi)下載鏈接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router你正在給內(nèi)部網(wǎng)關(guān)接入 claude-code-router但這個(gè)網(wǎng)關(guān)要求每個(gè)請(qǐng)求都帶上x(chóng)-tenant-id頭缺失就直接拒絕。標(biāo)準(zhǔn)轉(zhuǎn)發(fā)不會(huì)替你加這個(gè)頭手動(dòng)改上游業(yè)務(wù)代碼又不現(xiàn)實(shí)——請(qǐng)求改寫request rewrite機(jī)制就是為這種場(chǎng)景準(zhǔn)備的在請(qǐng)求到達(dá)上游之前按規(guī)則悄悄改一下它。看懂請(qǐng)求改寫能碰什么路由規(guī)則的rewrites字段接受一組改寫指令命中規(guī)則的請(qǐng)求會(huì)在轉(zhuǎn)發(fā)前被逐條修改可以改請(qǐng)求頭、增刪改請(qǐng)求體里的任意 JSON 字段操作類型包括 set、delete 以及數(shù)組的 append / prepend / remove / replace。如果邏輯無(wú)法用靜態(tài)規(guī)則表達(dá)還有 script 類型的路由規(guī)則讓你用一段 JavaScript 腳本讀取請(qǐng)求內(nèi)容、動(dòng)態(tài)決定怎么改。整個(gè)過(guò)程都發(fā)生在網(wǎng)關(guān)層業(yè)務(wù)側(cè)完全無(wú)感。給路由規(guī)則掛一個(gè)自定義頭注入先做最簡(jiǎn)單的事往匹配路由的所有請(qǐng)求里注入一個(gè)租戶頭。改寫指令寫在規(guī)則的rewrites數(shù)組里每條指令由key、operation、value組成key必須以request開(kāi)頭request.header.xxx指向頭request.body.a.b指向請(qǐng)求體字段。// 路由規(guī)則的 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 } ]寫起來(lái)像聲明配置但有幾個(gè)細(xì)節(jié)值得知道字符串 value 會(huì)被自動(dòng)解析成 JSON 字面量4096落進(jìn) body 的是數(shù)字而不是字符串delete不需要 value數(shù)組操作用array-append、array-replace等其中array-replace還要求帶match指定要替換的元素。每次改寫的 before / after 值都會(huì)記錄到請(qǐng)求日志里驗(yàn)證到底改了沒(méi)有不用靠猜。在桌面端 UI 的路由管理頁(yè)面里你可以直接為規(guī)則增刪改寫項(xiàng)配合匹配條件如 model 前綴、請(qǐng)求頭 contains 等把注入范圍圈定在需要的流量上。用路由腳本寫條件轉(zhuǎn)換邏輯靜態(tài) rewrites 的問(wèn)題在于無(wú)腦全改。當(dāng)改寫依賴請(qǐng)求內(nèi)容時(shí)換成 script 規(guī)則指向一個(gè).js/.mjs/.cjs文件腳本運(yùn)行在獨(dú)立 worker 沙箱里超時(shí)上限 30 秒輸入對(duì)象input提供body、headers、summary含最后一條用戶消息文本、system 文本、工具名列表等字段。// 路由腳本只在命中billing的請(qǐng)求上切換模型并打標(biāo) if (!input.summary.lastUserText.includes(billing)) return null; return { model: Provider/audit, rewrites: [{ key: request.header.x-routed-by, operation: set, value: script }] };返回null或false表示不匹配路由繼續(xù)嘗試下一條規(guī)則返回對(duì)象則同時(shí)指定目標(biāo)模型和動(dòng)態(tài) rewrites它們會(huì)與規(guī)則上靜態(tài)配置的 rewrites 按順序疊加生效。腳本還能返回fallbackretry / model-chain 模式覆蓋該規(guī)則的降級(jí)策略。改寫不生效時(shí)怎么查報(bào)Route rewrite cannot modify protected headerauthorization、api-key、x-api-key 以及x-auth-*、x-ccr-*前綴的頭受保護(hù)無(wú)法被改寫覆蓋——改注入x-tenant-id這類自定義頭。改寫靜默沒(méi)生效多半是規(guī)則未命中或key沒(méi)以request開(kāi)頭——查請(qǐng)求日志里該規(guī)則的 before / after 記錄即可定位。腳本返回了 model 卻報(bào)未配置腳本指定的模型必須先在提供方配置里存在先加模型再掛腳本。下一步先跑通最小場(chǎng)景clone 倉(cāng)庫(kù)git clone https://gitcode.com/GitHub_Trending/cl/claude-code-router啟動(dòng)后在一條路由上寫一條頭注入改寫發(fā)一個(gè)真實(shí)請(qǐng)求核對(duì)日志里的 before / after。改寫的完整操作集和腳本沙箱的校驗(yàn)、超時(shí)、熔斷邏輯分別看 rewrite.ts 與 route-script-runtime.ts?!久赓M(fèi)下載鏈接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考