您的 LLM 驱动型智能体在演示中可能运行完美,但在几轮对话后,性能就会下降,账单也会随之飙升。隐藏的罪魁祸首并不是模型不稳定,而是“Token 漂移”(token drift)——即模型每次处理时提示词(prompt)的逐渐膨胀。

当每一次交互都向模型的输入上下文添加更多文本时,就会发生 Token 漂移。对话历史、工具 Schema、API 响应和检索到的文档不断堆积,导致后续的每一次调用都携带更大的负载。由于模型的处理时间和定价随输入 Token 数量增加而上升,成本会呈二次方增长,而非线性增长。

为什么问题出现在生产环境中,而非演示中

实际部署会保留所有内容:用户的每一次发言、工具的每一次输出、检索到的每一块知识。这种累积会一直隐藏起来,直到延迟激增和账单寄达。

Token 漂移的常见来源

  • 重复的转录文本 – 在提示词中保留每一条旧消息,而不是对其进行总结或丢弃。
  • 沉重的工具 Schema – 每一轮都发送庞大的工具能力 JSON 定义。
  • 臃肿的工具结果 – 包含完整的 API 响应或数据库行,其中包含的数据超过了智能体实际所需。
  • RAG 膨胀 – 检索增强生成 (RAG) 添加了大量文档块,其中一些已过时或无关紧要。
  • 重复的记忆 – 将摘要、状态对象和原始转录文本打包在一起,导致同一信息重复了三次。

这些因素都会增加 Token,但并不会提供新的推理能力,却会使提示词体积膨胀。

如何控制 Token 预算

1. 采用分层上下文设计

  • 稳定的指令 – 将系统提示词和安全规则置于顶部,并对其进行引用,而不是每一轮都重新发送。
  • 结构化状态 – 存储目标、决策和标识符的紧凑表示,以便智能体快速读取。
  • 压缩的历史记录 – 将较早的对话轮次总结成简短、人类可读的段落,仅在达到阈值时进行更新。
  • 最近的轮次 – 原封不动地包含最后几条消息,以保持连贯性。

将固定文本与可总结的内容分离,可以防止您一遍又一遍地重新发送相同的词汇。

2. 精简工具输出

  • 仅提取智能体实际使用的字段;丢弃冗长的描述。
  • 用简洁的摘要或引用 ID 替换庞大的结果,并将完整负载存储在数据库、缓存或 Blob 存储中。
  • 当工具返回列表时,仅发送对当前决策重要的前 N 个项目。

3. 应用智能总结

  • 跳过每一轮后的总结;额外的处理会增加开销。
  • 仅当旧轮次的累积 Token 计数超过预设限制时,才刷新摘要。
  • 将关键事实(ID、金额、时间戳)保存在结构化存储中,而不是嵌入在文本中,从而保持摘要简短。

4. 追踪正确的指标

  • 记录每次模型调用的 Token 使用情况,而不仅仅是每次用户请求。这能揭示输入端隐藏的增长。
  • 监控每一轮增加的输入 Token 数量;突然的跳跃意味着找到了漂移源。
  • 将缓存的 Token(从之前的调用中复用的)与新生成的 Token 分开;只有后者会驱动漂移。

请将提示词视为有限的资源,而非无限的转录文本。通过有意识地进行测量、总结和精简,您可以让您的 LLM 智能体保持快速、经济,并具备应对生产规模的能力。

核心要点: Token 漂移会悄无声息地推高成本并降低智能体速度。识别提示词中不断增长的部分,对其进行压缩或外部化处理,并关注每次调用的 Token 使用量。通过规范的方法,可以将难以预测的账单冲击转变为可控且符合预算的运营。