- 后端
- API网关
- 模型推理服务
- AI Agent
【免费下载链接】semantic-router
An open, programmable decision layer for models and compute.
导读
rl_driven是 semantic-router 中面向在线探索与个性化的模型选择算法:它不再像静态选择器那样冻结当前的"最优模型",而是让路由决策在交互中持续学习——既可以用 Thompson Sampling 做有原则的探索/利用权衡,也可以接入 Router-R1 风格的 LLM-as-Router 让大模型直接分析查询并选择模型。读完本文,你将掌握rl_driven的三大子模式(Thompson Sampling、Router-R1、Concurrent Arena)、完整配置项与参数含义、反馈学习与状态持久化机制,以及当前仓库中该算法在 v0.3 配置体系下的迁移前提与限制。
概览:什么是 rl_driven
rl_driven(RL-Driven)是 semantic-router 选择(selection)算法族中用于在线学习路由策略的成员,核心思想是"持续探索、持续积累反馈、按用户个性化",而不是固化一个静态排名。v0.3 版本的英文教程将其定位为支持多种子模式的选择算法:
- Thompson Sampling(默认):基于贝叶斯后验采样实现探索/利用平衡;
- Router-R1(LLM-as-Router):由外部 LLM 服务器分析查询、执行"think / route"动作来决定路由目标;
- Concurrent(Arena 模式):作为 looper 算法使用时,并发执行全部候选模型并聚合结果,适合 A/B 测试与 arena 评估。
中文教程指出其对应配置片段为config/fragments/algorithm/selection/rl-driven.yaml(在当前仓库快照中,该 fragment 文件未包含,算法完整实现位于 src/semantic-router/pkg/selection/rl_driven.go,英文教程位于 website/versioned_docs/version-v0.3/tutorials/algorithm/selection/rl-driven.md)。
从源码注释看,该实现的设计参照了 Router-R1 论文(arXiv:2506.09033)的多轮路由与奖励结构:格式奖励、结果奖励与成本奖励的加权组合,另有 GMTRouter(arXiv:2511.08590)作为个性化路由的相关工作被一并提及。
主要优势
- 支持探索,而非总利用当前最佳模型:算法会在"当前最佳"之外保留随机的、成本感知的探索行为,避免陷入局部最优;
- Thompson Sampling 提供有原则的探索/利用平衡:以 Beta 分布后验为每个候选建模,采样决策天然带有不确定性感知;
- Router-R1 模式让 LLM 推理路由:查询复杂度、成本效率与模型能力交由大模型综合权衡;
- 按用户个性化,路由随交互积累而适应:每个用户维护独立的偏好模型,并通过混合因子与全局偏好融合;
- 支持隐式反馈:可自动检测的满意度信号(如 satisfied、wrong_answer)以较低权重参与学习;
- 在线学习行为局部收敛在单条决策:不需要离线重训,学习发生在每次选择与反馈之内。
它解决什么问题?
若路由器应当持续学习而非冻结当前胜者,静态选择器会成为瓶颈:它无法感知"某用户对某模型偏好更强"或"某个新模型值得试探"。rl_driven正是为这些场景暴露基于探索的策略——把学习策略内建在路由器里,让模型选择能随奖励与用户反馈持续改进。
何时使用:
- 路由应在线探索候选模型;
- 个性化应随时间适应不同用户;
- 可以承受一定的探索成本,以换取长期更优的选择;
- 希望无外部依赖地获得有原则的探索时,优先 Thompson Sampling;
- 已训练好 router LLM 服务器时,可选用 Router-R1 模式。
三种子模式详解
1. Thompson Sampling(默认)
Thompson Sampling 为每个候选模型的成功概率建模为 Beta 分布:
$$\theta_m \sim \text{Beta}(\alpha_m, \beta_m)$$
每次请求到达时,对每个候选模型从其 Beta 分布中采样一次,选择采样值最高的模型:
$$m^* = \arg\max_m \theta_m$$
收到反馈后按下述规则更新分布:
- 胜(Win):$\alpha_m \leftarrow \alpha_m + 1$
- 负(Loss):$\beta_m \leftarrow \beta_m + 1$
- 平局(Tie):$\alpha_m \leftarrow \alpha_m + 0.5,\ \beta_m \leftarrow \beta_m + 0.5$
当use_thompson_sampling: false时,回退为epsilon-greedy,以exploration_rate作为 $\epsilon$:以概率 $\epsilon$ 随机选一个(成本感知时偏向更便宜的)模型,否则选择后验均值最高的模型。探索率还按exploration_decay随选择次数衰减,并受min_exploration下限约束。
2. Router-R1(LLM-as-Router)
当enable_llm_routing: true且配置了router_r1_server_url时,选择器首先调用外部 Router-R1 LLM 服务器(实现于 src/training/model_selection/rl_model_selection/router_r1_server.py,基于 arXiv:2506.09033 的 think/route 动作模式)分析查询并直接给出路由决策。客户端实现见 src/semantic-router/pkg/selection/router_r1_client.go:向服务端POST /route提交{"query": ...},解析返回的selected_model与thinking;服务端提供/health健康检查端点。若 LLM 选中的模型不在候选列表中,会选择部分匹配;仍不匹配则报错或按llm_routing_fallback回退。
Router-R1 奖励结构:$R = R_{\text{format}} + (1-\alpha) \cdot R_{\text{outcome}} + \alpha \cdot R_{\text{cost}}$
| 组件 | 说明 |
|---|---|
| $R_{\text{format}}$ | 格式不正确为 -1(由format_reward_penalty指定),正确为 0 |
| $R_{\text{outcome}}$ | 基于与标准答案的精确匹配(Exact Match),取值 0~1 |
| $R_{\text{cost}}$ | 与"模型大小 × 输出 token 数"成反比(按 $10 美元/1M tokens 归一化) |
| $\alpha$ | cost_reward_alpha,性能与成本的权衡系数 |
3. Concurrent(Arena 模式)
当rl_driven以 looper 算法的type: "concurrent"形式使用(如 ratings、fusion、remom 等 looper 家族算法语境,参见 src/semantic-router/pkg/looper 与 config/fragments/algorithm/looper 下的配置片段),可以并发执行全部候选模型并聚合结果——适用于 A/B 测试与 arena 评估场景。源码中SelectMultiRound与AggregateResponses也提供多轮并行查询与结果聚合能力(默认最多max_aggregation_rounds个模型,聚合策略为置信度加权选择,见 rl_driven.go 中MultiRoundResult相关实现)。
选择流程与反馈流程
选择流程(Thompson Sampling 路径)
反馈流程
配置指南
决策级配置示例
中文教程给出如下完整配置(用于routing.decisions[].algorithm中,配合type: rl_driven使用):
algorithm: type: rl_driven rl_driven: exploration_rate: 0.15 exploration_decay: 0.97 min_exploration: 0.03 use_thompson_sampling: true enable_personalization: true personalization_blend: 0.4 session_context_weight: 0.35 implicit_feedback_weight: 0.5 cost_awareness: true cost_weight: 0.2 storage_path: state/rl-driven.json auto_save_interval: 30s use_router_r1_rewards: true cost_reward_alpha: 0.3 format_reward_penalty: -1.0 enable_llm_routing: false router_r1_server_url: "" llm_routing_fallback: thompson enable_multi_round_aggregation: false max_aggregation_rounds: 3参数表
下表合并了英文教程的默认值与源码 rl_driven.go 中RLDrivenConfig的字段注释、selection_config.go 中RLDrivenSelectionConfig的 YAML 绑定,以及DefaultRLDrivenConfig()的真实默认值:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
exploration_rate | float | 0.3 | 初始探索率(epsilon),取值 0~1,越大越爱探索 |
exploration_decay | float | 0.99 | 每 100 次选择后的衰减因子(0~1),越小衰减越快 |
min_exploration | float | 0.05 | 探索率下限(0~1),保证永远保留一点探索 |
use_thompson_sampling | bool | true | 使用 Thompson Sampling 而非 epsilon-greedy |
enable_personalization | bool | true | 按用户维护独立偏好模型 |
personalization_blend | float | 0.7 | 全局与用户偏好的混合因子:1.0 完全个性化,0.0 完全全局 |
session_context_weight | float | 0.3 | 会话内反馈对采样的影响权重(0~1) |
implicit_feedback_weight | float | 0.5 | 隐式(自动检测)反馈的权重(0~1),默认只算显式反馈的一半 |
cost_awareness | bool | true | 启用成本感知探索(偏好便宜模型) |
cost_weight | float | 0.2 | 成本在探索/采样中的影响权重 |
storage_path | string | — | RL 状态持久化文件路径(可选) |
auto_save_interval | string | 30s | 自动保存间隔;非法值回退到默认 30s(见 auto_save_interval.go) |
use_router_r1_rewards | bool | true | 启用 Router-R1 风格奖励计算 |
cost_reward_alpha | float | 0.3 | 奖励中成本占比:0.0 纯结果、1.0 纯成本 |
format_reward_penalty | float | -1.0 | 响应格式不正确时的惩罚值 |
enable_llm_routing | bool | false | 启用 LLM-as-Router 模式 |
router_r1_server_url | string | — | Router-R1 LLM 服务器地址(需暴露/route与/health) |
llm_routing_fallback | string | thompson | LLM 路由失败时的行为:thompson回退采样,error直接报错 |
enable_multi_round_aggregation | bool | false | 启用多轮路由(并行查询多个模型并聚合) |
max_aggregation_rounds | int | 3 | 多轮模式最多查询的模型数(默认 3,且不超过候选数) |
源码默认值速查
DefaultRLDrivenConfig()(rl_driven.go)中与上述表格一致的关键默认:ExplorationRate=0.3、ExplorationDecay=0.99、MinExploration=0.05、UseThompsonSampling=true、EnablePersonalization=true、PersonalizationBlend=0.7、SessionContextWeight=0.3、ImplicitFeedbackWeight=0.5、CostAwareness=true、CostWeight=0.2、UseRouterR1Rewards=true、CostRewardAlpha=0.3(30% 成本、70% 结果)、FormatRewardPenalty=-1.0。未配置时选择器会使用这套默认值(NewRLDrivenSelector(nil)即走默认分支,测试TestNewRLDrivenSelector对此有覆盖)。
源码级实现解析
三层偏好结构
RLDrivenSelector内部维护了四类状态(见 rl_driven.go):
- globalPreferences:全局共享偏好;
- userPreferences:
user_id → model → preference的用户级偏好; - categoryPreferences:
category → model → preference的类别级偏好; - sessionContext:
session_id → model → SessionModelStats的会话内近期表现统计。
选择时getPreference按优先级融合:先取全局,再按PersonalizationBlend与用户偏好混合,若命中决策名(类别)还会再与类别偏好混合 0.3 权重(rl_driven.go)。混合是对 Beta 分布参数的加权和(blendPreferences),测试TestRLDrivenSelector_BlendPreferences验证了该公式。InitializeFromConfig会以均匀先验Beta(1,1)初始化全局偏好,并把模型配置中的Pricing.PromptPer1M写入成本表、把类别ModelScores静态评分换算为 Beta 先验(alpha = 1 + score×10)。
Beta 采样:Marsaglia–Tsang 的 Gamma 变体
BetaDistribution.Sample()通过 Gamma 分布比值法生成:$X \sim \text{Beta}(a,b) = \frac{\text{Gamma}(a,1)}{\text{Gamma}(a,1)+\text{Gamma}(b,1)}$,其中 Gamma 变体采用 Marsaglia 与 Tsang 算法(gammaVariate,alpha<1 时先做提升变换),随机数全部来自math/rand/v2的并发安全包级函数。测试TestBetaDistribution_Sample以 10000 次采样的均值逼近理论均值验证了正确性,TestBetaDistribution_ConcurrentSample与TestRLDrivenSelector_ConcurrentSelect(32 goroutine 并发压测)验证了并发安全。
成本感知与会话上下文
applyCostBonus:将模型成本在候选池内归一化到 0~1,便宜模型获得(1-normalizedCost) * cost_weight的采样加成(rl_driven.go);selectRandomModel:epsilon-greedy 探索时按成本排序,50% 概率从最便宜的三分之一中选(rl_driven.go);applySessionContext:用会话内胜率Successes/Selections与当前采样值按SessionContextWeight加权(rl_driven.go);calculateConfidence:以1 - 4×variance度量分布确定度,并用交互次数的 sigmoid 因子平滑,最终钳制在 0~1(rl_driven.go)。
可观测性
每次选择都会通过RecordRLSelection记录指标、构造人类可读的Reasoning(如RL-driven: [Thompson Sampling: sampled=0.82, Beta(8.0, 2.0), mean=0.800, personalized for user=xxx]);GetLeaderboard/GetUserLeaderboard按后验均值排序输出模型榜单,GetDebugState导出配置与全局/用户偏好快照,便于排查。
反馈学习机制
Feedback结构(selector.go)包含:WinnerModel、LoserModel、Tie、DecisionName、UserID、SessionID、FeedbackType(隐式反馈类型,取值如satisfied、need_clarification、wrong_answer、want_different)与Confidence(0~1)。更新逻辑(UpdateFeedback,见 rl_driven.go):
- 先经
NormalizeFeedback规范化与校验(winner/loser 至少其一、不得自比、confidence 必须在 0~1,见 feedback.go); - 隐式反馈按
ImplicitFeedbackWeight × Confidence加权:测试TestRLDrivenSelector_ImplicitFeedback验证 alpha 增量约为0.5 × 0.8 = 0.4; - 反馈同时更新全局、用户(个性化开启且带 UserID)、类别(带 DecisionName)三级偏好,并更新会话上下文;
- 胜者 alpha 增加、负者 beta 增加、平局双方各加 0.5(
updatePreference,rl_driven.go)。
测试TestRLDrivenSelector_UpdateFeedback、TestRLDrivenSelector_Personalization(100 次选择中 model-a 被选中超 60 次)与TestRLDrivenSelector_SessionContext分别覆盖了比较反馈、个性化生效与会话统计更新。
状态持久化与多副本注意事项
配置storage_path后,选择器通过NewFileEloStorage持久化全局、用户(键前缀_rl_user:)、会话(前缀_rl_session:,均 base64 URL 编码)与类别偏好(rl_driven.go):Beta 均值被换算为 Elo 风格评分(约 1000~2000),重启后可还原为 Beta 先验。auto_save_interval会经config.ParsePeriodicInterval校验,非法值回退默认 30s 而非报错。测试 rl_driven_storage_test.go 验证了"写入→关闭→重载"后用户偏好与会话统计完整恢复。
英文教程给出明确警告(v0.3):多副本场景下,RL 驱动的偏好与会话上下文属于本地学习状态——若只保存在内存或本地storage_path,多副本之间无法共享。在 Helm 部署中,当某个生效决策使用algorithm.type: rl_driven时,多副本渲染默认会被拒绝;需要保持单副本,或先将选择器状态外置再关闭该安全护栏。
版本迁移注意事项:rl_driven 与 global.router.learning.adaptation
以当前仓库源码为准,存在一个重要的适用前提:在 v0.3 规范中,rl_driven这类跨请求学习型算法已从决策级algorithm.type迁出。验证器 validator_decision.go 会对algorithm.rl_driven直接报错:"algorithm.rl_driven is no longer supported; use global.router.learning.adaptation";配置加载器 loader.go 同样将global.router.model_selection下的rl_driven视为已移除字段,并建议迁移到global.router.learning.adaptation与global.router.learning.protection(学习建议 + 稳定性保护的在线学习体系,配置结构见 learning_config.go,支持enabled、candidate_set、strategy等字段)。同时,src/training/model_selection/rl_model_selection/README.md 明确说明 Router-R1/GMTRouter 训练原型"未接入 semantic-router 运行时或受支持的配置 schema",router_r1_server.py只是独立演示服务器。
因此实践时请区分两种场景:阅读与理解算法原理,rl_driven的源码与测试是权威参考;在生产 v0.3 配置中直接使用,则需按迁移提示改用global.router.learning.adaptation体系,或保持本教程描述的旧版决策级配置并确认你所用发行版仍支持该 schema。
已知限制
- Thompson Sampling 在样本足够前(
min_samples效应)难以有效利用,需要一定交互量; - Router-R1 的 LLM 路由会给每次请求增加额外 LLM 调用的延迟;
- Router-R1 模式需要独立部署并训练 router LLM 服务器(参考 router_r1_server.py 的演示实现);
- 探索会带来短期成本,以换取长期更优选择;
- 偏好与会话状态默认是本地学习状态,多副本部署需外置状态或保持单副本。
结语
rl_driven把"探索—反馈—个性化"的在线学习闭环内建到路由决策中:底层是扎实的贝叶斯 Thompson Sampling,上层可插拔 Router-R1 的 LLM 路由与多轮聚合,并辅以成本感知、会话上下文、三层偏好融合与文件持久化。无论你是想为候选模型池引入有原则的探索,还是想实现按用户自适应的个性化路由,本文给出的配置示例、参数表与源码级原理都可以作为直接起点;同时请务必确认你所使用的 semantic-router 版本是否支持决策级rl_driven,在 v0.3 当前代码中它已迁移至global.router.learning.adaptation学习体系。
- 后端
- API网关
- 模型推理服务
- AI Agent
【免费下载链接】semantic-router
An open, programmable decision layer for models and compute.
相关推荐
semantic-router 实验性 Router 模型训练实战:Router-R1 强化学习路由与 GMTRouter 图网络个性化路由
semantic router 实验性 Router 模型训练实战:Router R1 强化学习路由与 GMTRouter 图网络个性化路由 本文围绕 实验性
后端API网关模型推理服务AI Agentsemantic-router GMT Router:基于异构图学习的个性化模型路由选择算法实战指南
semantic router GMT Router:基于异构图学习的个性化模型路由选择算法实战指南 导读 本文围绕 semantic router(vLLM
后端API网关模型推理服务AI AgentSemantic Router 的 Router DC 选择算法:基于双对比学习的语义相似度模型路由实战指南
Semantic Router 的 Router DC 选择算法:基于双对比学习的语义相似度模型路由实战指南 导读 router_dc 是 Semantic R
后端API网关模型推理服务AI Agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考