摘要:Agent 每跑一轮,账单都在涨——但钱具体花在哪?系统提示、工具定义、历史消息、检索注入、模型输出,每一部分都占多少?本文给出上下文成本的拆分口径、监控指标与优化手段(缓存、压缩、裁剪),并说明怎么用"每轮对话成本"看板让成本可见、可控。
做过 Agent 的人都有体会:模型输出可能只占账单的一小部分,真正的大头是"每次请求都要重算的上下文"。多轮对话里历史消息不断累积,工具调用把一堆返回结果塞回上下文,检索系统再注入几段文档——一轮比一轮贵。而很多团队直到月底看账单,才发现成本翻了几倍。
结论:上下文成本 = 输入令牌(系统提示 + 工具定义 + 历史消息 + 检索注入)+ 输出令牌 + 缓存读写。其中历史消息累积是最容易被忽视、增长最快的部分。监控闭环四步:记录每轮令牌消耗 → 拆分成本构成 → 缓存复用 → 压缩裁剪。官方数据表明,提示缓存命中后缓存读取价格仅为正常输入价的 0.1 倍(省约 90%),是立竿见影的降本手段。
一、成本构成:钱到底花在哪
| 构成 | 特点 | 成本趋势 |
|---|---|---|
| 系统提示与工具定义 | 每次请求都带,几乎不变 | 固定,但占比随轮次稀释 |
| 历史消息累积 | 每轮新增,全部回传 | 随对话轮次线性膨胀,占比最大 |
| 检索注入文档 | 按需注入,可能重复 | 与检索策略强相关 |
| 模型输出 | 唯一"产生价值"的部分 | 通常占比最小 |
为什么历史消息是膨胀元凶:大多数实现把每轮对话的完整消息数组原样回传,10 轮对话后历史可能占输入令牌的 80% 以上,其中大量是已过时、已总结、已无用的内容。
二、监控指标:先让成本可见
在请求日志里为每次调用记录以下字段,成本即可量化:
| 指标 | 口径 | 关注点 |
|---|---|---|
| 输入令牌数 | 每次请求的输入总量 | 按会话轮次画曲线,看膨胀速率 |
| 输出令牌数 | 模型生成量 | 异常高输出排查循环生成 |
| 构成拆分 | 提示/历史/检索/工具各占多少 | 定位增长源头 |
| 缓存命中率 | 命中缓存前缀的比例 | 命中率低说明前缀不稳定 |
| 单轮成本 | 令牌 × 单价折算 | 按用户/会话维度聚合,找成本大户 |
三、优化三板斧:缓存、压缩、裁剪
1. 缓存复用(见效最快)。Anthropic 官方 Prompt Caching 文档与公告显示:缓存命中时,缓存读取价格仅为正常输入价格的 0.1 倍,即省约 90%;长提示的延迟可降低约 85%。代价是写入缓存更贵(5 分钟 TTL 为 1.25 倍、1 小时 TTL 为 2.0 倍输入价),因此适合"前缀稳定、复用频繁"的场景——系统提示、工具定义、固定知识库正是典型。
2. 历史压缩。对话超过 N 轮后,把早期消息用"摘要 + 关键事实"替换,保留最近 M 轮原文;检索结果做去重与截断,只保留相关段落。
3. 裁剪与分层。工具返回结果按需截断;不活跃会话过期清理;按"是否影响下一轮决策"决定哪些历史必须保留。
四、监控闭环:让成本持续可控
- 记录:每次调用落日志,带会话 ID、令牌构成、模型与单价;
- 拆分:按构成维度聚合,生成"每轮对话花在哪"报表;
- 优化:缓存命中率低的先做前缀固化;历史膨胀快的做压缩;
- 看板与告警:单会话成本、单用户成本、日均成本超阈值告警;
- 复盘:周度看成本趋势,与功能迭代挂钩,避免"功能上线、成本失控"。
踩坑记录:现象——上线缓存后账单不降反升。根因——缓存写入费(1.25 倍)被反复支付:对话前缀每次都在变(动态日期、随机指令),缓存几乎不命中,却每次都按写入价计费。排查证据——缓存命中率日志显示不足 10%,而前缀内容对比发现 80% 的请求前缀不一致。修复方式——把动态内容(时间、随机参数)移到缓存断点之后,固定前缀(系统提示、工具定义、固定知识)保持在断点之前,命中率提升到 60% 以上,成本下降约 50%。经验:缓存省钱的前提是"前缀稳定",先做前缀固化再做缓存,顺序不能反。
FAQ
Q1:上下文成本占 Agent 总成本多少?
A:视场景而定,多轮对话型 Agent 的输入令牌通常占 70% 以上,其中历史消息是最大头;单次问答型 Agent 输入占比低,输出占比高。
Q2:缓存命中率多少算健康?
A:前缀稳定的场景(固定系统提示 + 知识库)应做到 50% 以上;低于 30% 说明前缀不稳定,先固化前缀再谈缓存。
Q3:历史压缩会不会掉效果?
A:会有一点点,但有研究支持"关键信息放在上下文开头/结尾"更利于模型利用;压缩时把关键事实放开头,通常损失可控、收益显著。
Q4:工具返回结果要不要全量回传?
A:不要。工具返回往往冗余,只回传后续决策需要的字段并截断长度,可大幅降低注入令牌。
Q5:小团队有必要做成本监控吗?
A:有必要且成本很低——在日志里加三个字段(会话 ID、输入/输出令牌、构成标记)即可起步,先跑一个月看账单结构,再决定优化优先级。
总结
上下文成本不是"模型贵",而是"重复计算贵":同一份系统提示、工具定义、历史消息,每轮都被完整重算。监控的第一步是拆分——记录每轮令牌构成,让"花在哪"可见;优化的第一步是缓存——把稳定前缀固化,命中后省约 90%;再配合压缩与裁剪控制历史膨胀。四步闭环走通,Agent 的成本就从"月底惊吓"变成"周度可控"。
参考资料:Anthropic 官方公告《Prompt caching with Claude》(2024-08)与官方文档《Prompt caching》;
36 氪关于 Claude Code 提示缓存的报道(2026-08);
社区关于提示缓存命中率与成本折算的实践资料。