上下文压缩策略:长程 Agent 的 Token 优化
上下文压缩策略:长程 Agent 的 Token 优化
1. 概念定义
上下文压缩(Context Summarization)是一种在 Agent 对话接近模型上下文窗口限制时,自动压缩历史消息以释放 Token 空间的技术。它使 Agent 能够维持长程任务(如深度研究、多步数据管道)而不超出模型的最大 Token 限制。
核心思想:将不再需要精确回忆的历史对话压缩为摘要,同时保留近期消息的完整性。
2. 触发策略
上下文压缩的触发方式有三种:
| 策略 | 触发条件 | 优点 | 缺点 |
|---|---|---|---|
| Token 阈值 | 总 Token 数超过 N | 精确控制 Token 使用 | 需要准确计算 Token 数 |
| 消息数量 | 消息数超过 M 条 | 实现简单 | 不考虑消息长度差异 |
| 占比阈值 | 当前 Token 数占最大输入的 N% | 自适应不同模型的上下文窗口 | 实现稍复杂 |
3. 压缩算法
典型的压缩流程:
3.1 保留策略(Keep Policy)
保留策略决定哪些消息不参与压缩:
- 保留最近 N 条消息:确保 Agent 对当前任务有完整上下文
- 保留系统消息:system prompt 始终不压缩
- 保留工具调用结果:关键的工具输出(如文件内容)不压缩
3.2 中间结果卸载
对于大型中间结果(如长报告、数据集),不将其保留在对话中,而是写入文件系统。后续需要时通过工具重新读取。
4. 设计权衡
4.1 压缩频率
频繁压缩:Token 使用稳定,但压缩操作本身消耗 Token 和延迟。 延迟压缩:节省压缩开销,但可能在触发后急剧压缩大量历史,丢失细节。
4.2 摘要粒度
粗粒度(“用户要求分析一篇论文”):Token 开销小,但可能丢失关键约束。 细粒度(“用户要求分析论文 X 的方法论部分,重点关注 Y 算法”):保留更多细节,但 Token 开销大。
5. 陷阱与规避
5.1 压缩信息丢失
摘要无法保留所有原始信息,可能导致 Agent 忘记关键约束。
规避:
- 保留关键事实(工具调用结果、用户明确要求)不压缩
- 压缩前将重要中间结果写入文件系统
5.2 压缩成本
压缩本身需要一次 LLM 调用,消耗 Token 和时间。
规避:
- 使用较小的模型执行压缩任务
- 批量压缩而非逐条压缩
参考来源
- LangGraph 文档 — 状态管理和消息裁剪