【免费下载链接】semantic-router
An open, programmable decision layer for models and compute.
导读
AutoMix 是 semantic-router 中一种面向「动态成本-质量权衡」的模型选择算法,其设计源自论文 Automatically Mixing Language Models(arXiv:2310.12963,NeurIPS 2024)。它基于 POMDP(部分可观测马尔可夫决策过程)实现「小模型优先、按需升级」的级联路由,并通过自校验(entailment 蕴含校验或 logprob 置信度)决定是否升级到更大的模型。阅读本文后,你将掌握 automix 的算法原理、预选择与级联两种执行模式、全部配置参数的语义与默认值,以及它在路由决策中的真实调用链与落地限制。
本文对应的权威实现与配置入口包括:
- 算法配置片段:config/fragments/algorithm/selection/automix.yaml
- 选择器核心实现:src/semantic-router/pkg/selection/automix.go
- POMDP 求解器实现:src/semantic-router/pkg/selection/pomdp_solver.go
- 自校验服务端:src/training/model_selection/rl_model_selection/automix_verifier.py
- 教程文档:website/versioned_docs/version-v0.3/tutorials/algorithm/selection/automix.md
1. 算法概述:三步级联路由
AutoMix 实现的是三步级联路由,核心思想是「先便宜、后校验、再升级」:
- Generate(生成):从
modelRefs中最小的(同时也是最便宜的)模型开始生成回答; - Self-Verify(自校验):由同一模型通过**蕴含校验(entailment check)**或 logprob 分析验证自己的答案;
- Route(路由):若验证置信度低于阈值,则升级到下一个更大的模型,直到达到升级次数上限。
在源码中,这一思想被明确注释在 AutoMixConfig 结构体上(src/semantic-router/pkg/selection/automix.go#L36-L49),并同时支持两种模式:
- 预选择模式(Pre-selection):在请求进入时直接估算最优模型,一次性完成选择;
- 级联模式(Cascaded):先选最小模型,再由
SelectWithVerification()驱动的验证-升级循环,需要 looper 集成。
2. POMDP 决策框架:信念状态与粒子滤波
AutoMix 用 POMDP 框架对「路由对模型能力的未知程度」进行建模。路由对每个候选模型的真实性能并不完全可知,因此维护一个信念状态(belief state) $b_t$,并通过粒子滤波在每次交互后更新:
$$b_{t+1} = \text{Update}(b_t, o_t, a_t)$$
其中 $o_t$ 是观测(即验证结果),$a_t$ 是动作(即所选的模型)。最优策略最大化期望收益:
$$\pi^* = \arg\max_\pi \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t (P_t - \lambda C_t)\right]$$
其中 $P_t$ 为性能,$C_t$ 为成本,$\lambda$(对应配置项 cost_lambda)控制成本与性能的权衡,$\gamma$(对应配置项 discount_factor)为折扣因子。
在源码层面,AdaOpsSolver(src/semantic-router/pkg/selection/pomdp_solver.go#L28-L59)实现了论文中的 AdaOps POMDP 求解器,其要素映射如下:
| POMDP 要素 | 含义 | 源码实现 |
|---|---|---|
| 状态 $S$ | ⟨当前 LM, 各 LM 性能⟩ | 粒子集合 particles,每个粒子是 model -> estimated_performance 的映射 |
| 动作 | 保留答案 或 路由到更大 LM | SelectAction() 中的 keep / escalate |
| 观测 | 验证器给出的正确性概率 $v$ | 高斯似然 exp(-diff²/(2σ²)),σ=0.15 |
| 奖励 | $R = \text{Performance} - \lambda \times \text{Cost}$ | updateValueFunction() 中 belief - costLambda*normalizedCost |
粒子滤波的核心流程在 UpdateBelief()(src/semantic-router/pkg/selection/pomdp_solver.go#L137-L203)中:先按观测似然计算每个粒子的重要性权重,归一化后做重要性重采样(roulette wheel selection),再对新粒子施加少量噪声保持多样性,最后向观测值方向以学习率 α=0.2 修正估计,并更新价值函数。
3. 核心优势
- 低成本优先:优先路由到更小/更便宜的模型,仅在必要时才升级;
- 自校验机制:通过蕴含校验或 logprob 置信度评估回答质量,无需外部标注;
- POMDP 决策框架:以理论化的方式求解最优成本-质量路由,而非简单阈值规则;
- 粒子滤波支持:用粒子集合近似信念状态,支持不确定性建模;
- 校验行为局部化:验证逻辑只作用于需要它的那条决策,不影响其他路由。
4. 执行流程
4.1 预选择模式(Select Flow)
预选择模式下,一次请求即可完成模型选择:
对应源码是 AutoMixSelector.Select()(src/semantic-router/pkg/selection/automix.go#L263-L320):先按成本升序排序候选(sortByCost),再根据 cost_aware_routing 走 selectCostAware(代价感知)或 selectQualityOnly(纯质量)两条路径。
代价感知打分的关键公式在 computeExpectedValue()(src/semantic-router/pkg/selection/automix.go#L414-L452):
value = quality - cost_penalty + escalation_value * (1 - verification_prob)
其中:
quality来自已学习的平均质量分(AvgQuality)或模型目录证据(evidenceForCandidate),缺失时贡献为 0,不当作实测的 0 分处理;cost_penalty将每百万 token 成本归一化到 0–1(假设上限约 $10/1M tokens)后乘以cost_quality_tradeoff;escalation_value在verification_prob < verification_threshold时生效,等于discount_factor * EscalationReward。
此外,在 selectCostAware 中,对验证概率已达到阈值的模型给予 10% 的价值加成(value *= 1.1),体现「更可能一次成功」的优势。
4.2 级联模式(Cascade Flow:验证 + 升级)
级联模式由三组 API 驱动(src/semantic-router/pkg/selection/automix.go#L737-L867):
InitializeCascade:通过GetEscalationChain(按estimateParamSize估算的参数规模从小到大排序)构建升级链,返回最小的起始模型与初始级联状态;VerifyAnswer:调用外部验证服务器做蕴含校验,返回VerificationResult{Confidence, ShouldEscalate, NextModel, Reasoning};ContinueCascade:检查验证结果——若ShouldEscalate且未达MaxEscalations上限,则切换到升级链中的下一个模型继续;否则接受当前回答并返回完成信号。
值得注意的降级保护:当 ShouldEscalate 为真但当前模型已是升级链最后一个(无更大模型可用)时,VerifyAnswer 会自动把 ShouldEscalate 置为 false(src/semantic-router/pkg/selection/automix.go#L687-L693);若验证服务器未配置或调用失败,ContinueCascade 会以警告方式接受当前回答,保证可用性。
4.3 验证两种路径的实现对照
| 验证方式 | 触发配置 | 实现位置 |
|---|---|---|
| logprob 置信度 | use_logprob_verification: true | 由 use_logprob_verification 开启,对应置信度估计路径 |
| 蕴含校验(entailment) | enable_self_verification: true + verifier_server_url | AutoMixVerifierClient(src/semantic-router/pkg/selection/router_r1_client.go#L121-L239),HTTP 客户端,POST /verify |
验证服务器本身是一个独立的 Python 服务(src/training/model_selection/rl_model_selection/automix_verifier.py),按论文做法以 few-shot 方式采样 $k$ 次,计算 p(correct) = count(verified) / k 作为置信度。启动示例:
python automix_verifier.py --port 8889 --model "microsoft/phi-2" --samples 5
looper 侧还有一层共享契约适配器 AutoMixVerifier(src/semantic-router/pkg/looper/verifier_automix.go),它把上述 HTTP 客户端包装成 Verifier 接口(VerifierKindFaithfulness),支持多候选独立打分、以最高分作为总体置信度,并复用了 confidence >= threshold 的接受规则。
5. 解决什么问题
某些路由需要动态的成本-质量优化,而不是「始终选同一个模型」或「应用固定启发式级联」。automix 把自校验和升级策略内置在路由器中,从而只在期望质量收益值得时才多花钱——当验证置信度不足、升级能带来预期收益时,才会付出更大的推理成本。
6. 何时使用
- 一条路由包含多个成本与质量画像不同的候选模型;
- 升级应被限制在有界的重试次数内(
max_escalations); - 路由需要保持成本意识,而非总是选择最强模型;
- 你希望在基于 POMDP 的最优路由与简单阈值规则之间选择前者。
7. 已知局限
- 级联模式延迟增加:每一步验证都是一次额外的推理(即额外延迟);
- 蕴含校验依赖外部服务:需要独立的 LLM 端点(
verifier_server_url)支持; - 粒子滤波开销:POMDP 信念更新带来额外的计算开销;
- 数据依赖:缺乏足够历史数据时,POMDP 信念可能无法收敛。
8. 配置指南
算法片段配置(config/fragments/algorithm/selection/automix.yaml)展示了最精简的写法:
algorithm:
type: automix
automix:
verification_threshold: 0.78
max_escalations: 2
cost_aware_routing: true
在真实路由配置中,algorithm 片段嵌套在 modelRefs 之后(见 config/config.yaml#L1394-L1421 的 urgent_automix_route 示例):
- name: urgent_automix_route
description: Cost-aware urgent handling with AutoMix.
priority: 145
rules:
operator: AND
conditions:
- type: keyword
name: urgent_keywords
modelRefs:
- model: qwen3-8b
use_reasoning: false
- model: qwen3-32b
use_reasoning: true
algorithm:
type: automix
automix:
verification_threshold: 0.78
max_escalations: 2
cost_aware_routing: true
cost_quality_tradeoff: 0.35
discount_factor: 0.9
use_logprob_verification: true
8.1 完整参数表
以下完整参数均可在 AutoMixConfig(src/semantic-router/pkg/selection/automix.go#L50-L100)与默认值函数 DefaultAutoMixConfig()(src/semantic-router/pkg/selection/automix.go#L103-L118)中得到印证:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
verification_threshold | float | 0.7 | 自校验置信度阈值(0–1),低于此值触发升级 |
max_escalations | int | 2 | 最大升级次数 |
cost_aware_routing | bool | true | 是否启用成本-质量权衡优化 |
cost_quality_tradeoff | float | 0.3 | 成本-质量平衡系数(0=纯质量,1=纯成本) |
discount_factor | float | 0.95 | POMDP 折扣因子 γ(0–1) |
use_logprob_verification | bool | true | 是否用 logprobs 做置信度估计 |
enable_self_verification | bool | false | 是否启用基于 LLM 的蕴含校验(默认关闭,因为它需要外部端点) |
verification_samples | int | 5 | 验证采样次数 k(对应论文中的 k) |
verification_temperature | float | 0.7 | 验证采样温度 |
use_pomdp_router | bool | true | 是否启用完整 POMDP 路由(false 时退化为简单阈值路由) |
belief_particles | int | 100 | POMDP 信念粒子数 |
cost_lambda | float | 0.5 | POMDP 成本-性能权衡 λ(对应奖励公式中的 λ) |
verifier_server_url | string | — | AutoMix 自校验服务器 URL(启用蕴含校验时必须设置) |
enable_cascade | bool | false | 是否启用完整级联执行模式 |
几点配置注意事项:
use_pomdp_router: true时,NewAutoMixSelector会构造AdaOpsSolver,其初始化事件与参数(belief_particles、cost_lambda、discount_factor)会写入日志(automix_adaops_initialized);- 若
enable_self_verification: true但未设置verifier_server_url,初始化时会记录automix_verifier_config_missing警告,且 verifier client 不会被创建(src/semantic-router/pkg/selection/automix.go#L188-L212); - verifier 客户端 HTTP 超时默认 60 秒(因为多采样校验耗时更长),可通过
SetTimeout覆盖(src/semantic-router/pkg/selection/router_r1_client.go#L141-L166)。
9. 模型能力学习与反馈闭环
AutoMix 并不是只靠静态配置工作,它维护每个模型的能力档案(ModelCapability,src/semantic-router/pkg/selection/automix.go#L120-L131):
{
"model": "qwen3-8b",
"param_size": 8.0,
"cost": 0.3,
"avg_quality": 0.85,
"quality_known": true,
"verification_prob": 0.7,
"escalation_reward": 0.0,
"query_success_count": 42,
"query_total_count": 50
}
这些字段从模型配置(InitializeFromConfig,含价格 Pricing.PromptPer1M、证据评分 EvidenceScore)初始化,并通过两条途径在线更新:
UpdateFeedback(src/semantic-router/pkg/selection/automix.go#L343-L360):winner/loser 反馈以学习率 0.1 的指数移动平均(EMA)更新VerificationProb与AvgQuality,并调用AdaOpsSolver.UpdateBelief更新粒子信念,随后执行一轮价值迭代(updateValueFunctionLocked);VerifyAnswer(src/semantic-router/pkg/selection/automix.go#L654-L714):验证通过/失败同样以 α=0.1 的 EMA 更新VerificationProb。
模型参数规模通过 estimateParamSize(src/semantic-router/pkg/selection/automix.go#L589-L619)从模型名中解析(支持 405b/70b/72b/34b/32b/14b/13b/8b/7b/3b/1.8b/1.5b/0.5b 等常见模式,无法识别时默认按 7B 处理),作为升级链排序与粒子先验的依据。
10. 与 Hybrid 的集成:作为评分组件
automix 不仅可以独立使用,还能作为 hybrid 算法的子评分组件。HybridSelector 通过 automix_weight 引入 AutoMix 的期望值打分(src/semantic-router/pkg/selection/hybrid.go#L41、src/semantic-router/pkg/selection/hybrid.go#L205),组合示例见 config/config.yaml#L1446-L1454:
algorithm:
type: hybrid
hybrid:
experience_weight: 0.4
router_dc_weight: 0.3
automix_weight: 0.2
cost_weight: 0.1
quality_gap_threshold: 0.08
normalize_scores: true
这得益于 AutoMixSelector 实现了 ScoreCandidates 接口(src/semantic-router/pkg/selection/automix.go#L324-L332),把每个候选的期望值(computeExpectedValue)暴露给 hybrid 做加权融合——代价感知的起始模型调整仍保留在 Select 中,不污染共享评分集。
11. 源码中的注册与测试验证
- 注册:
SelectionFactory在方法为automix时创建NewAutoMixSelector并执行InitializeFromConfig(src/semantic-router/pkg/selection/factory.go#L190-L195),且以MethodAutoMix注册到选择器注册表(src/semantic-router/pkg/selection/factory.go#L304); - 测试:src/semantic-router/pkg/selection/paper_benchmark_test.go 将 AutoMix(arXiv:2310.12963)与 Router-R1(arXiv:2506.09033)、GMTRouter(arXiv:2511.08590)并列做论文级基准验证;looper 侧另有 src/semantic-router/pkg/looper/verifier_automix_test.go 与 src/semantic-router/pkg/looper/confidence_automix_entailment_test.go 覆盖蕴含校验路径。
12. 小结
AutoMix 为 semantic-router 提供了一条「理论严谨、落地可配」的模型路由路径:POMDP 信念状态 + 粒子滤波负责决策的最优性,自校验负责回答质量的即时观测,级联升级负责将成本约束到有界范围。在预选择模式下它一次决策即出结果;在级联模式下它配合 looper 与外部验证服务器完成「生成-校验-升级」闭环。实际部署时,请结合 cost_aware_routing、cost_quality_tradeoff 与 max_escalations 三个参数,在成本、质量与延迟之间找到适合业务的路由策略。
【免费下载链接】semantic-router
An open, programmable decision layer for models and compute.
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/gitblog_01200/article/details/154326367



