LangChain 详解 Deep Agents SDK 的上下文管理机制
Context Management for Deep Agents
LangChain 介绍 Deep Agents SDK 的上下文压缩机制:超过 20,000 tokens 的工具结果卸载到文件系统、上下文达 85% 时截断旧的写/编辑工具调用、空间不足时执行带结构化摘要的总结,完整原始消息保留到文件系统供检索。文章还建议以更低阈值(如 10-20%)人为加大压缩频率来放大信号,并用针在草堆等针对性评测验证摘要后信息可恢复与目标不漂移。
原文给出 Deep Agents SDK 的三种上下文压缩机制和阈值触发细节,以及放大信号做评测的可迁移方法。
作者:Chester Curme 和 Mason Daugherty
随着 AI 智能体的可处理任务长度持续增长,有效的上下文管理变得至关重要,以防止上下文腐化并管理 LLM 有限的记忆约束。
Deep Agents SDK 是 LangChain 开源的、开箱即用的智能体框架。它提供了一条便捷的路径来构建具备规划、生成子智能体以及使用文件系统执行复杂、长时间运行任务能力的智能体。由于这类任务通常可能超出模型的上下文窗口,该 SDK 实现了多种促进上下文压缩的功能。
上下文压缩是指减少智能体工作记忆中信息量,同时保留与完成任务相关的细节的技术。这可能涉及总结先前的交互、过滤过时信息,或策略性地决定保留什么和丢弃什么。
Deep Agents 实现了一个文件系统抽象,允许智能体执行诸如列出、读取和写入文件等操作,以及搜索、模式匹配和文件执行。智能体使用文件系统按需搜索和检索已卸载的内容。
Deep Agents 实现了三种主要的压缩技术,以不同的频率触发:
- 卸载大型工具结果:每当出现大型工具响应时,我们将其卸载到文件系统。
- 卸载大型工具输入:当上下文大小超过阈值时,我们将工具调用中旧的写入/编辑参数卸载到文件系统。
- 总结:当上下文大小超过阈值,且没有更多符合卸载条件的上下文时,我们执行总结步骤来压缩消息历史。
为了管理上下文限制,Deep Agents SDK 在模型上下文窗口大小的阈值比例处触发这些压缩步骤。(在底层,我们使用 LangChain 的模型配置文件来获取给定模型的 token 阈值。)
卸载大型工具结果
工具调用的响应(例如,读取大型文件或 API 调用的结果)可能超出模型的上下文窗口。当 Deep Agents 检测到工具响应超过 20,000 个 token 时,它会将该响应卸载到文件系统,并用文件路径引用和前 10 行的预览来替代。智能体随后可以按需重新读取或搜索该内容。

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

总结
当卸载不再能提供足够空间时,Deep Agents 会退回到总结。这个过程有两个组成部分:
- 上下文内总结:LLM 生成对话的结构化总结——包括会话意图、创建的产品和后续步骤——用以替换智能体工作记忆中的完整对话历史。(参见 Deep Agents 的总结提示词。)
- 文件系统保留:完整、原始的对话消息被写入文件系统作为规范记录。
这种双重方法确保智能体既能通过摘要保持对目标和进度的感知,又能通过文件系统搜索在需要时恢复具体细节。参见此追踪记录中的示例,其中模型使用read_file工具来获取先前卸载的消息。

实践中的表现
虽然上述技术提供了上下文管理的机制,但我们如何知道它们确实有效?在真实任务上的运行(如terminal-bench等基准测试所记录的)可能会零星触发上下文压缩,从而难以孤立地衡量其影响。
我们发现,通过在基准数据集上更积极地启用测试框架的各项功能,来增强其单独信号是很有用的。例如,虽然在可用上下文窗口的 10% - 20% 时触发摘要可能会导致整体性能欠佳,但它会产生显著更多的摘要事件。这使得不同配置(例如,你实现的各种变体)之间可以进行比较。例如,通过强制智能体频繁进行摘要,我们能够识别出对deepagents摘要提示词所做的简单修改——即添加了会话意图和后续步骤的专用字段——如何有助于提升性能。

图:Claude Sonnet 4.5 在 terminal-bench-2 上样本运行中的 token 使用量随时间变化(灰线显示所有运行;彩色线突出显示两个具体示例)。绿线显示在第 20 轮左右 token 急剧下降,此时一次摘要事件压缩了对话历史。橙线显示在第 40 轮左右出现较小幅度的减少,此时一次大型文件写入工具调用被从上下文中逐出。通过在上下文窗口的 25% 时触发压缩(而非 Deep Agents 默认的 85%),我们生成了更多事件以供研究。
针对性评估
Deep Agents SDK 维护了一套针对性评估,旨在隔离并验证各个上下文管理机制。这些是刻意设计的小型测试,使特定的失败模式变得明显且易于调试。
这些评估的目标不是衡量广泛的任务解决能力,而是确保智能体的测试框架不会妨碍某些任务。例如:
- 摘要是否保留了智能体的目标?一些评估会刻意在任务中途触发摘要,然后检查智能体是否继续执行。这确保摘要不仅保留智能体状态,还保留其轨迹。
- 智能体能否恢复被摘要掉的信息?在这里,我们在对话早期嵌入一个“大海捞针”式的事实,强制触发一次摘要事件,然后要求智能体在稍后回忆该事实以完成任务。该事实在摘要后不存在于活动上下文中,必须通过文件系统搜索来恢复。
这些针对性评估充当上下文管理的集成测试:它们不能替代完整的基准测试运行,但能显著缩短迭代时间,并使失败可归因于特定的压缩机制,而非智能体的整体行为。
指导建议
在评估你自己的上下文压缩策略时,我们想强调:
- 从真实世界的基准测试开始,然后对各个功能进行压力测试。 首先在具有代表性的任务上运行你的测试框架,以建立基线性能。然后,更激进地人为触发压缩(例如,在上下文达到 10-20% 时触发,而不是 85%),以在每次运行中产生更多压缩事件。这会放大来自各个功能的信号,使比较不同方法(例如你的摘要提示词的不同变体)变得更加容易。
- 测试可恢复性。 只有当关键信息仍然可访问时,上下文压缩才有用。加入有针对性的测试,验证智能体在压缩后既能继续朝着其原始目标推进,又能在需要时恢复特定细节(例如大海捞针场景:一个关键事实被摘要掉了,但之后必须被检索出来)。
- 监控目标漂移。 最隐蔽的失败模式是智能体在摘要后失去了对用户意图的把握。这可能表现为智能体在摘要后的那一轮停下来请求澄清,或者错误地宣布任务完成。偏离预期任务的更细微之处可能更难归因于摘要;在样本数据集上强制频繁摘要可能有助于暴露这些失败。
Deep Agents 测试框架的所有功能都是开源的。试用最新版本,并告诉我们哪些压缩策略最适合你的用例!
来源:LangChain:Blog · langchain.com