选模型不是选「最强」,而是选「在你的任务上,单位成本能买到多少成功率」。
六个维度
| 维度 | 要问的问题 | 怎么测 |
|---|---|---|
| 能力 | 在你的任务上成功率多少? | 自己的黄金集,不看通用榜单 |
| 工具调用 | 选对工具、填对参数的比例? | 工具选择测试 + 参数校验 |
| 指令遵循 | 能否稳定遵守格式与禁止事项? | 结构化输出通过率 |
| 长上下文 | 关键信息在中间时还能找到吗? | 位置扰动测试 |
| 延迟 | TTFT、输出速度、P95? | 真实网络下压测 |
| 成本与合规 | 每任务多少钱?数据能否出境? | 账单 + 合规审查 |
通用榜单(MMLU、GPQA、SWE-bench 等)只能做初筛。你的任务分布、工具集、提示风格都会改变排名。
模型分层
快、便宜
慢、贵
一个典型 Agent 的模型分配:
输入分类 / 路由 → 小模型
查询改写 / 抽取 → 小模型
工具调用与多步执行 → 通用模型
复杂规划 / 难题 / 最终审查 → 推理模型
Embedding / 重排 → 专用模型用路由和级联省钱
路由:先判断任务类型,再选模型。
def choose_model(task):
if task.kind in {"classify", "extract", "rewrite"}:
return SMALL
if task.difficulty == "hard" or task.requires_planning:
return REASONING
return GENERAL级联:先用便宜模型,置信度低再升级。
answer, confidence = small_model(task)
if confidence < 0.7:
answer = large_model(task, draft=answer)级联的关键是置信度要校准。模型自报的置信度往往偏高,可以用:
- 多次采样的一致性;
- 结构化输出里的
confidence+ 历史校准曲线; - 规则检查(引用是否齐全、格式是否合法);
- 小模型判断「这个问题是否需要更强模型」。
成本的七个杠杆
| 手段 | 典型节省 | 代价 |
|---|---|---|
| 提示缓存 | 30%–70% 输入成本 | 前缀必须稳定 |
| 模型路由 | 40%–80% | 路由错误会伤质量 |
| 上下文裁剪 | 20%–60% | 可能丢信息 |
| 输出长度限制 | 10%–40% | 需要更精炼的提示 |
| 批处理 | 20%–50% | 非实时 |
| 结果缓存 | 视重复率 | 需要失效策略 |
| 工具结果摘要 | 10%–30% | 可能丢细节 |
最容易被忽略的是提示缓存。把系统提示、工具定义、示例放在最前面,且不要每次插入时间戳,能显著提高命中率。
算一笔账
假设某任务平均 5 步,每步输入 8k token、输出 500 token,每天 1 万次任务:
输入:5 × 8,000 × 10,000 = 400M token/天
输出:5 × 500 × 10,000 = 25M token/天如果输入单价是 2 元/百万 token、输出 8 元/百万:
输入成本 800 元/天
输出成本 200 元/天
合计 1,000 元/天 ≈ 3 万元/月现在做三件事:
- 提示缓存命中 60% 输入 → 输入成本降到 320 元;
- 路由让 70% 的步骤走便宜 4 倍的小模型 → 再降到约 150 元;
- 工具结果裁剪让输入减少 30% → 约 105 元。
总成本可能从 1,000 元降到 300 元出头。不是靠换一个更便宜的模型,而是靠结构。
单价低但步数多、输出长,总成本可能更高。把成本归一到「完成一个任务的费用」,才能比较。
延迟:用户感知的是整条链路
总延迟 = 排队 + 首 token + 输出 + 工具 + 重试优化顺序:
- 流式输出,先给反馈;
- 并行独立工具;
- 减少步数(更好的提示、更少的工具);
- 路由到更快的模型;
- 缓存;
- 异步化长任务。
一个常见误判:为了降低延迟换小模型,结果它需要更多步、更多重试,总延迟反而更高。要测端到端 P95。
合规与部署
- 数据能否出境?
- 是否支持私有化/专属实例?
- 是否有零数据保留选项?
- 日志保留多久?
- 是否满足行业监管(金融、医疗)?
- 供应商锁定与退出成本?
这些问题往往比模型分数更能决定选型。
多供应商抽象
不要把模型调用散落在业务代码里。做一个薄封装:
class LLM:
def complete(self, messages, tools=None, **opts) -> Response: ...
def stream(self, messages, **opts) -> Iterator[Event]: ...
class OpenAIProvider(LLM): ...
class AnthropicProvider(LLM): ...
class QwenProvider(LLM): ...统一的东西:
- 消息格式;
- 工具 Schema;
- 错误类型(超时、限流、内容拒绝);
- token 统计;
- trace 字段。
不要强行统一所有能力(例如各家推理参数不同),保留提供商特有选项。
什么时候该换模型
- 新模型在你的黄金集上显著更好,且成本可接受;
- 当前模型在关键能力上有硬伤(工具调用、长上下文、语言);
- 延迟/合规要求变化;
- 供应商不稳定或涨价。
换模型时:
- 跑完整评估集,不只看几个例子;
- 对比通过率、步数、成本、P95;
- 检查提示是否需要调整(新模型可能更听指令,也可能更啰嗦);
- 灰度 5%–10% 流量;
- 保留回滚。
反模式
便宜模型可能多花 3 步,总成本更高。
分类、抽取、改写用推理模型,是纯浪费。
榜单任务与你的业务分布差异很大。没有黄金集,就无法选型。
输入便宜、输出贵是常态。让模型少说废话,比换模型更有效。
每次换都要重跑评估、调提示、观察线上。没有明确收益不要动。
检查清单
- 有 50+ 条业务黄金集
- 按任务层级分配模型,而不是一刀切
- 提示前缀稳定,缓存命中率有监控
- 有路由/级联,且有质量兜底
- 成本按「每任务」统计
- 延迟看 P95,不只看平均
- 合规与数据驻留已确认
- 模型调用有统一封装,可切换
- 换模型有灰度与回滚
小结
- 选模型看业务成功率、工具调用、指令遵循、长上下文、延迟、成本合规。
- 分层与路由是最大的成本杠杆,前提是路由可靠。
- 成本要按任务归一,延迟要看端到端 P95。
- 用统一封装降低锁定,换模型必须跑完整评估。
下一篇讲如何知道 Agent「到底行不行」:评估体系。