返回文章列表

多模型路由降本之后,为什么线上故障反而更难定位

降本省下的是单次调用的钱,线上付出的却是复现成本、归因成本,以及一次次把问题从‘质量’误判成‘随机’的时间

线上第一次觉得不对劲,是一条很难解释的投诉:同一个用户在 5 分钟内连问三次同一个问题,第一次回得很好,第二次开始胡说,第三次又恢复正常。

日志里没有异常,延迟也稳,token 用量也没飙,唯一能看见的变化,是我们刚把“多模型路由”打开,用更便宜的模型兜一部分流量。

当时团队的直觉很一致:模型嘛,概率分布,有波动正常。再说路由也就一层网关,能出什么大问题。

后面两周,我们把这句话吃了很多次亏。

核心判断

多模型路由的核心代价不是多写一层网关,而是把同一个请求的行为从“可复现”变成“概率分布”。

在单模型时代,线上问题再怎么难,只要你拿到输入、prompt、上下文、版本号,大概率能在某个环境里复现出来,然后顺着调用链把根因扣住。

路由一旦介入,问题会变成:

  • 这次到底走了哪个模型、哪个版本、哪套参数
  • 路由为什么这么选,阈值命中了什么特征
  • 同一个会话里前后两次是否走了不同的路径
  • 失败发生时你能不能把“当时的决策”重新跑一遍

如果这些都没有可追溯的日志和回滚机制,线上故障会从“模型不准”升级成“根因不可定位”。

事情是怎么一步步变难的

我们最开始只做了最朴素的策略:能用小模型就用小模型,只有在“看起来复杂”的时候才升级到大模型。

所谓“看起来复杂”,就是一些廉价特征:输入长度、是否包含代码块、是否出现多轮对话、以及一个小分类器的置信度。

上线后第一波问题不是质量下降,而是排障方式失效。

同样的 prompt,测试同事在灰度环境复现不出来,开发在本地复现不出来,最后只有线上用户能稳定触发。

我们一度怀疑是上下文拼接、缓存、或者某个后处理的 Bug,直到把一次请求的全量输入抓出来,才发现这次线上走的是小模型,而我们复现时默认走的是大模型。

这不是“模型波动”,是“路径变化”。

路径变化把排障从“复现输入”变成了“复现决策”。而决策在当时是不可重放的。

误区一:把路由当成纯粹的成本优化

成本表里你看到的是:

  • 30% 流量走小模型
  • 平均单次调用成本下降 18%

但故障表里你看不到的是:

  • 每次质量问题要多花 1-2 天才能确定是不是路由导致
  • 线上复现需要抓更完整的“决策上下文”
  • 回滚不再是“回滚模型”,而是“回滚策略 + 回滚阈值 + 回滚特征提取逻辑”

当你把路由当成“换个供应商”那种轻量改动时,后面一定会在排障里补交利息。

误区二:把不稳定解释成“LLM 本来就随机”

单模型随机性带来的问题,大多是“同输入多次采样不同输出”。

路由随机性带来的问题,是“同输入走了不同系统”。

两者外观看起来都像波动,但诊断方式完全不同。

前者你会去调温度、调系统提示词、加约束;后者你必须先回答:这次是不是走错路了。

如果你没有路由决策日志,团队就会陷入一种很坏的习惯:把所有异常都归因给“模型不稳定”,于是策略越来越激进,质量越来越像骰子。

真正需要补齐的三类可追溯性

把路由做成“可排障”的系统,至少要补齐三类记录,而且要能在一个请求维度串起来。

1) 路由决策日志(decision log)

不只是记录“选了哪个模型”,还要记录:

  • 候选集合(当时有哪些可选模型)
  • 每个候选的打分或阈值判断
  • 使用的特征值(输入长度、多轮计数、分类器输出等)
  • 策略版本号(非常关键)

这样你才能回答“为什么这次选了它”。

2) 请求快照(replay snapshot)

至少要能把下面这些在故障时拿到:

  • 原始用户输入
  • 实际送进模型的 prompt(包含系统提示词、拼接后的上下文、工具结果)
  • 关键配置(temperature、top_p、max_tokens、stop、以及你自己的后处理开关)

没有快照,你的复现只是在猜。

3) 路由回滚(rollback primitive)

回滚要足够“粗暴”且可一键执行:

  • 强制全量走某个稳定模型
  • 或者固定某个策略版本

不要指望在事故里临时改阈值,事故里你需要的是确定性。

失败案例:看似聪明的“自适应阈值”

我们后来尝试过更“聪明”的做法:根据近 10 分钟的质量信号动态调整阈值,让小模型吞更多流量。

结果是一次很典型的自激振荡:

  • 小模型吞更多,质量信号变差
  • 阈值上调,大模型吞更多,质量信号变好
  • 阈值下调,小模型又吞更多

外部看起来就是“时好时坏”,内部则是策略在抖。

这类问题如果没有策略版本号和决策日志,基本没法解释清楚,更别说修。

适用边界

多模型路由不是不能做,但它更适合满足下面这些前提的团队:

  • 你能接受为了可追溯性付出额外存储和隐私合规成本
  • 你有明确的质量度量与告警,不是靠用户投诉
  • 你能把策略当成“线上系统”来维护,有版本、灰度、回滚

如果你现在的可观测性还停留在“请求量、延迟、错误码”,那先别急着做复杂路由。你省下的钱,很可能会被排障时间吞回去。

结尾

多模型路由最容易被低估的不是实现难度,而是它改变了排障的对象。

以前你复现的是输入,现在你要复现的是决策。没有决策日志、请求快照和回滚原语,线上故障就会变成一种你解释不清、修不干净的“随机”。

降本的账很容易算,复现的账最难算,但它最后一定会出现在你的事故复盘里。