一组尺寸递增的方块排在通道入口,每个方块前立着一块写着预算项的小牌

一、路由器自己也要被路由

据公开报道,有一个开源团队一次放出了六款决策模型,同一系列按后缀区分尺寸,参数规模从不到十亿直到数百亿量级,权重公开发布,输入除文本外还能接收图像与视频,用途是给上层系统做判断。这里的具体型号名与参数边界一律只作转述,各款之间的精度差与延迟差没有任何公开依据,本篇不做推断。

本篇只接这一件事暴露出来的工程位置:当我们讨论模型路由时,讨论的几乎都是”路由器怎么选别人”,很少讨论”谁来选路由器”。可决策模型一旦上线,它就站在每一个请求的关键路径上,它的开销是乘法而不是加法。它每被调用一次,后面那条链路的全部成本才被触发一次;它慢一步,链路里每一个请求都跟着慢一步;它判断错一次,后面所有花出去的钱都花在了错误的分支上。所以路由模型自己的部署选型,要用和上层模型一样的严肃程度来做。

这件事在洹拓的交付里是真实的开销:给企业客户搭智能体入口时,路由层的推理实例往往是独占的,因为共享池的抖动会直接反映到用户感知上。独占就意味着一笔独立预算。

二、四笔预算:先定义再量法

我们把路由模型的选型约束固定为四笔预算,每一笔都要有明确的测量方法,不接受”轻量级”这种描述。

第一笔是首包延迟,指从请求进来到路由决策产出并可以开始下游调用之间的时间。测量点在网关侧,不要从客户端取,客户端里混着网络与序列化。它的组成至少包括输入预处理、模型前向、决策解析三段,三段要分别打点,否则只知道慢不知道慢在哪。第二笔是显存占用,包含权重、运行时开销与 KV 缓存三部分,第三部分随输入长度增长,多模态输入的编码结果也占在这里。要按峰值而不是加载完那一刻的读数记。第三笔是单请求成本,把路由层折算到每个请求上的钱,等于实例单位时间成本除以单位时间处理的请求数,这一笔决定了路由层能不能被放进低价业务里。第四笔是错误代价,这一笔最容易被跳过,因为它不是账单上的数,而是返工、投诉与质量事故。

前一笔是钱,后一笔也是钱,但性质完全不同:前三笔可以通过换小模型单调地压下去,第四笔往往相反,模型越小判断越不稳。四笔预算放在一张表上看,才知道”选哪一档”其实是在挑一个可以接受的组合。

三、六个尺寸不等于六个可选档位

宣传上给了六档,实际部署时能选的组合比这多得多,因为同一个尺寸在不同量化位宽与不同批处理设置下的表现差异,可能大于相邻两个尺寸之间的差异。

量化把权重压小,显存占用下降、单实例成本下降,同时数值行为发生变化,边界样本上的判断可能翻转。批处理提高单位时间处理的请求数,摊薄单请求成本,代价是每个请求进入批次的等待变长,首包延迟的尾部被拉高。这两个维度对同一尺寸是自由组合的,所以我们记账时从来不写”某尺寸模型”,写”某尺寸加某量化加某批量上限”,这三项合起来才算一个档位。换句话说,一个尺寸档位在纸上给你六个选项,落到部署上给你几十个。

多模态输入带来第三层隐藏成本,也是这批模型值得单独讨论的地方。图像与视频要先经过预处理与编码,这一段不在语言模型的时间线里,但完全在用户的时间线上;视频还要按帧采样,帧数直接决定这段开销的量级。更麻烦的是缓存:路由层通常靠缓存历史上下文来省时间,视觉输入的表示一旦进入上下文,任何一张图的更换都可能让整段缓存失效,命中率的分布就不再稳定。我们的处理是把多模态请求单独立一条预算线,不与纯文本共用阈值,因为共用会让文本侧的数字被少数图像请求拖花。

四、判断错的两种方向,代价不对称

决策模型的错误不是同一种错误。误判为复杂、升级到昂贵后端,代价是多花的钱;误判为简单、降级到小模型,代价是一份不合格的输出交到用户手里,后面是返工与信任损失。这两件事的金额可能接近,但性质不对等,所以不能用一个对称的准确率指标来选模型。

我们的做法是阈值分档加抽检兜底。置信度不只是一个数,要按业务重要度切出三段:高于上限直接走既定分支;落在中间带时选择代价更低的那一侧,重要业务宁可多花钱也不敢降档;低于下限则进入人工或规则兜底,不交给模型决定。中间带的宽度就是为不对称性留出来的,业务越敏感留得越宽。

抽检要按分支分池做,而不是按总量抽。降级分支的抽检频率要高于升级分支,因为它的错误更贵也更难被发现——升级错了账单上看得见,降级错了要靠用户投诉才看得见。抽检结果回流到阈值调整,形成一条固定的操作:调阈值需要看抽检通过率与成本两条线,只看一条必然会调错方向。

五、核心交付物:选型矩阵与可观测字段

下面这张矩阵是我们给客户搭路由层时先填的表,行是六类工况,列是四笔预算再加一项部署形态要求,交叉处填可接受线而不是填模型名。模型名是这张表填完之后才出现的结论。

工况 首包延迟可接受线 显存与单请求成本 错误代价与阈值策略 部署形态要求
单轮短问答 尾部分位敏感,卡得最紧 独占小实例,成本必须低于下游 错误代价低,可激进降档 常驻,不允许冷启动
长上下文对话 可适当放宽,但需与下游分开看 缓存占用随长度增长,需单独预算 降档会破坏连贯性,中间带留宽 需按长度分池
多轮工具链 每轮都要付出路由开销,累积显著 每请求触发下游全部成本 一次误判放大整条链路,优先稳定 决策要可重放
代码与结构化生成 可放宽,用户容忍度高 单请求成本高,路由层必须便宜 降档导致不可编译,宁升不降 结果需校验器
图像与视频输入 含预处理与编码,需单列口径 视觉表示占用大,缓存易失效 判断错表现为答非所问,需人工抽检 与文本分池分预算
批量离线任务 不敏感,只看吞吐 用大批次摊薄,成本最优档 可事后重跑,允许激进降档 可共享实例

矩阵之后是可观测字段,这一组字段决定了能不能复盘。没有它们,路由层就是一个只做决定的黑盒,出了问题只能猜。每个请求最少落这八个字段:命中的规则或模型分支标识;当时的候选集,即这个请求本可以被派往哪些后端;决策置信度;是否落在中间带以及向哪一侧取整;降级原因,用一个枚举码而不是自由文本;输入模态与长度分档;最终花费;路由自身三段耗时。字段要随请求ID一起进日志系统,并且能被按上述任一维度聚合。

六、上线前的最小评测集与模型自己的更新回滚

最小评测集不需要大,但必须按业务分层抽样,三类样本一条都不能少:真实分布里的常见样本、刻意放进去的弃权样本(信息不足或超出能力范围,正确行为是转人工或走规则兜底)、以及跨模态样本(同一问题分别以文本和图像提出,看决策是否一致)。我们坚持弃权样本的存在,因为一个从不承认自己不确定、把一切都分派的决策模型,在生产上比一个偶尔弃权更难收拾。

决策模型自身的更新也要按发布物管理。权重来源要可追溯,记录仓库与版本标识,不接受”重新下载一次覆盖掉”这种操作;每次更新前留一份离线快照,包含权重、配置与 tokenizer,保证任何时候能一键退回;新版先影子运行,接收同一份线上流量但不生效,只把两版决策的差异写日志,影子期看的是分歧率与分歧样本落在哪一侧,不是看总分。分歧样本里凡是涉及降级方向的,全部人工过一遍。

四笔预算不是给厂商看的,是给自己算的。据公开报道里那六款尺寸,本身不构成选型结论;把它们放到上面这张矩阵里,填出自己的可接受线,才知道该用哪一档、该独占还是共享、该在哪个方向上把阈值收紧。这套动作的工时不多,比上线后再回头查路由层的账单要便宜得多。