第一时间捕获有价值的信号
本文译自 Context Management for Deep Agents。随着 AI Agent 可处理任务长度持续增长,有效的上下文管理变得至关重要。LangChain 的 Deep Agents SDK 实现了三种上下文压缩技术:工具结果卸载、工具输入卸载和对话摘要,在保留任务相关细节的同时减少工作记忆中的信息量。
随着 AI Agent 可处理任务长度持续增长,有效的上下文管理变得至关重要,以防止上下文腐烂并管理 LLM 有限的内存约束。
Deep Agents SDK 是 LangChain 的开源、开箱即用的 Agent harness。它提供了一条简单的路径来构建具有规划、生成子代理和使用文件系统执行复杂、长期运行任务能力的 Agent。由于这类任务通常可能超过模型的上下文窗口,SDK 实现了各种促进上下文压缩的功能。
上下文压缩是指在保留完成任务相关细节的同时,减少 Agent 工作记忆中信息量的技术。这可能涉及总结之前的交互、过滤掉过时的信息,或策略性地决定保留什么和丢弃什么。
Deep Agents 实现了一个文件系统抽象,允许 Agent 执行诸如列出、读取和写入文件,以及搜索、模式匹配和文件执行等操作。Agent 使用文件系统根据需要搜索和检索已卸载的内容。
Deep Agents 实现了三种主要的压缩技术,在不同的频率下触发:
- 卸载大工具结果:每当大工具响应出现时,我们将其卸载到文件系统。
- 卸载大工具输入:当上下文大小超过阈值时,我们将旧的写入/编辑参数从工具调用卸载到文件系统。
- 摘要:当上下文大小超过阈值,并且没有更多上下文有资格卸载时,我们执行摘要步骤来压缩消息历史。
为了管理上下文限制,Deep Agents SDK 在模型上下文窗口大小的阈值分数处触发这些压缩步骤。(在底层,我们使用 LangChain 的模型配置文件来访问给定模型的 Token 阈值。)
卸载大工具结果
来自工具调用的响应(例如,读取大文件或 API 调用的结果)可能超过模型的上下文窗口。当 Deep Agents 检测到工具响应超过 20,000 个 Token 时,它会将响应卸载到文件系统,并用文件路径引用和前 10 行的预览替换它。然后 Agent 可以根据需要重新读取或搜索内容。

卸载大工具输入
文件写入和编辑操作会在 Agent 的对话历史中留下包含完整文件内容的工具调用。由于这些内容已经持久化到文件系统,它们通常是冗余的。当会话上下文超过模型可用窗口的 85% 时,Deep Agents 将截断较旧的工具调用,用指向磁盘上文件的指针替换它们,并减少活动上下文的大小。

摘要
当卸载不再产生足够的空间时,Deep Agents 回退到摘要。这个过程有两个组成部分:
- 上下文内摘要:LLM 生成对话的结构化摘要——包括会话意图、创建的工件和下一步——它替换了 Agent 工作记忆中的完整对话历史。(请参阅 Deep Agents 摘要提示。)
- 文件系统保留:完整的原始对话消息作为规范记录写入文件系统。
这种双重方法确保 Agent 保持对其目标和进度的意识(通过摘要),同时保留在需要时恢复特定细节的能力(通过文件系统搜索)。请参阅此 trace 中的示例,其中模型使用 read_file 工具来获取之前卸载的消息。

这在实践中是什么样子
虽然上述技术提供了上下文管理的机制,但我们如何知道它们实际上在工作?在真实世界任务上的运行,如在 terminal-bench 等基准测试中捕获的,可能会零星触发上下文压缩,使得隔离它们的影响变得困难。
我们发现通过在基准数据集上更积极地使用它们来增加 harness 各个功能的信号是有用的。例如,虽然在可用上下文窗口的 10-20% 触发摘要可能导致次优的整体性能,但它会产生显著更多的摘要事件。这允许比较不同的配置(例如,你实现的变体)。例如,通过强制 Agent 频繁摘要,我们可以识别对 deepagents 摘要提示的简单更改如何帮助提高性能,其中我们添加了专用于会话意图和下一步的字段。

图:Claude Sonnet 4.5 在 terminal-bench-2 上的示例运行中 Token 使用随时间的变化(灰色线显示所有运行;彩色线突出显示两个具体示例)。绿色线显示在第 20 轮左右当摘要事件压缩对话历史时 Token 的急剧下降。橙色线显示在第 40 轮左右当大文件写入工具调用从上下文中被逐出时较小的减少。通过在上下文窗口的 25% 触发压缩(而不是 Deep Agents 默认的 85%),我们生成更多事件来研究。
针对性评估
Deep Agents SDK 维护一组旨在隔离和验证单个上下文管理机制的针对性评估。这些是故意设计的小测试,使特定的失败模式变得明显且可调试。
这些评估的目标不是衡量广泛的任务解决能力,而是确保 Agent 的 harness 不会妨碍某些任务。例如:
- 摘要是否保留了 Agent 的目标?一些评估故意在任务中途触发摘要,然后检查 Agent 是否继续。这确保摘要不仅保留了 Agent 状态,还保留了它的轨迹。
- Agent 能否恢复被摘要掉的信息?在这里,我们在对话早期嵌入一个「大海捞针」事实,强制一个摘要事件,然后要求 Agent 稍后回忆那个事实来完成任务。该事实在摘要后的活动上下文中不存在,必须通过文件系统搜索恢复。
这些针对性评估充当上下文管理的集成测试:它们不替换完整的基准运行,但它们显著减少了迭代时间,并使失败可归因于特定的压缩机制而不是整体 Agent 行为。
指南
在评估你自己的上下文压缩策略时,我们会强调:
- 从真实世界基准开始,然后对单个功能进行压力测试。 首先在代表性任务上运行你的 harness 以建立基线性能。然后,更积极地人为触发压缩(例如,在上下文的 10-20% 而不是 85%)以在每次运行中生成更多压缩事件。这放大了来自单个功能的信号,使比较不同方法更容易(例如,摘要提示的变体)。
- 测试可恢复性。 上下文压缩只有在关键信息保持可访问时才有用。包括针对性测试来验证 Agent 既能在压缩后继续朝着原始目标前进,又能在需要时恢复特定细节(例如,大海捞针场景,其中关键事实被摘要掉但稍后必须检索)。
- 监控目标漂移。 最隐蔽的失败模式是 Agent 在摘要后失去对用户意图的跟踪。这可能表现为 Agent 在摘要后的回合中完成以请求澄清,或错误地声明任务完成。与预期任务更微妙的偏差可能更难归因于摘要;在样本数据集上强制频繁摘要可能有助于揭示这些失败。
Deep Agents harness 的所有功能都是开源的。尝试最新版本,让我们知道什么压缩策略最适合你的用例!