快速结论:使用 LiteLLM AdaptiveRouter 并开启 Postgres 状态持久化时,如果数据库里存在 alpha=0 或 beta=0 的脏状态行,Thompson 采样会在路由选择前抛异常,导致该 request_type 下的所有请求返回 HTTP 500。优先排查 LiteLLM_AdaptiveRouterState 表中是否存在零值行,而不是先怀疑网络或上游模型。
适用环境:litellm v1.95.0;LiteLLM proxy + Postgres 持久化;Kubernetes 部署(3 副本、共享 Postgres 状态)。Issue 未提供操作系统、Python、CUDA、显卡信息。
最快修复方案:暂无确认的一步修复方案。Issue 中提出的合并 cold-start 先验与 epsilon 下限均为建议修复,相关 PR #29398 在 v1.95.0 时“appears unmerged”;最终该 Issue 被作为重复项关闭,指向 #41579,后者说明 #29397 已由 PR #39955 在 v1.102.0 修复。
注意事项:仅重启 Pod 无法修复,因为被污染的状态行会持久化在 Postgres 中并在每次启动时重新加载;手工修改数据库属于未经 Issue 验证的操作,存在风险。升级到修复版本前,请先确认对应版本是否包含 #39955 所引入的修复。
问题场景
用户在 LiteLLM 中以 model=adaptive-router 方式调用自适应路由,并启用了 Postgres 状态持久化(多副本 K8s 部署)。当自适应路由状态表 LiteLLM_AdaptiveRouterState 中存在 alpha=0 或 beta=0 的记录后,只要请求被分类到对应的 request_type,路由就会在部署选择阶段之前崩溃并返回 HTTP 500。
Issue 中的生产证据:17 行状态中有 13 行 alpha=0,时间戳集中在 Z.AI 配额耗尽窗口(2026-08-22 至 08-26);Prometheus 指标 litellm_deployment_success_responses_total{model="adaptive-router"} 连续 3 周为 0,累计 1841 次失败。
报错原文
ValueError: gammavariate: alpha and beta must be > 0.0
# thompson_sample 内部调用
sample = random.betavariate(alpha, beta) # crashes when alpha <= 0 or beta <= 0
# 最小触发
import random; random.betavariate(0.0, 1.0) # ValueError
原因分析
Issue 指出这是两个相互耦合的缺陷,从 v1.86.2 到 v1.95.0 在 main 分支上均未改变:
- 读取侧无校验:
load_state_from_db(litellm/router_strategy/adaptive_router/adaptive_router.py,约第 141 行)直接把数据库行当作绝对后验写回单元:BanditCell(alpha=row.alpha, beta=row.beta)。而写入侧AdaptiveRouterUpdateQueue.flush_state_to_db通过 Prisma{"increment": ...}写入的是累计增量(用于避免多 Pod 互相覆盖)。读取时把增量当绝对值,就丢弃了initial_cell保证的冷启动先验(beta ≥ 0.5)。结果:只记录成功的单元持久化为beta=0,只记录失败的单元持久化为alpha=0,重载后先验丢失。 - 采样侧无 epsilon 下限:
thompson_sample(litellm/router_strategy/adaptive_router/bandit.py,约第 81 行)直接调用random.betavariate(alpha, beta),任何alpha=0或beta=0都会抛出ValueError: gammavariate: alpha and beta must be > 0.0。由于pick_best会为该request_type采样池中每个模型的单元,一个被污染的单元就会让该 request_type 的所有请求 500。
该崩溃发生在路由之前,不会选中任何部署,因此没有学习信号,也就不会自愈;状态被污染后仅靠重启无法恢复。上述两个缺陷属于 Issue 作者的明确分析,可视为可能原因,但最终该 Issue 被作为 #41579 的重复项关闭,未在本 Issue 内完成修复验证。
环境排查
- 确认 litellm 版本是否为 v1.95.0(Issue 中的生产环境版本);同时确认是否已升级到包含 #39955 的 v1.102.0 及以后版本。
- 确认是否使用 LiteLLM proxy + Postgres 状态持久化,以及是否多副本共享同一 Postgres 状态(Issue 为 K8s 3 副本)。
- 检查
LiteLLM_AdaptiveRouterState表中alpha、beta、total_samples、request_type、model_name字段,重点找alpha=0或beta=0的行。 - 检查 Prometheus 中
litellm_deployment_success_responses_total{model="adaptive-router"}是否长时间为 0。 - 确认某个
request_type是否整体失败、其他request_type是否仍成功,以验证“单一污染单元影响整个 request_type”的特征。 - Issue 未提供操作系统、Python、CUDA、显卡、依赖版本信息,这些项无需补写,只需按实际部署自行记录。
解决步骤
- 先确认是否为同一问题:按
request_type查询LiteLLM_AdaptiveRouterState,确认是否存在alpha=0或beta=0的行;对照现象是一个 request_type 全部 500、其他类型正常。 - 若怀疑是数据污染所致,可参照 Issue 的复现方式做最小验证:向表中插入一行
alpha=5.0, beta=0.0的记录,重启后发起匹配该request_type的请求,观察是否出现同样的gammavariate报错。此操作会污染真实状态表,仅应在可清理的测试环境中进行。 - 确认部署版本与修复状态:Issue 建议的修复为(a)
load_state_from_db将持久化增量合并到冷启动先验上而非直接覆盖,(b)thompson_sample增加 epsilon 下限(alpha = max(alpha, 1e-10),beta同理)作为纵深防御。Related PR #29398 在 v1.95.0 时 appears unmerged。 - 本 Issue 被关闭为 #41579 的重复项,#41579 覆盖了相同缺陷(含
update_queue.py的写入侧下限),并说明 #29397 为 closed、由 PR #39955 在 v1.102.0 修复。因此优先升级到包含该修复的版本,并以 #41579 与 #39955 为准。 - 若暂时无法升级,可优先尝试清理或修正已被污染的状态行(例如删除坏行让冷启动先验重新生效),但这属于推测性缓解,Issue 中并未验证,执行前务必备份数据库。
验证方法
清理或修复状态后,重启 Pod,发送原本失败的 request_type 请求,确认不再出现 ValueError: gammavariate: alpha and beta must be > 0.0,且 HTTP 500 消失、请求能正常选中部署。同时观察 litellm_deployment_success_responses_total{model="adaptive-router"} 是否从 0 恢复增长,并复查 LiteLLM_AdaptiveRouterState 中不再有 alpha=0 或 beta=0 的行。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[FEATURE] GuardrailProvider interface for pre-tool-call authorization](https://www.chat-gpts.plus/wp-content/uploads/2026/09/4877-556249c1-768x403.jpg)
![[Bug]: Snowflake Claude provider drops cache_creation_input_tokens and cache_read_input_tokens from response usage](https://www.chat-gpts.plus/wp-content/uploads/2026/09/35229-caee44de-768x403.jpg)
![[BUG]: Problem with DeepSeek V4.1 flash - missing reasoning_content](https://www.chat-gpts.plus/wp-content/uploads/2026/09/6349-010a11f3-768x403.jpg)