Agent 成本为何失控?模型路由、缓存与预算护栏
内容摘要:Agent 的成本 = 循环步数 × 每步 Token × 单价,且随非确定性波动。本章讲成本模型与主要优化手段:模型选择与路由、降级、缓存、批处理、上下文瘦身,以及硬性预算护栏。 难度:进阶 |前置知识:05 上下文工程、08 Agent Loop
常见误区
换成更便宜的模型就能解决成本问题;单次调用价格低,Agent 总成本自然也低。
先给结论
Agent 成本由循环步数、每步上下文、输出长度、重试和工具等待共同决定。优化顺序应先减少无效步骤和上下文,再做模型路由、缓存、批处理与降级,最后用硬预算阻止尾部失控。
带着这三个问题阅读:
- 单任务成本和端到端延迟由哪些可观测变量组成?
- 哪些内容可以缓存,哪些因权限或时效不能复用?
- 预算超限时系统应如何降级、停止或转人工?
一、先建成本模型
python
def task_cost(steps: int, avg_in: int, avg_out: int,
price_in_per_1k: float, price_out_per_1k: float) -> float:
"""粗略估算单任务成本(美元)。价格以厂商为准,[待验证]。"""
return steps * (avg_in/1000*price_in_per_1k + avg_out/1000*price_out_per_1k)
print(round(task_cost(4, 1500, 300, 0.15, 0.60), 4)) # 示例数值先测量再优化:用 Trace 的 Token 统计(17)找出成本大头,通常是"上下文太长"或"步数太多"。
二、模型选择与路由
不是所有步骤都要最贵的模型。按难度路由:
- 分类、抽取、格式化 → 小模型;复杂规划/生成 → 大模型。
- 路由器本身要便宜且可测(路由错误的代价见 08)。
三、降级(Fallback)
主模型超时/限流/超预算时,切换到备用模型或降级策略(更短输出、跳过反思)。降级要有明确触发条件与记录:
python
def chat_with_fallback(primary, backup, messages):
try:
return primary(messages)
except Exception:
return backup(messages) # 记录降级事件(17),便于监控四、缓存与批处理
- 前缀/提示缓存:稳定系统指令放前面,提高命中(05)。[待验证] 具体规则看厂商。
- 语义缓存:相似请求复用答案,注意多租户隔离与过期,防串号/过期。
- 检索缓存:热门 RAG 查询短期缓存。
- 批处理:离线 Embedding、批量评测走批处理接口,单价更低。
五、上下文瘦身
上下文长度是成本第一杠杆:只放本步所需(05)、压缩历史、限制 RAG 召回数、限制 max_tokens。
六、预算护栏(硬限制)
不能只靠"优化",要有硬上限兜底:单任务最大步数、最大 Token、最大费用;超限即停止并告警(08 的 budget_exceeded)。
七、失败路径
- 无预算上限 → 异常循环烧掉大额费用。
- 全用大模型 → 成本数倍且无必要。
- 语义缓存串号 → 返回他人/过期结果(安全 + 正确性事故)。
八、测试与验证
- 用评测集测"降级后质量下降多少",避免为省钱牺牲完成率(16)。
- 压测:并发下的延迟与限流表现。
九、安全与权限
十、性能与成本(本章即主题)
- 关注 P95 延迟而非平均;流式改善体验但不降总成本(03)。
十一、框架差异
- 各框架/网关(如 LiteLLM 类路由层)提供路由与降级;缓存能力各异。原则通用:测量→路由→缓存→护栏。
十二、关联章节
面试复述
Agent 优化不能只看模型单价,要看完整任务轨迹。先消除无效循环与冗余上下文,再按难度路由模型、谨慎缓存,并设置每任务步数、Token、费用和时间硬上限。
复述时先给结论,再补机制、适用边界和一个可验证指标;不要只罗列框架名称或产品功能。
迁移练习
选择一条真实轨迹,分别计算模型、工具等待和重试占比,提出三项优化并估算它们对成本、P95 延迟和质量的影响。
检索关键词
Agent 成本模型 模型路由 分级 模型降级 fallback 提示缓存 语义缓存 批处理 预算护栏
官方来源
- 各模型厂商价格/批处理/缓存文档(价格快变,务必以官方为准,
verified_at: 2026-09-07)。
