semantic-router 投影分数(Projection Scores):用 weighted_sum 将多信号证据合成单一连续路由数值
发布时间:2026/10/14 18:26:13 锦皓数字建站
:用 weighted_sum 将多信号证据合成单一连续路由数值`)
后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载导读本文围绕 semantic-router 的routing.projections.scores投影层展开讲解如何把若干条弱信号关键词、嵌入、上下文、复杂度等通过加权求和weighted_sum聚合成一个连续数值作为路由难度、核验压力等决策的数值底座。你将掌握分数投影的完整规范 YAML 与 DSL 写法、binary / confidence / raw三种取值来源的运行时语义、负权重降档技巧以及分数如何配合mappings转成决策可读的命名档位——并以仓库中维护中的 balance 配方 为实战范本。分数Scores在投影层中的定位semantic-router 的投影Projections是介于原始信号检测与最终决策匹配之间的协调层。理解分数前先看三层流水线见 投影总览routing.signals从请求中提取可复用事实回答「匹配了什么」routing.projections协调或聚合这些事实回答「如何把若干信号结果协调成可复用的路由事实」routing.decisions用布尔策略匹配并选择路由回答「哪条路由应胜出」。投影层内部又分三种构造partitions协调已有domain/embedding匹配保留一个胜者scores将匹配信号聚合成一个连续数值本文主角mappings将该数值变成命名的投影输出如balance_reasoning、verification_required。两条重要边界贯穿始终决策不直接引用分区名决策不直接引用分数名。只有mapping.outputs[*].name会成为决策可见的projection(...)目标。也就是说分数是内部投影状态它本身不直接参与决策下一步由映射Mappings消费。为什么需要分数决策是布尔难度是连续决策适合可读的布尔逻辑却难以表达「从上下文长度取一点、从推理标记取一点、对极简单请求减权再判断属于哪一档」这类连续判定。若把这类加权逻辑塞进决策规则会在路由间重复、难以审计。分数正好填补这个缺口它在信号与决策策略之间提供显式数值层。例如在balance配方中difficulty_score混合简洁性、上下文长度、结构、推理标记、嵌入与复杂度等证据verification_pressure混合事实核查需求、引用请求、高风险领域、纠正反馈与上下文长度。这样权重故事集中在一处而不是散落在多条决策里。投影还带来额外收益一条加权策略可被多条决策复用调节路由敏感度只需改一处。运行时行为加权求和与三种取值来源当前实现仅支持method: weighted_sum每个输入贡献weight * input_valueinput_value取决于value_source取自 config/projection_config.go 中的常量ProjectionValueSourceBinary / Confidence / Rawvalue_source匹配时取值未匹配时取值省略或binarymatch默认1.0miss默认0.0confidence匹配置信度0时取该值否则回退1.00rawSignalValues中的原始数值如计数或度量值0关键实现细节可从源码验证见 classifier_projection_inputs.gobinary模式下若未显式指定match则取1.0未匹配返回input.Missconfidence模式只有信号确实匹配且置信度 0时才贡献置信度否则按0处理置信度缺失但已匹配时回退为1.0raw模式从SignalValues中按type:name键取原始度量值权重为0的输入被直接跳过projectionScoreValue中if input.Weight 0 { continue }不会进入求和。此外还有两个重要的边界行为失败的输入不按 0 处理若某个输入信号在提取阶段出错如检测器不可用该分数会被标记为projection_input_failed其名下所有映射输出一并清除而不是悄悄变成低风险档位——否则会在on_unknown策略运行前把不可用的风险检测器伪装成低风险见 classifier_projections.go 中的注释与recordProjectionFailure。支持分数级联projection 输入type: projection的输入允许分数引用其他分数或映射输出的置信度运行时通过拓扑排序保证依赖顺序见 classifier_projection_order.go配置校验也会检测依赖环见 validator_projection.go。校验规则校验器validator_projection.go会检查分数name非空且不重复method只能是weighted_suminputs不能为空每个输入type必须属于受支持类型且name必须引用routing.signals中已声明的信号complexity支持general_reasoning:hard这类家族:档位命名校验时取冒号前的家族名value_source只能是binary、confidence、raw或省略。当前支持的输入信号族文档明确列出的输入类型包括keyword、embedding、domain、fact_check、user_feedback、preference、language、context、structure、complexity、modality、authz、jailbreak、pii。而从当前源码的supportedProjectionInputTypesconfig/projection_config.go看受支持类型实际更宽还包括reask、safety、kb、conversation、event、input_modality、decision、kb_metric与projection等派生输入类型并可通过SupportedProjectionInputTypes()查询精确词汇表。规范 YAML 示例以下配置声明一个名为difficulty_score的分数简单请求标记负向减权、长上下文与推理标记正向加权、置信型嵌入与复杂度档位参与混合取自原文档routing: projections: scores: - name: difficulty_score method: weighted_sum inputs: - type: keyword name: simple_request_markers weight: -0.28 - type: context name: long_context weight: 0.18 - type: keyword name: reasoning_request_markers weight: 0.22 value_source: confidence - type: embedding name: agentic_workflows weight: 0.18 value_source: confidence - type: complexity name: general_reasoning:hard weight: 0.22DSL 写法同样的分数可用 DSL 表达PROJECTION score声明PROJECTION score difficulty_score { method: weighted_sum inputs: [ { type: keyword, name: simple_request_markers, weight: -0.28 }, { type: context, name: long_context, weight: 0.18 }, { type: keyword, name: reasoning_request_markers, weight: 0.22, value_source: confidence }, { type: embedding, name: agentic_workflows, weight: 0.18, value_source: confidence }, { type: complexity, name: general_reasoning:hard, weight: 0.22 } ] }DSL 解析器parser.go 的rawToProjectionScore会把type、name、weight、value_source、match、miss以及可选的kb/metric字段逐一映射到投影输入声明method默认即为weighted_sum。DSL 与规范 YAML 通过同一套命名约定PROJECTION score对应routing.projections.scores双向编译。配置字段速查字段含义name分数标识保持稳定mappings[*].source依赖它method当前为weighted_suminputs[].type读取的信号族见上方支持列表inputs[].name已声明的信号名complexity可用家族:档位inputs[].weight贡献系数负权重降低分数inputs[].value_sourcebinary、confidence或raw行为inputs[].match/inputs[].miss二值模式下的显式取值默认1.0/0.0inputs[].kb/inputs[].metric进阶kb_metric输入的知识库与度量名分数位于routing.projections.scores。每个分数需要name、method当前为weighted_sum以及引用已声明信号的inputs列表。实战范本balance 配方的难度与核验分数仓库中维护中的 config/recipes/balance/config.yaml对应 DSL 见 recipe.dsl是分数投影的真实用例展示了如何在生产配方中混合**启发式heuristic与学习型confidence**证据。difficulty_score配置第 1462-1600 行共 40 个输入典型构成负权重启发式simple_request_markerskeyword-0.26、fast_qa_en/fast_qa_zhembedding confidence各-0.18、short_context-0.1、low_question_densitystructure-0.05——这些信号命中时主动拉低分数让明显简单的请求落入低档上下文与结构long_context0.18、medium_context0.03、ordered_workflow0.12、numbered_steps0.08等学习型关键词置信度reasoning_request_markers0.2、agentic_request_markers0.16、multi_step_markers0.14等嵌入置信度agentic_workflows0.2、complex_stem0.18、reasoning_general_en/zh各0.18等复杂度档位general_reasoning:hard0.2、math_task:hard0.22、agentic_delivery:hard0.22、evidence_synthesis:hard0.18等均为二值模式。verification_pressure第 1601-1644 行则混合needs_fact_checkfact_check0.28、verification_markers/reference_heavy_markerskeyword confidence0.22/0.18、高风险领域law0.14、health0.12、business0.05、wrong_answeruser_feedback0.1与long_context0.04。这两个分数随后被映射消费difficulty_band把difficulty_score分成balance_simple 0.18、balance_medium0.18–0.48、balance_complex0.48–0.82、balance_reasoning≥ 0.82四档并带sigmoid_distance校准slope10verification_band把verification_pressure分成verification_standard 0.35与verification_required≥ 0.35。决策端如reasoning_deep、verification_required等通过type: projection引用这些命名输出从而「权重故事集中在分数里阈值策略集中在映射里决策只读语义标签」。分数到映射的运行链路运行时classifier_projections.go的执行顺序为分数按依赖拓扑排序 → 每个分数计算ProjectionScores[name]→ 所有以该分数为source的映射消费分数值并产出命名输出 → 写入MatchedProjectionRules与SignalConfidences。测试 classifier_projections_test.go 验证了典型链路reasoning_request_markers置信度0.9、long_context命中时difficulty_score ≈ 0.74映射选出balance_reasoning并生成(0, 1]范围内的投影置信度——这同时也是阅读源码时理解分数与映射如何协作的入口。何时使用分数在以下情况使用分数多个弱指标应合成为单一难度或升级信号同一加权故事要在多条路由间复用希望在一处集中调节路由敏感度学习型与启发式证据应贡献同一路由结果希望数值聚合留在决策层之外。何时不用分数在以下情况不要使用分数单一原始信号已能干净决定路由规则用普通布尔逻辑即可保持可读需要立即可见的决策输出名——分数仍需映射先定义映射再引用其输出分数仅作诊断、不参与路由策略时也无需为它额外建映射。设计说明与实践建议保持分数名稳定routing.projections.mappings[*].source与投影输入type: projection都依赖分数名改名需要同步所有引用方。记录每个权重的理由尤其在混合置信型学习信号与启发式信号时权重值的可审计性直接决定路由行为能否被解释。数值聚合优先用分数让routing.decisions专注可读布尔组合避免到处复制内联数值比较。善用负权重当匹配信号应主动降低档位时如 balance 对明显简单请求使用负权重让分数向低档回落。阈值档位交给映射分数本身是连续值离散化的simple / medium / complex语义应由threshold_bands映射承担并保持档位单调、有序、易审计。下一步阅读 Mappings 教程将分数转为决策可用的命名档位阅读 Projections 总览了解完整投影工作流及与信号、决策的关系需要为分数声明底层信号时参考 balance 配方信号定义 与对应的 recipe.dsl。赞分享后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载相关推荐semantic-router 分数投影scores完全指南用加权和把信号证据组合成连续路由信号semantic router 分数投影scores完全指南用加权和把信号证据组合成连续路由信号 routing.projections.scores 是后端API网关模型推理服务AI Agentsemantic-router 投影层实战用 scores 加权评分把多维信号聚合成单一难度与风险分数semantic router 投影层实战用 scores 加权评分把多维信号聚合成单一难度与风险分数 routing.projections.scores后端API网关模型推理服务AI Agentsemantic-router 投影Projection完全指南在信号提取与决策匹配之间构建可复用的数值路由层semantic router 投影Projection完全指南在信号提取与决策匹配之间构建可复用的数值路由层 导读 投影Projection是 se后端API网关模型推理服务AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。