路由器自己的小模型:六个尺寸一档输入模态,选型要看四笔预算

一、路由器自己也要被路由
据公开报道,有一个开源团队一次放出了六款决策模型,同一系列按后缀区分尺寸,参数规模从不到十亿直到数百亿量级,权重公开发布,输入除文本外还能接收图像与视频,用途是给上层系统做判断。这里的具体型号名与参数边界一律只作转述,各款之间的精度差与延迟差没有任何公开依据,本篇不做推断。
本篇只接这一件事暴露出来的工程位置:当我们讨论模型路由时,讨论的几乎都是”路由器怎么选别人”,很少讨论”谁来选路由器”。可决策模型一旦上线,它就站在每一个请求的关键路径上,它的开销是乘法而不是加法。它每被调用一次,后面那条链路的全部成本才被触发一次;它慢一步,链路里每一个请求都跟着慢一步;它判断错一次,后面所有花出去的钱都花在了错误的分支上。所以路由模型自己的部署选型,要用和上层模型一样的严肃程度来做。
这件事在洹拓的交付里是真实的开销:给企业客户搭智能体入口时,路由层的推理实例往往是独占的,因为共享池的抖动会直接反映到用户感知上。独占就意味着一笔独立预算。
二、四笔预算:先定义再量法
我们把路由模型的选型约束固定为四笔预算,每一笔都要有明确的测量方法,不接受”轻量级”这种描述。
第一笔是首包延迟,指从请求进来到路由决策产出并可以开始下游调用之间的时间。测量点在网关侧,不要从客户端取,客户端里混着网络与序列化。它的组成至少包括输入预处理、模型前向、决策解析三段,三段要分别打点,否则只知道慢不知道慢在哪。第二笔是显存占用,包含权重、运行时开销与 KV 缓存三部分,第三部分随输入长度增长,多模态输入的编码结果也占在这里。要按峰值而不是加载完那一刻的读数记。第三笔是单请求成本,把路由层折算到每个请求上的钱,等于实例单位时间成本除以单位时间处理的请求数,这一笔决定了路由层能不能被放进低价业务里。第四笔是错误代价,这一笔最容易被跳过,因为它不是账单上的数,而是返工、投诉与质量事故。
前一笔是钱,后一笔也是钱,但性质完全不同:前三笔可以通过换小模型单调地压下去,第四笔往往相反,模型越小判断越不稳。四笔预算放在一张表上看,才知道”选哪一档”其实是在挑一个可以接受的组合。
三、六个尺寸不等于六个可选档位
宣传上给了六档,实际部署时能选的组合比这多得多,因为同一个尺寸在不同量化位宽与不同批处理设置下的表现差异,可能大于相邻两个尺寸之间的差异。
量化把权重压小,显存占用下降、单实例成本下降,同时数值行为发生变化,边界样本上的判断可能翻转。批处理提高单位时间处理的请求数,摊薄单请求成本,代价是每个请求进入批次的等待变长,首包延迟的尾部被拉高。这两个维度对同一尺寸是自由组合的,所以我们记账时从来不写”某尺寸模型”,写”某尺寸加某量化加某批量上限”,这三项合起来才算一个档位。换句话说,一个尺寸档位在纸上给你六个选项,落到部署上给你几十个。
多模态输入带来第三层隐藏成本,也是这批模型值得单独讨论的地方。图像与视频要先经过预处理与编码,这一段不在语言模型的时间线里,但完全在用户的时间线上;视频还要按帧采样,帧数直接决定这段开销的量级。更麻烦的是缓存:路由层通常靠缓存历史上下文来省时间,视觉输入的表示一旦进入上下文,任何一张图的更换都可能让整段缓存失效,命中率的分布就不再稳定。我们的处理是把多模态请求单独立一条预算线,不与纯文本共用阈值,因为共用会让文本侧的数字被少数图像请求拖花。
四、判断错的两种方向,代价不对称
决策模型的错误不是同一种错误。误判为复杂、升级到昂贵后端,代价是多花的钱;误判为简单、降级到小模型,代价是一份不合格的输出交到用户手里,后面是返工与信任损失。这两件事的金额可能接近,但性质不对等,所以不能用一个对称的准确率指标来选模型。
我们的做法是阈值分档加抽检兜底。置信度不只是一个数,要按业务重要度切出三段:高于上限直接走既定分支;落在中间带时选择代价更低的那一侧,重要业务宁可多花钱也不敢降档;低于下限则进入人工或规则兜底,不交给模型决定。中间带的宽度就是为不对称性留出来的,业务越敏感留得越宽。
抽检要按分支分池做,而不是按总量抽。降级分支的抽检频率要高于升级分支,因为它的错误更贵也更难被发现——升级错了账单上看得见,降级错了要靠用户投诉才看得见。抽检结果回流到阈值调整,形成一条固定的操作:调阈值需要看抽检通过率与成本两条线,只看一条必然会调错方向。
五、核心交付物:选型矩阵与可观测字段
下面这张矩阵是我们给客户搭路由层时先填的表,行是六类工况,列是四笔预算再加一项部署形态要求,交叉处填可接受线而不是填模型名。模型名是这张表填完之后才出现的结论。
| 工况 | 首包延迟可接受线 | 显存与单请求成本 | 错误代价与阈值策略 | 部署形态要求 |
|---|---|---|---|---|
| 单轮短问答 | 尾部分位敏感,卡得最紧 | 独占小实例,成本必须低于下游 | 错误代价低,可激进降档 | 常驻,不允许冷启动 |
| 长上下文对话 | 可适当放宽,但需与下游分开看 | 缓存占用随长度增长,需单独预算 | 降档会破坏连贯性,中间带留宽 | 需按长度分池 |
| 多轮工具链 | 每轮都要付出路由开销,累积显著 | 每请求触发下游全部成本 | 一次误判放大整条链路,优先稳定 | 决策要可重放 |
| 代码与结构化生成 | 可放宽,用户容忍度高 | 单请求成本高,路由层必须便宜 | 降档导致不可编译,宁升不降 | 结果需校验器 |
| 图像与视频输入 | 含预处理与编码,需单列口径 | 视觉表示占用大,缓存易失效 | 判断错表现为答非所问,需人工抽检 | 与文本分池分预算 |
| 批量离线任务 | 不敏感,只看吞吐 | 用大批次摊薄,成本最优档 | 可事后重跑,允许激进降档 | 可共享实例 |
矩阵之后是可观测字段,这一组字段决定了能不能复盘。没有它们,路由层就是一个只做决定的黑盒,出了问题只能猜。每个请求最少落这八个字段:命中的规则或模型分支标识;当时的候选集,即这个请求本可以被派往哪些后端;决策置信度;是否落在中间带以及向哪一侧取整;降级原因,用一个枚举码而不是自由文本;输入模态与长度分档;最终花费;路由自身三段耗时。字段要随请求ID一起进日志系统,并且能被按上述任一维度聚合。
六、上线前的最小评测集与模型自己的更新回滚
最小评测集不需要大,但必须按业务分层抽样,三类样本一条都不能少:真实分布里的常见样本、刻意放进去的弃权样本(信息不足或超出能力范围,正确行为是转人工或走规则兜底)、以及跨模态样本(同一问题分别以文本和图像提出,看决策是否一致)。我们坚持弃权样本的存在,因为一个从不承认自己不确定、把一切都分派的决策模型,在生产上比一个偶尔弃权更难收拾。
决策模型自身的更新也要按发布物管理。权重来源要可追溯,记录仓库与版本标识,不接受”重新下载一次覆盖掉”这种操作;每次更新前留一份离线快照,包含权重、配置与 tokenizer,保证任何时候能一键退回;新版先影子运行,接收同一份线上流量但不生效,只把两版决策的差异写日志,影子期看的是分歧率与分歧样本落在哪一侧,不是看总分。分歧样本里凡是涉及降级方向的,全部人工过一遍。
四笔预算不是给厂商看的,是给自己算的。据公开报道里那六款尺寸,本身不构成选型结论;把它们放到上面这张矩阵里,填出自己的可接受线,才知道该用哪一档、该独占还是共享、该在哪个方向上把阈值收紧。这套动作的工时不多,比上线后再回头查路由层的账单要便宜得多。