Agent AtlasAI Agent 知识库
05.02工程化 · Engineering

模型选型与成本控制

能力、延迟、价格、上下文、工具调用与部署合规:给 Agent 选模型的六维评估法和省钱手段。

选模型不是选「最强」,而是选「在你的任务上,单位成本能买到多少成功率」。

六个维度

维度要问的问题怎么测
能力在你的任务上成功率多少?自己的黄金集,不看通用榜单
工具调用选对工具、填对参数的比例?工具选择测试 + 参数校验
指令遵循能否稳定遵守格式与禁止事项?结构化输出通过率
长上下文关键信息在中间时还能找到吗?位置扰动测试
延迟TTFT、输出速度、P95?真实网络下压测
成本与合规每任务多少钱?数据能否出境?账单 + 合规审查

通用榜单(MMLU、GPQA、SWE-bench 等)只能做初筛。你的任务分布、工具集、提示风格都会改变排名。

模型分层

图 1 · 按任务难度分层
小模型分类、抽取、改写、路由
快、便宜
→
通用模型多数工具调用、草拟、问答
→
推理模型复杂规划、难题、终审
慢、贵
不是所有步骤都需要最强模型。把预算花在真正影响结果的节点。

一个典型 Agent 的模型分配:

text
输入分类 / 路由          → 小模型
查询改写 / 抽取          → 小模型
工具调用与多步执行        → 通用模型
复杂规划 / 难题 / 最终审查 → 推理模型
Embedding / 重排         → 专用模型

用路由和级联省钱

路由:先判断任务类型,再选模型。

python
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

级联:先用便宜模型,置信度低再升级。

python
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 万次任务:

text
输入:5 × 8,000 × 10,000 = 400M token/天
输出:5 × 500 × 10,000   = 25M token/天

如果输入单价是 2 元/百万 token、输出 8 元/百万:

text
输入成本 800 元/天
输出成本 200 元/天
合计     1,000 元/天 ≈ 3 万元/月

现在做三件事:

  • 提示缓存命中 60% 输入 → 输入成本降到 320 元;
  • 路由让 70% 的步骤走便宜 4 倍的小模型 → 再降到约 150 元;
  • 工具结果裁剪让输入减少 30% → 约 105 元。

总成本可能从 1,000 元降到 300 元出头。不是靠换一个更便宜的模型,而是靠结构。

先测「每任务成本」,而不是「每百万 token 价格」

单价低但步数多、输出长,总成本可能更高。把成本归一到「完成一个任务的费用」,才能比较。

延迟:用户感知的是整条链路

text
总延迟 = 排队 + 首 token + 输出 + 工具 + 重试

优化顺序:

  1. 流式输出,先给反馈;
  2. 并行独立工具;
  3. 减少步数(更好的提示、更少的工具);
  4. 路由到更快的模型;
  5. 缓存;
  6. 异步化长任务。

一个常见误判:为了降低延迟换小模型,结果它需要更多步、更多重试,总延迟反而更高。要测端到端 P95。

合规与部署

  • 数据能否出境?
  • 是否支持私有化/专属实例?
  • 是否有零数据保留选项?
  • 日志保留多久?
  • 是否满足行业监管(金融、医疗)?
  • 供应商锁定与退出成本?

这些问题往往比模型分数更能决定选型。

多供应商抽象

不要把模型调用散落在业务代码里。做一个薄封装:

python
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 字段。

不要强行统一所有能力(例如各家推理参数不同),保留提供商特有选项。

什么时候该换模型

  • 新模型在你的黄金集上显著更好,且成本可接受;
  • 当前模型在关键能力上有硬伤(工具调用、长上下文、语言);
  • 延迟/合规要求变化;
  • 供应商不稳定或涨价。

换模型时:

  1. 跑完整评估集,不只看几个例子;
  2. 对比通过率、步数、成本、P95;
  3. 检查提示是否需要调整(新模型可能更听指令,也可能更啰嗦);
  4. 灰度 5%–10% 流量;
  5. 保留回滚。

反模式

只看清单价格

便宜模型可能多花 3 步,总成本更高。

所有步骤用最强模型

分类、抽取、改写用推理模型,是纯浪费。

用公开榜单代替自己的评估

榜单任务与你的业务分布差异很大。没有黄金集,就无法选型。

忽略输出 token

输入便宜、输出贵是常态。让模型少说废话,比换模型更有效。

频繁换模型

每次换都要重跑评估、调提示、观察线上。没有明确收益不要动。

检查清单

  • 有 50+ 条业务黄金集
  • 按任务层级分配模型,而不是一刀切
  • 提示前缀稳定,缓存命中率有监控
  • 有路由/级联,且有质量兜底
  • 成本按「每任务」统计
  • 延迟看 P95,不只看平均
  • 合规与数据驻留已确认
  • 模型调用有统一封装,可切换
  • 换模型有灰度与回滚

小结

  • 选模型看业务成功率、工具调用、指令遵循、长上下文、延迟、成本合规。
  • 分层与路由是最大的成本杠杆,前提是路由可靠。
  • 成本要按任务归一,延迟要看端到端 P95。
  • 用统一封装降低锁定,换模型必须跑完整评估。

下一篇讲如何知道 Agent「到底行不行」:评估体系。

读完了?进度会保存在本地浏览器。
内容会持续修订。发现错误或想补充,欢迎反馈。 遇到问题?查排查手册 →