頭完全指南:通過 `x-vsr-selected-*` 頭實(shí)現(xiàn)路由可觀測(cè)性與調(diào)試)
后端API網(wǎng)關(guān)模型推理服務(wù)AI Agent【免費(fèi)下載鏈接】semantic-routerAn open, programmable decision layer for models and compute.項(xiàng)目地址https://gitcode.com/gh_mirrors/sem/semantic-router點(diǎn)擊查看免費(fèi)下載本文是 semantic-router 中 VSRVector Semantic Router決策跟蹤響應(yīng)頭x-vsr-selected-category、x-vsr-selected-reasoning、x-vsr-selected-model的實(shí)戰(zhàn)技術(shù)指南。它面向需要調(diào)試路由結(jié)果、監(jiān)控模型選擇與推理模式、以及基于路由元數(shù)據(jù)做成本核算的開發(fā)者與運(yùn)維人員。讀完本文你將掌握這些頭字段的完整取值語(yǔ)義、觸發(fā)條件與排除條件并理解它們?nèi)绾斡烧Z(yǔ)義路由器ext_proc 流水線在響應(yīng)頭階段寫入以及如何在真實(shí)請(qǐng)求中驗(yàn)證與消費(fèi)這些元數(shù)據(jù)。概述什么是 VSR 決策跟蹤響應(yīng)頭semantic-router 作為模型與算力之間的可編程決策層會(huì)在請(qǐng)求處理過程中執(zhí)行分類domain classification、推理模式判定reasoning mode與模型選擇model selection等一系列路由決策。為了讓這些看不見的決策過程變得可觀測(cè)路由器會(huì)自動(dòng)在成功的響應(yīng)上附加一組以x-vsr-selected-為前綴的響應(yīng)頭用于跟蹤 VSR 的決策信息。這些頭幫助開發(fā)與運(yùn)維團(tuán)隊(duì)回答三個(gè)核心問題這個(gè)請(qǐng)求被 VSR 歸到了哪個(gè)類別category這個(gè)請(qǐng)求是否啟用了推理模式reasoning這個(gè)請(qǐng)求最終由哪個(gè)模型model處理在源碼中這些響應(yīng)頭的名稱以常量形式集中定義在 src/semantic-router/pkg/headers/headers.go 的 VSR Decision Tracking Headers 區(qū)塊VSRSelectedCategory x-vsr-selected-category—— 領(lǐng)域分類器domain classifierMMLU 類別選出的類別VSRSelectedReasoning x-vsr-selected-reasoning—— 推理模式判定結(jié)果on/offVSRSelectedModel x-vsr-selected-model—— VSR 為該請(qǐng)求選定的模型。三個(gè)核心頭的字段語(yǔ)義x-vsr-selected-category屬性說(shuō)明描述VSR 在領(lǐng)域分類domain classification階段為該請(qǐng)求選定的類別示例值math、business、biology、computer_science何時(shí)添加VSR 成功將請(qǐng)求分類到某個(gè)類別時(shí)該值來(lái)源于領(lǐng)域分類器MMLU 類別體系。從源碼看類別信息既可能來(lái)自請(qǐng)求體分類階段也可能在決策匹配階段通過extractDecisionCategory從命中的規(guī)則中提取——見 src/semantic-router/pkg/extproc/req_filter_classification_runtime.go它掃描形如domain:xxx的匹配規(guī)則取出domain:前綴之后的類別名寫入ctx.VSRSelectedCategory。x-vsr-selected-reasoning屬性說(shuō)明描述該請(qǐng)求是否被判定為需要啟用推理模式取值on—— 啟用推理模式off—— 關(guān)閉推理模式何時(shí)添加VSR 做出推理模式?jīng)Q策時(shí)自動(dòng)模式與顯式模型選擇均適用在 src/semantic-router/pkg/extproc/recorder.go 的trackVSRDecision中可以看到寫入邏輯當(dāng)useReasoning為真時(shí)置on否則置off。推理模式的最終決策由模型選擇算法如 entropy 推理判定產(chǎn)出并通過決策記錄、指標(biāo)與鏈路追蹤routing.backend.resolved事件一并暴露。x-vsr-selected-model屬性說(shuō)明描述VSR 為處理該請(qǐng)求而選定的模型示例值deepseek-v31、phi4、gpt-4何時(shí)添加VSR 完成模型選擇時(shí)自動(dòng)路由或顯式模型指定均可觸發(fā)頭字段的添加條件三個(gè)前提同時(shí)滿足根據(jù)文檔與源碼實(shí)現(xiàn)只有同時(shí)滿足以下三個(gè)條件時(shí)決策跟蹤響應(yīng)頭才會(huì)被附加請(qǐng)求成功上游返回 HTTP 200-299未命中緩存響應(yīng)不是從響應(yīng)緩存response cache直接返回的VSR 實(shí)際執(zhí)行了路由決策在請(qǐng)求處理過程中 VSR 做出了路由判斷分類、推理模式或模型選擇。這三個(gè)條件的判斷邏輯集中在響應(yīng)頭處理階段。在 src/semantic-router/pkg/extproc/processor_res_header.go 中handleResponseHeaders會(huì)先從 Envoy 的響應(yīng)頭中解析上游狀態(tài)碼:status隨后調(diào)用 src/semantic-router/pkg/extproc/processor_res_header_mutation.go 的buildResponseHeaderMutation來(lái)組裝要寫入的響應(yīng)頭。其關(guān)鍵分支如下ctx.VSRCacheHit為真時(shí)直接跳過全部 VSR 決策頭緩存命中意味著沒有重新執(zhí)行路由isSuccessful為假4xx/5xx時(shí)只保留基礎(chǔ)契約頭不輸出決策跟蹤頭成功且未命中緩存時(shí)先輸出最終路由事實(shí)decision/algorithm/model 等再根據(jù)調(diào)試開關(guān)決定是否輸出中間細(xì)節(jié)頭。示例響應(yīng)一個(gè)真實(shí)的路由決策跟蹤響應(yīng)頭示例如下文檔原始示例HTTP/1.1 200 OK Content-Type: application/json x-vsr-selected-category: math x-vsr-selected-reasoning: on x-vsr-selected-model: deepseek-v31 { id: chatcmpl-123, object: chat.completion, created: 1677652288, model: deepseek-v31, choices: [ { index: 0, message: { role: assistant, content: The derivative of x^2 3x 1 is 2x 3. }, finish_reason: stop } ] }注意響應(yīng)體中的model字段反映的是實(shí)際推理模型而x-vsr-selected-model頭則是路由器在決策階段選定的模型二者通常一致但通過頭字段你能確認(rèn)路由決策時(shí)的模型選擇而不是請(qǐng)求方自行指定的模型。響應(yīng)頭不會(huì)被添加的情形文檔明確了三種不會(huì)添加決策跟蹤頭的典型場(chǎng)景緩存命中Cache Hit響應(yīng)直接來(lái)自緩存沒有發(fā)生 VSR 處理。此時(shí)連決策頭也不會(huì)輸出在 v0.4 契約下緩存命中響應(yīng)也不攜帶x-vsr-schema-version/x-vsr-response-path基礎(chǔ)頭緩存載荷原樣透?jìng)?。錯(cuò)誤響應(yīng)Error Responses上游返回 4xx 或 5xx 狀態(tài)碼。缺少 VSR 信息Missing VSR InformationVSR 決策信息不可用——正常運(yùn)行時(shí)不應(yīng)發(fā)生例如請(qǐng)求被跳過處理或決策階段未執(zhí)行。這些分支在源碼測(cè)試中有逐一對(duì)應(yīng)的斷言。例如 src/semantic-router/pkg/extproc/extproc_test.go 的TestVSRHeadersNotAddedOnCacheHit構(gòu)造了VSRCacheHit: true的上下文斷言headerMutation.GetSetHeaders()為空src/semantic-router/pkg/extproc/extproc_test.go 的TestVSRHeadersNotAddedOnErrorResponse構(gòu)造 500 狀態(tài)碼斷言錯(cuò)誤響應(yīng)上只保留 2 個(gè)基礎(chǔ)契約頭x-vsr-schema-version與x-vsr-response-path而x-vsr-selected-category、x-vsr-selected-model等決策頭一律不出現(xiàn)。源碼級(jí)實(shí)現(xiàn)剖析響應(yīng)頭從決策到落盤1. 頭常量定義所有自定義 HTTP 頭遵循非標(biāo)準(zhǔn)頭的x-前綴約定統(tǒng)一維護(hù)在 src/semantic-router/pkg/headers/headers.go。每個(gè)常量都有明確的 Go 注釋說(shuō)明取值語(yǔ)義與示例并被 src/semantic-router/pkg/headers/headers_test.go 的TestHeaderConstants斷言鎖定——防止頭名字符串被意外改寫。2. 響應(yīng)頭組裝responseHeaderMutationBuildersrc/semantic-router/pkg/extproc/processor_res_header_mutation.go 中的responseHeaderMutationBuilder是響應(yīng)頭的組裝器核心方法addString有兩個(gè)值得注意的行為空值跳過value 為空字符串時(shí)不輸出該頭所以部分信息場(chǎng)景下空字段不會(huì)以空值頭出現(xiàn)去重同一 key 只寫入一次防止重復(fù)頭。在此基礎(chǔ)上addFinalDecisionHeaders 負(fù)責(zé)在每次成功響應(yīng)上輸出最終路由事實(shí)決策名、算法、所選模型、路由延遲毫秒數(shù)、回退嘗試次數(shù)等其中包括x-vsr-selected-model而 addDecisionDetailHeaders 負(fù)責(zé)輸出中間細(xì)節(jié)頭x-vsr-selected-category、x-vsr-selected-reasoning、x-vsr-selected-modality等。3. v0.4 契約下的默認(rèn)面與調(diào)試面需要特別說(shuō)明當(dāng)前倉(cāng)庫(kù)源碼v0.4 響應(yīng)頭契約已經(jīng)對(duì)三類頭做了分級(jí)這與 v0.2 文檔描述一律附加的語(yǔ)義存在演進(jìn)差異x-vsr-selected-model屬于默認(rèn)面default surface每次成功、未命中緩存的響應(yīng)都會(huì)攜帶x-vsr-selected-category與x-vsr-selected-reasoning屬于調(diào)試面debug surface默認(rèn)被降級(jí)demote只有請(qǐng)求顯式攜帶x-vsr-debug: true時(shí)才內(nèi)聯(lián)輸出否則這些中間細(xì)節(jié)可通過x-vsr-replay-id在 Router Replay 記錄中找回。該開關(guān)的判定實(shí)現(xiàn)在 src/semantic-router/pkg/extproc/debug_mode.go 的debugHeadersRequested對(duì)x-vsr-debug頭取值做大小寫不敏感、去空白的true匹配。對(duì)應(yīng)測(cè)試 src/semantic-router/pkg/extproc/extproc_test.go 的TestVSRHeadersAddedOnSuccessfulNonCachedResponse明確斷言未開 debug 時(shí)x-vsr-selected-category、x-vsr-selected-reasoning不出現(xiàn)在響應(yīng)頭中而 TestVSRDebugHeadersOnSuccessfulResponse 斷言帶上x-vsr-debug: true后它們恢復(fù)內(nèi)聯(lián)輸出。同時(shí)TestVSRHeadersPartialInformation 還驗(yàn)證了空字段被正確省略。如果你在 v0.2 版本上做調(diào)試直接使用文檔所述的三個(gè)頭即可如果你面對(duì)的是更新版本v0.4記得在調(diào)試請(qǐng)求中追加x-vsr-debug: true才能看到分類與推理模式的中間細(xì)節(jié)。4. 決策信息的來(lái)源trackVSRDecision無(wú)論是自動(dòng)路由還是顯式模型選擇決策信息最終都會(huì)匯聚到 src/semantic-router/pkg/extproc/recorder.go 的trackVSRDecisionfunc (r *OpenAIRouter) trackVSRDecision(ctx *RequestContext, categoryName string, decisionName string, matchedModel string, useReasoning bool) { ctx.VSRSelectedCategory categoryName ctx.VSRSelectedDecisionName decisionName ctx.VSRSelectedModel matchedModel if useReasoning { ctx.VSRReasoningMode on } else { ctx.VSRReasoningMode off } }這段代碼印證了文檔中的核心語(yǔ)義分類來(lái)自領(lǐng)域分類結(jié)果推理模式被映射為on/off兩個(gè)枚舉值模型選擇記錄最終選定的模型。實(shí)戰(zhàn)場(chǎng)景一請(qǐng)求調(diào)試Debugging調(diào)試時(shí)你關(guān)心的是這個(gè)請(qǐng)求為什么被這樣處理。此時(shí)你可以攜帶x-vsr-debug: true發(fā)起請(qǐng)求在支持 debug 面的新版本上用curl -i或?yàn)g覽器開發(fā)者工具查看響應(yīng)頭對(duì)照三個(gè)核心字段判斷分類、推理模式與模型是否符合預(yù)期。例如curl -i -H Content-Type: application/json \ -H x-vsr-debug: true \ -d {model:auto,messages:[{role:user,content:求 x^2 3x 1 的導(dǎo)數(shù)}]} \ http://router-address/v1/chat/completions響應(yīng)頭中如果出現(xiàn)x-vsr-selected-category: math與x-vsr-selected-reasoning: on說(shuō)明領(lǐng)域分類把該數(shù)學(xué)問題歸入math類別并啟用了推理模型——這正是路由器的預(yù)期行為。實(shí)戰(zhàn)場(chǎng)景二可觀測(cè)與監(jiān)控Monitoring運(yùn)維團(tuán)隊(duì)可以利用這些頭做面向請(qǐng)求的路由可觀測(cè)性類別分布跟蹤聚合x-vsr-selected-category的值分布了解請(qǐng)求的領(lǐng)域構(gòu)成推理模式使用模式統(tǒng)計(jì)x-vsr-selected-reasoning: on/off的比例評(píng)估推理模型的啟用成本模型選擇模式分析跟蹤x-vsr-selected-model的取值判斷各模型被選中的頻率輔助容量規(guī)劃與配額設(shè)計(jì)。倉(cāng)庫(kù)中的基準(zhǔn)測(cè)試工具直接消費(fèi)這些頭來(lái)做路由與成本核算。例如 bench/reasoning/router_accounting.py 定義了SELECTED_MODEL_HEADER x-vsr-selected-model、COST_HEADER x-vsr-cost等常量其注釋明確指出每請(qǐng)求的路由與成本字段來(lái)自路由器響應(yīng)頭并通過response_accounting函數(shù)把selected_model、routing_latency_ms、cost等信息寫入基準(zhǔn)報(bào)告——這就是監(jiān)控與分析場(chǎng)景在真實(shí)項(xiàng)目中的落地方式。實(shí)戰(zhàn)場(chǎng)景三分析與產(chǎn)品洞察Analytics產(chǎn)品團(tuán)隊(duì)可以利用路由元數(shù)據(jù)回答以下問題請(qǐng)求分類準(zhǔn)確性對(duì)照真實(shí)業(yè)務(wù)標(biāo)簽評(píng)估領(lǐng)域分類器的準(zhǔn)確率推理模式有效性結(jié)合下游任務(wù)質(zhì)量指標(biāo)分析推理模式開/關(guān)的收益差異按類別評(píng)估模型表現(xiàn)以x-vsr-selected-category為維度切分模型性能與成本數(shù)據(jù)。端到端測(cè)試也把響應(yīng)頭當(dāng)作斷言事實(shí)來(lái)使用。例如 e2e/testcases/domain_classify.go 通過resp.Header.Get(x-vsr-selected-category)讀取實(shí)際分類結(jié)果與期望類別比對(duì)來(lái)計(jì)算分類準(zhǔn)確率result.ActualCategory resp.Header.Get(x-vsr-selected-category) result.ActualReasoning resp.Header.Get(x-vsr-selected-reasoning) result.Correct (result.ActualCategory expectedCategory)同樣e2e/testcases/metadata_routing.go 斷言x-vsr-selected-decision與x-vsr-selected-recipe的具體取值來(lái)驗(yàn)證元數(shù)據(jù)路由策略。這說(shuō)明響應(yīng)頭本身就是該項(xiàng)目可驗(yàn)證的對(duì)外契約——頭缺失或取值不對(duì)測(cè)試就會(huì)失敗。兼容性解讀與使用建議按版本區(qū)分頭面在 v0.2 語(yǔ)義下三個(gè)決策頭在成功非緩存響應(yīng)上都會(huì)出現(xiàn)在更新的 v0.4 契約下x-vsr-selected-category與x-vsr-selected-reasoning被降級(jí)到調(diào)試面需要x-vsr-debug: true才能內(nèi)聯(lián)看到。消費(fèi)方應(yīng)優(yōu)先依賴默認(rèn)面的最終路由事實(shí)如x-vsr-selected-model把中間細(xì)節(jié)當(dāng)作診斷信息??罩导词÷栽创a中addString對(duì)空值直接跳過因此缺失該頭可能意味著該決策未執(zhí)行或信息不可用而不是解析錯(cuò)誤。不要只依賴單頭完整的路由故事決策名、置信度、算法、路由延遲、回退嘗試次數(shù)分散在x-vsr-selected-decision、x-vsr-selected-confidence、x-vsr-selected-algorithm、x-vsr-routing-latency-ms、x-vsr-fallback-attempts等多個(gè)默認(rèn)面頭中建議組合消費(fèi)需要細(xì)粒度中間軌跡時(shí)通過x-vsr-replay-id關(guān)聯(lián) Router Replay 記錄。成本核算注意事項(xiàng)x-vsr-selected-model反映的是路由決策選定的模型若要按該模型計(jì)算費(fèi)用應(yīng)結(jié)合響應(yīng)體中的 usage 信息與路由器提供的成本頭如x-vsr-cost、x-vsr-cost-currency一起使用——如 bench/reasoning/router_accounting.py 所示其成本基數(shù)是配置價(jià)格configured pricing而非供應(yīng)商賬單??偨Y(jié)x-vsr-selected-category、x-vsr-selected-reasoning、x-vsr-selected-model是 semantic-router 路由決策的黑盒探針把分類、推理與模型選擇三個(gè)關(guān)鍵決策以標(biāo)準(zhǔn) HTTP 頭的形式暴露在成功響應(yīng)上。它們既服務(wù)于開發(fā)者的請(qǐng)求級(jí)調(diào)試也支撐運(yùn)維的類別/模式/模型分布監(jiān)控還能作為產(chǎn)品分析與成本核算的原始數(shù)據(jù)。理解其觸發(fā)條件成功、未命中緩存、執(zhí)行了決策、源碼寫入鏈路trackVSRDecision→buildResponseHeaderMutation→ Envoy HeaderMutation以及版本間的頭面差異默認(rèn)面 vs 調(diào)試面你就能在真實(shí)部署中準(zhǔn)確解讀每一次路由決策。贊分享后端API網(wǎng)關(guān)模型推理服務(wù)AI Agent【免費(fèi)下載鏈接】semantic-routerAn open, programmable decision layer for models and compute.項(xiàng)目地址https://gitcode.com/gh_mirrors/sem/semantic-router點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Semantic Router VSR 決策追蹤 Header 完全指南從三個(gè)核心響應(yīng)頭到 v0.4 雙層合約Semantic Router VSR 決策追蹤 Header 完全指南從三個(gè)核心響應(yīng)頭到 v0.4 雙層合約 導(dǎo)讀 本文圍繞 Semantic Router后端API網(wǎng)關(guān)模型推理服務(wù)AI Agentsemantic-router VSR 決策追蹤 Header 完整指南類別、推理模式與模型選擇的可觀測(cè)性semantic router VSR 決策追蹤 Header 完整指南類別、推理模式與模型選擇的可觀測(cè)性 導(dǎo)讀 VSRVector Semantic Ro后端API網(wǎng)關(guān)模型推理服務(wù)AI AgentBetterDiscordPanel高級(jí)技巧自定義翻譯、主題切換與消息格式化指南BetterDiscordPanel高級(jí)技巧自定義翻譯、主題切換與消息格式化指南 BetterDiscordPanel是一款強(qiáng)大的自托管Discord機(jī)器人消創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考