
后端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),仅供参考