对于一家达到 Shopify 规模的商家助理来说,如果每天处理 1000 万次对话,在不做优化的情况下月度成本将高达 210 万美元;而经过优化,这一数字可压低至 45 万美元。这 78% 的差距并非源自算法层面的重大突破,而是得益于缓存、路由策略以及几项工程纪律——而大多数团队往往直到收到账单时才意识到这一点。
AI Agent 并非只是加了点步骤的聊天机器人。单一的用户请求会触发规划、工具筛选、执行、校验,以及频繁的重试循环——这消耗的 Token 大约是直接对话交互的 5 倍。一个运行 10 个循环的 ReAct 机制,其 Token 消耗量可能是单次处理的 50 倍。在 Frontier 模型的定价体系下,这种算法逻辑很快就会变成巨大的负债。
本文将深入探讨 Agent 成本的来源机制,并介绍那些真正能起作用、且带有数据支撑的具体优化技巧。
为什么 Agent 成本不同于聊天机器人
首先需要理解的是输出 Token 的溢价。在主流服务提供商中,输出 Token 的价格通常是输入 Token 的 3 到 8 倍,因为生成过程是串行的,而输入处理则是并行的。对于那些侧重于推理的模型,这一比例甚至达到了 8:1。当你的 Agent 产生冗长的工具调用响应、详细的推理链迹或长篇总结时,你实际上是在以溢价费率为每一个输出 Token 买单。
上下文长度进一步加剧了这一问题。由于注意力计算的二次方成本,处理 128K Token 的上下文成本大约是处理 8K 上下文的 64 倍。Agentic 系统自然会累积上下文:系统提示词、工具定义、对话历史、检索到的片段以及工具响应。每一轮对话,上下文都在增长。大多数团队在预演阶段会发现这一点:原本在简单测试中仅需 0.05 美元/次任务的 Agent,在面对真实文档库时,成本突然飙升至 1.50 美元。
最便宜与最昂贵模型选项之间的差距现在约为 60 倍。Gemini Flash-Lite 的价格约为每百万输入/输出 Token 0.075/0.30 美元,而 Frontier 推理模型则高达 15/60 美元。这种差距既是机遇,也是挑战——前提是你必须有意识地进行路由。
Prompt Caching:唾手可得的收益
Prompt 缓存的工作原理是复用先前请求中计算出的键值注意力张量,前提是新请求与之前的请求拥有共同的前缀。Anthropic 对缓存的输入 Token 提供 90% 的折扣(0.30 美元/M vs 3.00 美元/M),Google 提供 75% 的折扣,而 OpenAI 则在符合条件的请求上自动应用 50% 的折扣。
对于 Agentic 系统而言,其启示是显著的:你需要构建 Prompt,将静态内容置于首位。系统提示词、工具定义、少样本示例、策略文档——所有这些都应构成稳定的前缀。动态内容(即实际的用户消息、当前轮次检索到的上下文)则应置于末尾。这并非审美问题,而是直接决定了缓存是否生效。
Claude Code 在实践中实现了 92% 的缓存命中率,从而带来了 81% 的处理成本削减。固定的 10,000 Token 系统提示词在首次请求之后的成本几乎可以忽略不计。某客服应用将其产品目录从动态插入改为缓存前缀后,在未改变输出质量的情况下,API 账单每月减少了 12,000 美元。
除了降低成本,缓存还能削减延迟。当长前缀启用缓存时,平均响应延迟从 800ms 降至 350ms,因为模型跳过了对稳定部分的注意力矩阵重算。
工程层面的开销微乎其微:缓存窗口的 TTL(生存时间)范围从 5 分钟(Anthropic)到大约 1 小时(OpenAI)不等。对于服务重复用户会话的 Agent 来说,热缓存几乎始终可用。对于批处理管道,则应构建作业,使批次内的请求共享前缀。
Model Routing and Cascading:将成本与复杂度匹配
并非每个查询都需要 Frontier 模型。问题在于如何确定哪些需要——答案取决于三个维度:推理复杂度、质量敏感性和上下文长度。
在典型的生产级 Agentic 工作负载中,分布大致如下:
- 60% 的任务是直截了当的:提取、分类、格式化、模板化响应。这些在低于 1 美元/M 的模型上运行良好。
- 25% 需要中等程度的推理:多跳问答、代码生成、结构化分析。中端模型(0.80-4 美元/M)能很好地处理这些。
- 12% 涉及真正的复杂性:模糊的指令、长周期的规划、跨异构源的综合。高级模型在这里物有所值。
- 3% 需要 Frontier 级别的推理:新颖的问题、高风险决策、涌现行为。
实施良好的路由系统在典型的 Agent 部署中可实现 30-60% 的成本降低,而顶级实现甚至能达到 87%。
对于 Agent 系统,实用的模式是将编排与执行分离。在规划层使用昂贵的模型——它读取的是相对较短的任务描述并做出路由决策,因此其 Token 消耗是有限的。在执行步骤中使用廉价模型:总结、提取、格式转换、检索排序。由 Claude Haiku 执行工具调用,而 Sonnet 或 Opus 规划整体策略,这是一种常见且有效的分工。
模型级联更进一步:从最便宜的层级开始处理每个请求,根据标准(置信度、格式有效性、如果有检索来源则为事实基础)对响应进行评分,如果分数低于阈值则升级。级联带来的额外延迟通常是值得的——大多数请求在第一层完成,升级仅针对少数困难情况触发。
基于置信度的路由需要一些校准。如果你自己构建,logprob 熵是开源模型的一个可用信号。对于专有 API,你需要一个代理评估器(通常是一个较小、快速的模型,用于检查首次响应是否达到你的质量标准)。代理的额外成本通常不到路由节省费用的 5%。
Context Compression:精简输入内容
上下文中的每个 Token 都有直接成本。上下文压缩的做法是将上下文剥离至任务所需的最低限度。
滚动总结 是基准技术。与其传递完整的对话历史,不如每 N 轮(通常 5-10 轮)总结一次。总结向前传递;完整记录则被归档。这将上下文增长限制为随总结频率线性增长,而不是随轮次线性增长。权衡在于早期轮次的细粒度细节将不可用——这对大多数用例是可以接受的,但对于需要记住每个决策的代码审查 Agent 来说则不可。
工具输出遮蔽 经常被忽视。当 Agent 调用网页抓取器、API 或数据库查询时,原始响应通常包含与当前任务无关的标头、元数据和字段。在插入上下文之前剥离这些内容,可以将工具输出 Token 减少 60-80%。为每种工具类型编写后处理器,仅提取模型实际需要的字段。
学习型压缩 工具如 LLMLingua 使用较小的模型来压缩 Prompt,识别并删除低信息 Token。据报道,客服 Prompt 从 800 Token 减少到 40 Token(减少 95%),同时保持可接受的准确性。问题是:压缩本身需要 LLM 调用,增加了延迟和 Token 成本。只有当压缩后的 Prompt 在多个请求中复用,或者压缩器的成本远低于主模型时,这笔账才算得过来。
检索的相关性过滤 很简单:不要传递所有检索到的块,只传递那些超过余弦相似度阈值的块。将此阈值从 0.7 提高到 0.8,通常会将检索到的 Token 减少 40-60%,同时降低原本会稀释模型注意力的噪声。
Semantic Caching:彻底消除调用
语义缓存根据输入的嵌入索引存储 LLM 响应。当新查询到达时,将其嵌入与缓存的查询进行比较——如果相似度超过阈值,则返回缓存的响应而无需 API 调用。
在典型生产工作负载中,大约 31% 的 LLM 查询表现出足够高的语义相似度,可从中受益。缓存命中在毫秒级内返回,而 API 调用需要秒级,且 API 费用为零。对于支持聊天机器人、FAQ 系统以及查询分布呈集群状的应用,语义缓存可以直接消除 20-40% 的 API 调用。
权衡是对新鲜度的敏感性。对于答案频繁变化的应用,陈旧是一种风险。根据你的内容领域的变化速度配置 TTL。对于静态知识库,激进的 TTL 是合适的。对于实时数据查询,则针对这些查询类型完全禁用语义缓存。
Hard Limits Are Not Optional:硬限制不可或缺
最便宜的优化方法是防止失控循环。有记录在案的生产事故:一个 Agent 在一个周末针对损坏的数据源发出了 847,000 次 API 调用,在账户被暂停前累积了 3,847 美元的费用。另一个例子:一个 Agent 在五分钟内调用了抓取工具 400 次,因为该工具返回“可能有更多结果”——Agent 将其解释为继续获取的邀请。
每个 Agent 在部署前都需要设置三个硬限制:
- 每个任务的最大迭代次数。 将其设置为预期平均值的 2-3 倍。大多数 Agent 框架(LangGraph, AutoGen, CrewAI)都将此作为一等配置暴露出来。
- 每个任务的最大 Token 支出。 设置为预演环境中观察到的 P95 支出的 3 倍。将其实现为中间件,在每次模型调用前检查累积成本。
- 最大墙钟时间。 捕获那些通过反复进行快速、廉价调用而保持在 Token 预算以下的无限循环。
模糊的工具反馈是失控循环最常见的原因。如果工具可以返回被解释为“继续”的信号,Agent 就会继续下去。在工具输出模式中要明确:包含 is_complete 布尔值或 next_action_required 字段,而不是依赖模型推断终止。
FinOps:上线前所需的监控手段
成本的可视性是闭环的关键。没有它,优化只是猜测,异常则是惊喜。
最小可行的监控层应跟踪:
- 每次追踪的成本。 每次 Agent 运行都应向其可观测性系统发出总成本(输入 Token × 价格 + 输出 Token × 价格,按模型层级细分)。
- 缓存命中率。 如果此值低于基线,说明你的 Prompt 结构或请求模式发生了变化。
- 输出 Token 比率。 输出 Token /(输入 + 输出)Token。比率上升通常意味着你的 Agent 过于冗长——通常可以通过在系统提示词中添加“简洁”来修复(这通常会减少 15-25% 的输出 Token)。
- 每次完成的步数。 步数增加表明任务变难或 Agent 卡住了。无论哪种情况都值得调查。
像 Langfuse、Helicone 和 Portkey 这样的工具在 API 网关级别提供了每个请求的成本跟踪和预算控制。对于异常检测,设置相对于滚动基线的 2σ 偏差支出警报——如果你关注这个信号,大多数成本事故在几分钟内就能检测到。
同一 Agent 在未优化和优化良好的部署之间,成本差异可能高达 30-200 倍。这是目前大多数 AI 团队能获得的最高 ROI 的工程工作。
实操优先级顺序
如果你从零开始,请按以下顺序应用这些技术,达到成本目标时即可停止:
- Prompt 缓存。 如果你的框架支持,无需更改代码。将静态内容移至前缀。立即见效。
- 硬限制。 防止导致其他一切都无关紧要的失控事件带来的尾部风险。
- 输出 Token 控制。 在系统提示词中添加“简洁回应”。监控输出 Token 比率并观察其下降。
- 工具输出遮蔽。 为你最高频的工具编写后处理器。
- 模型路由。 按复杂度对任务进行分类并路由到适当的层级。从简单的基于规则的分类器开始;如果量级证明合理,再升级为学习型路由器。
- 上下文压缩。 为长时间运行的会话实施滚动总结。
- 语义缓存。 如果你的查询分布有足够的聚类,则添加此项。
Agentic 系统默认成本与经过良好工程化后的成本之间的差距并非微不足道。这正是项目能否上线、或是在预算审核中被砍掉的区别所在。