7 Ways Your AI Agent Is Wasting Tokens (And What to Do Instead)
TL;DR · AI 摘要
7 Ways Your AI Agent Is Wasting Tokens And What to Do Instead - MachineLearningMastery.com 7 Ways Your AI Agent Is Wasti...
核心要点
- 主题聚焦:7 Ways Your AI Agent Is Wasting Tokens And What
- 来源:Machine Learning Mastery,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
7种你的AI代理正在浪费令牌的方式(以及应该怎么做) - MachineLearningMastery.com
7种你的AI代理正在浪费令牌的方式(以及应该怎么做)
作者:
Vinod Chugani
于
2026年10月30日
在
人工智能
0
分享
发布
在本文中,你将学习到生产级AI代理系统中常见的七种令牌浪费模式,以及针对每种模式的架构解决方案。
我们将涵盖的主题包括:
- 为什么将上下文窗口视为系统记录会增加成本和延迟,以及如何通过滑动窗口和语义摘要来解决这个问题。
- 为什么未压缩的工具结果、静态模式膨胀和天真的检索模式会悄无声息地消耗你的令牌预算。
- 如何使用熔断器、提示前缀、级联路由和受限输出格式来构建成本稳定的代理架构。
介绍
周末快速构建一个代理是一个问题。在第三个月防止其API账单飙升是另一个问题。代理架构的天真的方法——将每个用户消息、观察结果和内部响应追加到一个不断增长的数组中——使推理延迟呈二次方增长,每次调用时令牌成本线性增加。这种失败的根本原因在于将上下文窗口视为系统记录。
许多工程师在早期阶段会忽略的一个区别是:上下文是每次请求通过网络发送的临时令牌负载。状态是代理进度的持久化、序列化表示。将两者混淆会导致在每次推理调用时都为数据库读取付费。
本教程将涵盖生产级代理系统中七种最常见且代价高昂的令牌浪费模式,以及针对每种模式的架构解决方案。
1. 上下文窗口累积(只追加陷阱)
代理设计中最普遍的错误是将提示数组视为数据库。每次交互都会被追加——用户消息、工具观察结果、中间推理和代理响应。到第20次交互时,代理在每次请求中都会重新阅读其全部操作历史,为此付出呈二次方增长的注意力成本。
解决方案:实现带有语义滚动摘要的滑动上下文窗口。只按原样传递最后N次交互。将较旧的对话回合压缩成密集的背景摘要,并将结构化代理状态存储到SQLite或Redis等确定性存储中,而不是将这些值重新注入提示中。
注意事项:摘要本质上是有损的。如果代理需要会话早期的精确UUID、加密哈希或代码片段,语义压缩会产生幻觉。将此模式与严格的键值查找工具配对,当需要精确性时检索精确字符串。
使用场景:这应该是任何长期对话代理或预期超过五到十次交互的迭代推理循环的默认架构。
2. 未压缩的工具结果摄入
当代理调用第三方API时,通常会收到专为机器设计的深度嵌套JSON负载,而不是语言模型。将这些原始响应转储到观察上下文中是令牌浪费中最可避免的来源之一。单个Stripe网络钩子负载或冗长的AWS API响应可能消耗数千个令牌,其中大部分内容对代理的推理毫无意义。
解决方案:在工具执行与上下文注入之间插入一个中间件转换层。该层会剥离空值、过滤非必要键,并将深层JSON重新格式化为紧凑的YAML或结构化Markdown。对于日志,可以在模型接触数据前执行确定性预处理,剥离时间戳、线程ID和模板内容。
风险:激进的过滤有时会移除必要的元数据,例如分页游标。如果代理需要遍历结果列表,剥离next_token字段以节省少量token会导致整个检索循环静默失效。
使用场景:在集成Stripe、Jira、AWS等返回机器优化型冗长响应的第三方API时。
3. 检索碎片化与"搜索即转储"模式
在编码代理和RAG密集型系统中,常见模式是使用原始文本匹配查找相关内容,然后将整个文件转储到上下文窗口。代理需要一个函数,协调器就会检索该函数所在的整个4000行文件。这相当于为了回答一个问题而阅读整本百科全书。
解决方案:转向分块式AST感知(抽象语法树)检索。索引时将代码解析为实时调用图。当代理搜索函数时,协调器查询索引,仅返回精确的函数签名、文档字符串和直接结构依赖项。这只需要300个token而非整个文件。Tree-sitter等库可轻松构建语言感知解析器,准确提取这些结构单元。
风险:图感知检索需要持续的异步索引流水线。如果向量索引落后于仓库主分支,代理将基于过时状态进行推理,尝试调用已不存在的函数,并在处理由此产生的错误时消耗大量输出token。
使用场景:构建编码代理、RAG密集型支持机器人,或任何需要与快速变化的结构化代码库交互的系统。
4. 静态工具模式膨胀
大多数代理框架一次性定义工具模式并在每次LLM调用时注入所有模式。对于小型工具注册表这是无害的。但对于拥有30或50个工具的代理,模型在每次请求时都会读取数千个token的模式定义——包括与当前任务阶段完全无关的工具模式。
解决方案:实现由有限状态机控制的上下文感知工具剪枝。代理的当前操作状态决定注入哪些工具。处于"发现"状态的代理仅接收搜索和读取工具。当状态转移到"执行"时,仅接收修改和写入工具。无关模式永远不会消耗token。
风险:动态工具模式会干扰提示缓存。每次工具子集数组变化时,LLM提供方必须重新计算受影响提示前缀的KV缓存,导致延迟增加和缓存命中折扣损失。这与第六部分的建议直接冲突。
使用场景:多代理架构或拥有大型工具注册表的单代理系统,当仅模式定义就超过上下文预算约1500个token时。
5. 无限制的思维链循环
自主代理可能会陷入僵局。工具调用失败后,代理会重试,但重试因相同的根本原因再次失败,代理会无限生成推理并持续尝试重试。如果没有硬性限制,单个陷入僵局的任务可能会消耗数万个输出令牌——而大多数提供商对输出令牌的计费费率高于输入令牌。
解决方案:在编排器层级实现熔断器机制。对工具调用失败设置严格的重试次数上限,并为每个操作设置输出令牌预算上限。当代理达到阈值时,编排器必须拦截循环,调用确定性回退方案,或升级至人工介入,而不是允许继续生成。LangChain 和 LlamaIndex 等框架提供了内置的重试和回调钩子,可作为此类熔断器逻辑的基础。
注意事项:熔断器可能会对真正复杂的任务产生误判。一个需要深度多步骤搜索的合法八步规划序列,可能在最终合成步骤前触发限制。调整重试阈值需要观察真实的代理追踪记录,而非提前猜测。
使用场景:这是任何生产环境中运行的自主循环的强制性防护措施。误判(任务终止)的成本几乎总是低于失控计费事件的成本。
6. 忽略键值缓存与提示前缀处理
LLM 提供商通过缓存提示前缀的键值表示,避免重复计算已处理内容的注意力机制。这能显著降低延迟,并在将节省成本传递给用户的服务商处实现实际成本降低。大多数代理通过在静态内容之前注入动态变量(时间戳、用户ID、短期记忆快照)到提示顶部,无意中破坏了这一机制。
解决方案:为每个请求构建严格的静态到动态渐变结构。将大量静态内容(系统提示、组织风格指南、持久化模式定义)置于请求的最顶部,绝不在静态内容之前注入动态变量。缓存边界应落在最长静态前缀的末尾。Anthropic 的提示缓存和 OpenAI 的提示缓存文档都介绍了如何构建请求以最大化其各自 API 的缓存命中率。
注意事项:并非所有服务商都支持键值缓存,且支持的服务商通常会设置 TTL(生存时间)——通常在 5 到 15 分钟之间,不同服务商差异较大。如果代理的思考周期较长或系统流量较低,缓存会过期,此时无论提示结构如何精心设计,都需要为前缀支付全额费用。需注意这与第 4 部分的矛盾:动态修剪工具模式会移动缓存边界并降低缓存命中率。
使用场景:需要每小时执行数千次相同大型系统提示的高吞吐无状态代理。在低于此规模的场景中,缓存未命中风险可能超过架构开销。
7. 单体路由(使用前沿模型处理简单任务)
前沿模型(如 Opus 级或 GPT-4 级模型)相比小型替代方案价格显著高昂。用它们来解析基础 JSON、分类意图或总结简单应用日志,相当于雇佣高级架构师处理文书工作。任务虽然能完成,但随着规模扩大,成本与输出的比值会急剧恶化。
解决方案:实现级联的LLM路由器。使用快速且小型的模型(如Haiku级别或Gemini Flash级别)进行意图分类、结构化数据提取和日志摘要。仅在分类后的意图明确要求复杂多步骤推理时,才将请求路由到前沿模型。像LiteLLM这样的开源路由库,可帮助实现与提供商无关的路由逻辑,无需为每个模型重新编写API调用框架。
关键问题:当面对复杂或重叠的工具模式时,小型模型容易出现脆性故障。如果分类层因推理能力不足而错误路由请求,会将无效参数发送到前沿模型,导致立即失败,并使该次调用的令牌消耗翻倍。路由边界必须设置在任务复杂性真正分界的位置。
适用场景:输入可预测且高流量的系统,其中结构化子任务可以与核心推理引擎清晰解耦。如果输入高度可变或意图边界模糊,级联路由引入的故障点将多于节省的资源。
值得关注的两个额外模式
上述七项内容涵盖了最常见的故障模式,但有两个未被多数清单涵盖的模式也值得关注。
通过无约束生成导致的输出令牌浪费。上述列表主要关注输入令牌浪费,但输出令牌通常按更高费率计费。当代理被要求提取结构化数据(如姓名和邮箱)但未使用约束输出格式时,模型通常会在实际值前生成对话式前缀。经过数千次调用后,这种浪费会累积。在需要结构化数据而非文本的场景中,使用提供商原生的结构化输出模式或工具使用模式,可完全消除此类浪费。
冗余上下文注入。一种令人惊讶的常见生产模式是将相同信息多次注入:一次在系统提示中,再次作为最近用户轮次注入的提醒,偶尔第三次作为工具结果确认。每次复制都会消耗令牌,当某个副本更新而其他副本未更新时,代理必须协调冲突版本。对每个事实进行审计,确保其只有一个规范注入点,通常可在不损失任务性能的前提下,减少10-20%的总输入令牌。
结论
令牌优化不是为了节省成本,而是为了系统稳定性。臃肿的上下文负载会直接导致更高的推理延迟,以及检索失败和幻觉的更大风险区域。将上下文窗口限制为任务所需的最小范围,可以强制更确定的行为,减少协调器超时,并缩小系统的故障范围。
上述模式并非相互排斥,它们的权衡也并非对立。第四部分和第六部分的方案方向相反:动态工具修剪节省令牌但损害缓存效率,而静态前缀最大化缓存命中但保留无关模式可见。正确的平衡取决于工具注册表规模、请求量以及提供商的缓存实现。真实的生产追踪数据是唯一可靠的方式,用于确定在何处划出界限。
在生产环境运行第100天时,令牌浪费问题将从计费问题转变为数据质量问题。向量存储中会累积过时的事实,情景记忆会被过时的API文档填充,智能体则会陷入推理循环,试图调和幻觉状态与生产环境现实之间的矛盾。第一周做出的架构决策会在两个方向上产生复利效应。
更多相关内容
- 搜索请求中24,723个令牌中究竟包含什么…
- 数据泄露如何以三种微妙方式毁坏你的模型(以及…
- 三种加速并提升XGBoost模型性能的方法
- 三种增强AI模型可解释性的方法
- 五种关键方式:LLM如何为你的机器学习系统注入强大力量…
- 智能体还是工作流?一个实用测试帮你判断何时使用…