后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载导读decision是 vLLM semantic-router 路由决策decision中一种基于决策模型的候选模型选择算法selection algorithm当某条路由匹配后路由器不再按固定顺序或静态分数选模型而是把请求原文与每个候选模型的文字描述一起交给一个决策模型由它一次性给出每个候选的概率概率最高者应答。本篇将结合仓库源码与官方配置片段完整讲解该算法的适用场景、两套配置写法、参数约束、降级兜底与可观测性机制帮助你把它正确接入自己的路由配置。一、算法概述一个模型一次提问选出应答者decision选择算法的核心行为是向一个决策模型提问路由决策中的哪些modelRefs应该回答这条请求。你为每个候选模型写一句话描述模型通读整条请求后给每个候选一个概率概率最高的候选被选中。官方文档 对其定义为由模型选择而模型会阅读整条请求而非只看少量元数据默认复用 Router 自己的决策模型因此选择过程不需要额外加载第二份模型副本每个候选都会得到一个概率并显示在 selection traces选择轨迹中当模型无法在时限内作答时回退到第一个modelRef保证路由始终可用。它解决什么问题如果没有选择算法路由只能按固定的modelRefs顺序取第一个模型这完全无视请求内容如果让一个普通聊天模型来挑选则需要一次文本生成的往返generation round trip外加输出解析。而决策模型回答的是同一个问题却一次推理即完成直接返回概率分布不需要文本生成天然适配路由的高频低延迟路径。何时使用推荐使用决策decision有 2 个及以上候选且每个候选的优势可以用一句话描述并且选谁取决于请求本身问什么。改用static当顺序永远不变、无需感知请求内容时用static默认取modelRefs第一项确定性、零依赖参见 static 算法文档。改用multi_factor当选择目标主要是成本、延迟或负载时用multi_factor基于 quality/latency/cost/load 加权或字典序目标做权衡参见 multi_factor 算法文档。二、工作原理从请求到概率的完整链路从源码看该算法在运行期被编译为一次针对内置model_selection任务的 Choice 提问。关键实现位于选择器实现src/semantic-router/pkg/selection/decision_model.go配置结构与超时src/semantic-router/pkg/config/decision_signal.go模型运行时绑定src/semantic-router/pkg/extproc/req_filter_decision_model_selector.go预编译模型卡片src/semantic-router/pkg/extproc/decision_selection_prepare.go整体流程可以概括为四步决策匹配请求先经过routing.signals.decision中定义的问题如request_kind选择问题当路由规则的AND/OR条件命中本例request_kind code后路由进入选择阶段。构建候选DecisionModelSelector.choices()遍历modelRefs为每个候选生成{Key: 模型名, Description: 描述}。描述优先级为algorithm.decision.candidates中显式给出的描述 → 模型自身配置的 description → 模型名本身。一次提问invoke闭包见req_filter_decision_model_selector.go构造Question{ID: selector, Type: choice}通过内置BuiltinTask(model_selection)编译任务计划携带请求状态state即请求文本和候选列表向指定 deployment 发出单次调用。产出分数模型返回Choice、Probabilities与Confidence。每个候选的概率直接成为该候选的选择分数CandidateScores概率最高者即SelectedModel并附带一条形如decision model deployment chose model的推理说明Reasoning。单测 src/semantic-router/pkg/selection/decision_model_test.go 精确印证了这一契约模型返回{large: 0.3, small: 0.7}时选择器选中small得分 0.7同时AllScores保留全部概率候选描述缺失时回落到模型配置描述如测试中small的 Fast and cheap。请求复用与模型卡片预编译默认场景下选择器不指定 deployment会复用路由决策模型所在的 deployment——也就是已经回答了请求内置信号的那份模型因此不需要加载第二份模型副本no second copy。在构建期prepareDecisionSelectionCards会遍历所有可达路由配方为每个type: decision的选择器预取模型卡片并校验card.Serves(decisions)即该部署必须支持 decisions 能力面同时在卡片上预编译任务计划请求路径只读取这份快照不会在请求时做模型发现。三、配置详解一复用 Router 默认决策模型不写deployment时选择工作交给global.model_catalog.system.decision_model指向的决策模型。默认决策模型为Vela 2.0 0.3B除非你按 选择模型大小 换成更大尺寸。完整配置如下来自 官方决策文档global: model_catalog: deployments: primary: provider: model_runtime artifact: vllm-sr/Vela-2.0-4B device: rocm system: decision_model: deployment: primary routing: signals: decision: - name: request_kind question: type: choice instructions: What kind of request is this? choices: - key: code description: Writing, reviewing or debugging code - key: chat description: Anything else decisions: - name: code-route priority: 100 rules: operator: AND conditions: - type: decision name: request_kind label: code modelRefs: - model: qwen3-8b use_reasoning: false - model: qwen3-32b use_reasoning: true algorithm: type: decision decision: instructions: Which model should answer this request? candidates: qwen3-8b: Fast general model for routine code qwen3-32b: Strong reasoning model for hard code timeout_ms: 1000该示例揭示了几个要点决策模型通过global.model_catalog.system.decision_model.deployment: primary绑定到primary部署。源码 src/semantic-router/pkg/config/decision_model.go 中DecisionModelDeployment()会校验该 deployment必须存在且使用provider: model_runtime否则直接报错must use provider model_runtimedecision_model.deployment必须精确命名一个已声明的部署。选择器的默认绑定可能解析为 Vela 或 Decision 1.0/2.0 家族被选中的资源必须支持 choice 任务prepareDecisionSelectionCards中的Serves(decisions)校验就是为此设计。选择发生在决策匹配之后且是对同一 deployment 的一次独立调用in its own call——即信号评估与模型选择是两个任务只是共享同一份模型副本。四、配置详解二显式指定其他决策模型如 Decision 2.0如果想让另一个模型来挑选——比如一个专门的 Decision 2.0 模型——在信号和选择器上各命名一个model_runtime部署即可global: model_catalog: deployments: decision-kai: provider: model_runtime artifact: vllm-sr/Decision-2.0-Kai-0.6B routing: signals: decision: - name: request_kind deployment: decision-kai question: type: choice instructions: What kind of request is this? choices: - key: code description: Writing, reviewing or debugging code - key: chat description: Anything else decisions: - name: code-route priority: 100 rules: operator: AND conditions: - type: decision name: request_kind label: code modelRefs: - model: qwen3-8b use_reasoning: false - model: qwen3-32b use_reasoning: true algorithm: type: decision decision: deployment: decision-kai instructions: Which model should answer this request? candidates: qwen3-8b: Fast general model for routine code qwen3-32b: Strong reasoning model for hard code timeout_ms: 1000这里decision-kai同时出现在两处routing.signals.decision[].deployment让信号问题由它作答和algorithm.decision.deployment让选择问题也由它作答。源码中DecisionSelectorDeployment()decision_model.go的规则是选择器显式命名 deployment 时覆盖默认绑定未命名时回落到决策模型共享部署。官方片段 config/fragments/algorithm/selection/decision.yaml 给出了同样的配置模板并带上了固定 revisioncd49ea3813fd8ba0928a9a23ef6c9a0f2f0cd764确保同一名字始终加载同一份文件。五、参数约束与校验规则DecisionSelectionConfig的结构定义于 src/semantic-router/pkg/config/decision_signal.go字段说明约束 / 默认值deployment选择器使用的部署省略则复用路由决策模型所在部署命名时必须为provider: model_runtime不能带多余空白instructions给决策模型的问题描述必填不能为空candidates模型名 - 一句话描述的映射只能描述该 decision 的modelRefs中的模型未描述者使用其配置的描述timeout_ms单次选择调用的截止时间取值[1, 60000]缺省时使用DefaultDecisionTimeoutMs 10001 秒校验逻辑在 src/semantic-router/pkg/config/validator_decision_signal.go 的validateDecisionSelectorConfig中实现常量定义于 decision_signal.go候选数量decision 需要2 到 255 个不同的modelRefsMinDecisionChoices 2、MaxDecisionChoices 255且模型名不能重复candidates 键必须属于 modelRefscandidates中出现任何一个未在modelRefs中声明的模型名都会导致配置校验失败instructions必填timeout_ms超过MaxDecisionTimeoutMs60000 ms会被拒绝命名 deployment 不得带首尾空白且必须指向model_runtime部署。六、降级兜底与可观测性降级到第一个 modelRef当模型未就绪not ready、应答超时answers late、过载overloaded或返回非法答案invalid answer时Router 会记录一次选择降级selection fallback并使用modelRefs中第一个候选。源码 src/semantic-router/pkg/extproc/req_filter_classification_selector.go 定义了细粒度的降级原因码例如selector_timeout/selector_cancelled调用超时或被取消selector_invocation_failed模型运行时调用失败selector_invalid_output/selector_undeclared_candidate模型返回了非法答案或未声明的候选selector_unavailable选择器不可用。recordSelectionFallback会把降级结果构造成一个SelectionResult选中第一个 modelRef得分记 0同时累计 Prometheus 指标ModelSelectionFallbackTotal按 method/decision/reason 分桶见 src/semantic-router/pkg/selection/metrics_selection_events.go以及ModelSelectionTotal、ModelSelectionDuration、ModelSelectionScore等常规选择指标src/semantic-router/pkg/selection/metrics.go。响应头与预览x-vsr-selected-model选中的模型会通过该响应头报告给调用方常量定义于 src/semantic-router/pkg/headers/headers.go。Routing Preview管理 API 的POST /api/v1/routing/preview路径定义见 src/semantic-router/pkg/apiserver/api_paths.go会向决策模型提出同样的选择问题并把其选择报告为 selected model不会调用后端生成答案。这让你可以在不产生实际推理成本的情况下验证路由与选择逻辑。选择器本身的单测decision_model_test.go还覆盖了两类关键失败invoke 返回错误时映射为ErrDecisionModelInvocation模型返回未声明候选时映射为ErrDecisionModelAnswer——两者都会在外层触发上述降级路径。七、如何挑选决策模型决策模型的选型直接决定选择质量与延迟。建议从最小且足够准确的模型开始模型规模适合运行特点vllm-sr/Decision-2.0-Kai-0.6B0.6BCPU16 核约 0.2s 回答两个问题或任意 GPU快速、简单的路由问题默认起点vllm-sr/Decision-2.0-Eos-0.8B0.8BCPU 或任意 GPU稍难的问题成本相近vllm-sr/Decision-2.0-Sol-2B2BGPU低流量下可 CPU需要更多判断力的问题vllm-sr/Decision-2.0-Nox-4B4BGPU更细粒度的问题、更多选项vllm-sr/Decision-2.0-Lux-9B9BGPU24GB 及以上中等成本下的最高准确率vllm-sr/Decision-2.0-Vega-27B27B64GB 及以上单 GPU总体最准确完整的选型建议、各尺寸在 Router 信号套件上的准确率与延迟记录参见 决策模型指南 与 选择模型。编写candidates描述时遵循像请教同事一样写 instructions每个选项用几个词描述清楚的原则——短而具体的选项通常能得到最可靠的答案。八、小结decision选择算法把让谁回答从固定顺序或文本生成中解放出来一次决策模型调用即可拿到完整概率分布默认复用 Router 已有的决策模型副本失败时自动降级到首个modelRef并辅以x-vsr-selected-model响应头、selection traces 与 Prometheus 指标保证可观测性。配置上只需记住三条边界——候选数在 2 到 255 之间、candidates只能描述modelRefs内的模型、命名 deployment 必须为model_runtime。需要按成本/延迟/负载权衡时改用multi_factor需要确定性基线时改用static而让模型读懂请求再决定的场景正是decision的主场。赞分享后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载相关推荐Serge模型选择指南如何根据需求挑选最适合的AI模型Serge模型选择指南如何根据需求挑选最适合的AI模型 面对众多AI模型如何选择最适合自己需求的Serge模型这份完整指南将帮助你快速了解不同模型的特点和AI 应用大模型本地部署后端前端解决ldn_mitm联机难题5个常见问题与高效解决方案解决ldn_mitm联机难题5个常见问题与高效解决方案 ldn_mitm是一款让本地无线支持的游戏实现联机功能的工具通过它可以轻松突破本地网络限制实现游戏游戏开发嵌入式网络OpenPLC_v3与Siemens S7协议通信实战从配置到调试全流程OpenPLC_v3与Siemens S7协议通信实战从配置到调试全流程 OpenPLC_v3是一款功能强大的开源PLC运行时系统支持与多种工业协议通信其工业制造嵌入式物联网上一篇Aptos Move 链上依赖实战使用 aptos 依赖语法引用链上已发布包pack1 依赖 pack2 最小示例下一篇Hacker101 演讲深度解读InfoSec 行业的倦怠危机——安全从业者与赏金猎人的心理健康与工作生活平衡创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考