Semantic Router 中的 Thompson Sampling 模型选择:贝叶斯探索-利用平衡的实战指南
后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载导读Thompson Sampling 是 vLLM Semantic Router 提供的多臂老虎机Multi-Armed Bandit式模型选择算法用于在多个 LLM 候选后端之间自动做出路由决策。它以贝叶斯方式自然平衡尝试新模型探索与复用已验证的好模型利用这对矛盾并在用户反馈驱动下持续更新每个模型的胜率后验。读完本文你将掌握该算法的数学原理、Go 语言核心实现、配置文件写法、关键参数调优方法以及如何通过反馈 API 让路由器逐步学会个性化路由。1. Thompson Sampling 在模型选择中的定位在 Semantic Router 的模型选择体系中算法被划分为两个阵营核心算法Static、Elo、RouterDC、AutoMix、Hybrid与 RL 驱动算法Thompson Sampling、GMTRouter、Router-R1。其中 Thompson Sampling 属于后者选择算法总览 将其定位为面向探索/利用权衡的贝叶斯自适应学习方案适用于已经积累了一定反馈数据、希望路由器既能持续学习又能稳定利用已知优势模型的场景。与 ELO基于评分对比和 RouterDC基于查询-模型相似度不同Thompson Sampling 的核心思想是为每个候选模型维护一个描述其真实胜率不确定性的 Beta 分布每次请求时从各分布的后验采样中选出采样值最高的模型。采样的随机性天然带来了探索当某模型观测数据少、分布宽方差大时它更容易被碰运气选中而当数据充分、分布收窄后模型被选中的概率主要由其真实胜率决定。这种概率匹配Probability Matching机制在理论上保证了遗憾Regret的上界可控。2. 算法流程从用户请求到路由闭环文档给出的算法流程可概括为一次请求的完整闭环四个关键步骤每个模型维护一个代表其成功概率的 Beta 分布对每次请求从每个模型的分布中采样一个值选择采样值最高的模型作为路由目标根据用户反馈成功/失败更新该模型的分布参数。在 Semantic Router 的 RL 驱动选择器实现中这一流程被扩展为更细粒度的全局/用户/类别/会话多级偏好结构并在采样之外叠加了成本、会话上下文等修正项详见第 5 节但采样-取最大-反馈更新的骨架与文档完全一致。3. 数学基础Beta 分布、后验采样与贝叶斯更新3.1 Beta 分布每个模型维护一个 Beta 分布用来表示其成功概率 θ 的不确定性P(θ | α, β) Beta(α, β) where: α prior_alpha successes β prior_beta failures θ true success probability (unknown)这里 α 与 β 可直观理解为成功次数 先验成功数与失败次数 先验失败数。先验prior_alpha, prior_beta决定了模型在没有任何观测数据时的初始行为。3.2 采样过程每次选择时从每个模型的后验分布中独立采样θ_i ~ Beta(α_i, β_i) for each model i Select model: argmax_i(θ_i)值得注意的是选择依据是采样值而非均值——这正是探索的来源。均值相同但方差不同的两个模型在采样时会因方差不同而获得不同的被选概率方差大不确定性高的模型更容易偶尔采样出极端高分而被选中。3.3 贝叶斯更新收到反馈后仅更新被选模型的分布If success: α α 1 If failure: β β 1由于 Beta 分布与伯努利似然共轭这个更新保持了后验仍为 Beta 分布的形式无需复杂的数值积分即可在线迭代。3.4 期望与方差E[θ] α / (α β) # Expected success rate Var[θ] αβ / ((αβ)²(αβ1)) # Uncertainty高方差→ 更多探索模型表现不确定需要更多数据低方差→ 更多利用对模型表现有把握倾向稳定选择。这一公式直接对应源码中的实现BetaDistribution 的Mean()与Variance()方法且单元测试 rl_driven_test.go 通过 10000 次采样的均值近似验证了Sample()的统计性质均匀先验 (1,1) 均值约为 0.5强偏好 (10,1) 均值约为 10/11。4. 核心算法Go 实现与源码对应文档给出了ThompsonSelector的伪代码式实现。在 Semantic Router 仓库中Thompson Sampling 的实际实现位于 RL 驱动的RLDrivenSelector中当UseThompsonSampling为 true 时启用其选择与反馈更新逻辑与文档高度吻合// Select 使用 Thompson Sampling 选择模型 func (r *RLDrivenSelector) Select(ctx context.Context, selCtx *SelectionContext) (*SelectionResult, error) { // ... 从偏好中读取每个候选的 Beta 分布 for _, pref : range preferences { sample : pref.Distribution.Sample() // 可选的成本修正偏好更便宜的模型 if r.config.CostAwareness r.config.CostWeight 0 { sample r.applyCostBonus(pref.Model, sample) } // 可选的会话上下文修正 if selCtx.SessionID ! r.config.SessionContextWeight 0 { sample r.applySessionContext(selCtx.SessionID, pref.Model, sample) } sampledValues[pref.Model] sample } // 选择采样值最高的模型 // ... }对应实现位于 rl_driven.go关键子实现包括BetaDistribution.Sample()通过 Gamma 分布比值法X ~ Beta(a,b) Gamma(a,1) / (Gamma(a,1) Gamma(b,1))生成采样底层采用 Marsaglia-Tsang 算法gammaVariate并对 α≤0、β≤0 的边界情况做了兜底重置为 1.0UpdateFeedback()按加权方式更新赢家α 增加与输家β 增加的分布支持平局Tie 时 α、β 各加 0.5偏好混合blendPreferences实现见 rl_driven.go将全局偏好与用户偏好按PersonalizationBlend加权混合再用 0.3 比例混入类别偏好。此外RLDrivenSelector还提供了SelectMultiRound基于采样分数选出多个模型并行查询并聚合对应 Router-R1 的多轮路由与GetLeaderboard/GetUserLeaderboard按分布均值排序输出模型排行榜等扩展能力均可在 rl_driven.go 中查阅。在 extproc 层的路由学习自适应Router Learning中还有一处独立的 Thompson 风格采样应用router_learning_adaptation.go 的sampleBeta使用同样的 Gamma 比值法从经验质量先验中采样用于在 base 选择器结果之上决定是否切换到其他候选模型并受到切换边距routingSamplingMargin与成本惩罚costPenalty约束。5. 配置启用 Thompson Sampling 与候选模型5.1 文档配置示例在决策decision的 algorithm 块中配置type: thompson并设置贝叶斯先验与学习参数decision: algorithm: type: thompson thompson: prior_alpha: 1.0 # Prior successes (optimistic: higher) prior_beta: 1.0 # Prior failures (pessimistic: higher) per_user: true # Per-user personalization decay_factor: 0.1 # Decay old observations min_samples: 10 # Minimum samples before exploitation models: - name: gpt-4 backend: openai - name: gpt-3.5-turbo backend: openai - name: claude-3-opus backend: anthropic5.2 仓库中的对应配置结构在当前仓库中Thompson Sampling 的配置承载在 RL 驱动的配置结构RLDrivenSelectionConfigselection_config.go 中对应 selection_config.go中并以RLDrivenConfigrl_driven.go的形式被选择器解析。仓库版本的关键字段如下默认值来自DefaultRLDrivenConfig()见 rl_driven.godecision: algorithm: type: rl_driven rl_driven: use_thompson_sampling: true # 使用 Thompson Sampling默认 true exploration_rate: 0.3 # ε-greedy 模式的初始探索率默认 0.3 exploration_decay: 0.99 # 每 100 次选择衰减 1%默认 0.99 min_exploration: 0.05 # 最低探索率默认 0.05 enable_personalization: true # 按用户维护独立偏好默认 true personalization_blend: 0.7 # 用户偏好与全局偏好混合比例默认 0.7 session_context_weight: 0.3 # 会话内反馈权重默认 0.3 implicit_feedback_weight: 0.5 # 隐式反馈权重默认 0.5 cost_awareness: true # 探索时偏好更便宜模型默认 true cost_weight: 0.2 # 成本影响强度默认 0.2 storage_path: /var/lib/vsr/rl_state.json # 状态持久化路径可选 auto_save_interval: 30s # 自动保存间隔默认 30s需要注意两点当UseThompsonSampling为 false 时选择器退化为ε-greedy策略以exploration_rate概率随机选择成本感知模式下偏向低价模型否则选择均值最高的模型仓库的决策级学习配置结构由 router_learning_adaptation.go 的buildModelSelectionConfig组装测试用例 router_selection_config_test.go 展示了完整的rl_driven决策配置写法含storage_path: /var/lib/vsr/rl_state.json、auto_save_interval: 45s等字段。5.3 关键参数表参数默认值说明prior_alpha1.0先验成功数越高越乐观prior_beta1.0先验失败数越高越悲观per_user/enable_personalizationfalse / true是否按用户维护独立分布decay_factor0.0旧观测衰减率0 不衰减min_samples10进入完全利用前的最小样本数exploration_rate0.3ε-greedy 分支的探索率exploration_decay0.99探索率随选择次数衰减personalization_blend0.7用户偏好与全局偏好的混合比例cost_weight0.2成本感知探索的强度6. 先验设置Prior Settings与初始行为先验 (alpha, beta) 直接塑造模型的初始行为设置行为(1, 1)均匀先验——各模型平等探索(2, 1)乐观——假设模型表现良好(1, 2)悲观——假设模型需要证明自己(10, 10)强置信先验——改变缓慢在仓库实现中初始化逻辑将模型配置里的静态评分转换为 Beta 先验参数alpha 1.0 Score*10.0、beta 1.0 (1.0-Score)*10.0见 rl_driven.go 的InitializeFromConfig即评分越高初始 α 越大与文档先验越高越乐观的语义一致。同时InitializeFromConfig会为所有候选模型以 (1,1) 均匀先验初始化全局偏好并把模型定价Pricing.PromptPer1M注册为成本信号供成本感知探索使用。7. 按用户个性化Per-User Personalization开启per_user: true仓库中为enable_personalization: true后系统为每个用户维护独立的模型分布thompson: per_user: true这允许系统学习用户 A 偏好 GPT-4而用户 B 偏好 Claude这样的个体差异。仓库实现通过四级偏好结构实现这一目标rl_driven.go全局偏好globalPreferences所有用户共享的基线用户偏好userPreferencesuser_id - model - preference的映射每个用户独立类别偏好categoryPreferences按决策/类别区分的偏好会话上下文sessionContext记录会话内各模型的选中次数与成功次数。实际选择时通过getPreference将全局与用户偏好按personalization_blend加权混合rl_driven.go因此即使用户新用户没有历史数据也能退回到全局偏好而老用户则越来越依赖个人偏好。仓库还提供了GetUserLeaderboard(userID)rl_driven.go查看每个用户的模型偏好排名。8. 反馈集成驱动模型学习的闭环Thompson Sampling 通过反馈 API 驱动分布更新。文档给出的方式是直接提交评分# Positive feedback (success) curl -X POST http://localhost:8080/api/v1/feedback \ -d {request_id: req-123, model: gpt-4, rating: 1} # Negative feedback (failure) curl -X POST http://localhost:8080/api/v1/feedback \ -d {request_id: req-456, model: gpt-4, rating: -1}在仓库的 Feedback 结构 中反馈被建模为赢家-输家对比WinnerModel与LoserModel分别对应被偏好与未被偏好的模型Tie表示两者打平UserID/SessionID分别用于用户个性化与会话上下文学习FeedbackType表示隐式反馈类型取值如satisfied、wrong_answer、need_clarification、want_differentConfidence用于对不确定的自动检测信号降权。UpdateFeedback的更新规则rl_driven.go赢家Alpha weight成功输家Beta weight失败平局两者Alpha 0.5*weight、Beta 0.5*weight隐式反馈按implicit_feedback_weight默认 0.5降权进一步乘以其Confidence全局、用户、类别、会话四级偏好会同时被更新。9. 最佳实践与调优建议文档给出四条核心最佳实践结合仓库实现可进一步细化从均匀先验开始默认 (1, 1)除非你对模型质量有先验知识若想快速淘汰表现差的模型可适当提高prior_beta开启 per-user 实现个性化per_user: true让不同用户各自收敛到自己的偏好但冷启动阶段建议保留全局偏好混合personalization_blend不要设为 1.0非平稳环境下使用衰减当模型质量随时间变化例如频繁上线新模型或压测环境应调大decay_factor让旧观测逐渐失效仓库中exploration_decay参数同样用于控制探索率随选择次数的衰减合理设置 min_samplesmin_samples过低会导致过早利用模型尚未被充分验证过高则探索时间过长建议结合请求量按小时级数据量估算。9.1 额外工程建议持久化状态配置storage_path将全局/用户/类别偏好保存到 JSON 文件并通过auto_save_interval控制落盘频率避免重启后学习成果丢失见 rl_driven.go 的存储初始化成本感知保持cost_awareness: true让探索阶段优先尝试更便宜的模型降低试错成本applyCostBonus将成本归一化后对采样值加乘数见 rl_driven.go会话级平滑session_context_weight让会话内最近的成败记录影响路由适合多轮对话场景。10. 验证与测试如何确认算法生效仓库为 Thompson Sampling 提供了完整的测试覆盖可作为验证算法行为的参考分布统计测试rl_driven_test.go对 (1,1)、(10,1)、(1,10)、(5,5) 四种分布各采样 10000 次验证均值与理论值偏差在 0.1 以内并发安全测试TestBetaDistribution_ConcurrentSample验证并发采样下分布状态的一致性反馈更新测试验证赢家 α 增加、输家 β 增加的贝叶斯更新逻辑端到端测试core_selection.gotestThompsonSamplingSelection通过真实/v1/chat/completions请求验证探索-利用行为期望早期请求中出现模型选择的多样性探索随后向最优模型收敛。11. 参考与延伸本文档的姊妹篇选择算法总览、如何选择算法、Router-R1LLM 路由Thompson Sampling 的理论基础参见 Russo 等人的A Tutorial on Thompson SamplingarXiv:1707.02038本文档将其作为贝叶斯探索-利用方法的核心参考文献源码入口RL 驱动选择器、选择配置结构、路由学习自适应extproc 层采样。小结Thompson Sampling 为多模型路由提供了一个优雅的贝叶斯答案——用采样概率匹配真实胜率用贝叶斯更新消化反馈用先验与混合机制控制个性化与冷启动。结合 Semantic Router 的配置结构、持久化与成本感知扩展你可以用极少的工程投入把一个静态路由升级为会持续学习、自动探索、随用户反馈进化的自适应路由决策层。赞分享后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载相关推荐semantic-router 强化学习驱动选择算法 rl_driven 实战指南Thompson Sampling、Router-R1 与在线个性化路由semantic router 强化学习驱动选择算法 rl_driven 实战指南Thompson Sampling、Router R1 与在线个性化路由 导后端API网关模型推理服务AI Agent贝叶斯模型选择实战用BIC告别猜哪个模型更好的烦恼贝叶斯模型选择实战用BIC告别猜哪个模型更好的烦恼 你是否曾在多个贝叶斯模型间犹豫不决当面对哪个模型更贴合数据的问题时多数人还在用肉眼比较后验分布人工智能机器学习科学计算emilianJR/chilloutmix_NiPrunedFp32Fix云服务部署教程AWS与GCP方案emilianJR/chilloutmix_NiPrunedFp32Fix云服务部署教程AWS与GCP方案 emilianJR/chilloutmix_NiP基础模型计算机视觉大模型模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

高振荡积分高效求解:Levin方法的MATLAB实现与避坑指南

高振荡积分高效求解:Levin方法的MATLAB实现与避坑指南

简介:面向数值分析学习者与工程计算人员,一份可直接运行的Matlab代码,专门解决传统高斯积分对高振荡函数积分误差偏大的问题。在结构力学、电磁场等工程计算中,常出现由三角函数、指数函数乃至贝塞尔函数复合形成的快速振荡被积函…

2026/10/13 23:10:19 阅读更多 →
评论后端架构演进:从单体表到高并发解耦设计

评论后端架构演进:从单体表到高并发解耦设计

做了这么多年后端,接手过好几个资讯类产品的评论模块,我最大的感受是:评论系统看起来“不就是一张表嘛”,但真把它拆开了、放大到千万级日活的场景里,你会发现问题一个接一个。写评论、读评论、数评论、审评论、防刷评…

2026/10/13 23:09:18 阅读更多 →
二进制存档逆向:以字符串引用为锚点拆解XOR混淆与压缩封装

二进制存档逆向:以字符串引用为锚点拆解XOR混淆与压缩封装

1. 先搞清楚这个存档到底是什么做数据还原的同行应该都遇到过这种情况:手里拿到的不是一份普通文件,而是一个被层层处理过的存档封装。表面上它是一个二进制块,用十六进制编辑器打开,前几十个字节完全看不出规律,直接搜…

2026/10/13 23:09:18 阅读更多 →

最新新闻

金融时间序列建模全流程:从平稳性检验到GARCH波动率预测

金融时间序列建模全流程:从平稳性检验到GARCH波动率预测

1. 从第一节课到第四章:金融时间序列到底在研究什么如果你正在啃金融相关的课程,大概率会在一门叫《金融时间序列分析》或类似名字的课上卡住。这门课和传统统计学、计量经济学都不一样,它研究的是股票收益率、汇率波动、债券利差这类有“先后…

2026/10/14 0:48:55 阅读更多 →
AgenticOps工程:企业自动化运维的自主决策革命

AgenticOps工程:企业自动化运维的自主决策革命

1. AgenticOps Engineering 的本质与价值AgenticOps Engineering 正在重新定义企业自动化运维的边界。与传统自动化工具不同,这种新型工程范式通过赋予系统自主决策能力,使企业IT基础设施能够像拥有"数字员工"一样主动感知环境变化、预测问题并…

2026/10/14 0:48:55 阅读更多 →
用插件重构知识工作流:浏览器、编辑器与知识库的自动化实践

用插件重构知识工作流:浏览器、编辑器与知识库的自动化实践

知识工作者这个词听起来有点抽象,但落到日常就非常具体:你可能天天在写方案、查资料、写代码、记笔记、做汇报,一天结束回头一看,真正用在"思考"上的时间反而不多,大量时间被复制粘贴、切换窗口、找文件、重…

2026/10/14 0:48:55 阅读更多 →
ABAP单元测试效率提升:ADT工具链实战

ABAP单元测试效率提升:ADT工具链实战

1. 项目概述:当ABAP单元测试遇上效率革命在SAP开发领域,ABAP Unit作为核心测试框架已经存在多年,但真正能将其融入日常开发的团队却不多见。问题不在于框架本身,而在于传统测试流程中存在太多效率断层——从编写测试用例到执行测试…

2026/10/14 0:48:55 阅读更多 →
Python远程批量关机实战:WinRM/WMI/SMB三路径选型与避坑

Python远程批量关机实战:WinRM/WMI/SMB三路径选型与避坑

简介:本资源是一份面向Windows系统管理员与IT运维人员的Python自动化脚本工具包,解决多台设备集中管理场景下的远程批量关机需求,适用于机房巡检、课室终端维护、故障应急处置等实际运维任务。压缩包共3个文件(923B)&a…

2026/10/14 0:48:55 阅读更多 →
尖叫声音样本数据集eva:从包结构到训练基线的完整实践

尖叫声音样本数据集eva:从包结构到训练基线的完整实践

简介:EVA尖叫声音样本数据集是一份面向音乐信息检索(MIR)与音频分类研究的人声尖叫样本库,由台湾清华大学MIR课程项目整理,旨在为尖叫检测、异常声音识别、SVM分类等实验提供稀缺的领域数据。压缩包共63个文件&#xf…

2026/10/14 0:47:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →