长任务智能体不再被上下文淹没:LangChain把记忆搬进文件,换模型也不丢
核心概要
LangChain 开源智能体框架 Deep Agents 用五种上下文工程手段应对长任务中的“上下文腐化”:把超大工具结果和用户消息卸载到文件系统、在接近上限时压缩历史、按需加载技能、用子智能体隔离噪声工作,并把长期记忆存成普通文件。它不删除信息,而是把上下文移出活动窗口,需要时再读回,因此记忆保存在用户自己控制的存储里,换模型或换供应商后仍可继续使用。
深度剖析
长任务智能体可以把大部分上下文移出活动窗口,而不是删掉它,从而避免随任务变长而出现的准确率下滑。 此前的做法是让模型在每次调用时携带全部历史、工具输出和中间草稿,信息越堆越多,模型能舒适容纳的上下文窗口被撑满。 一个每周一调研五家竞争对手并套用团队模板写报告的竞争分析智能体,到第四步时已经带着五份原始数据导出、数十条搜索结果和两份过期草稿进入每一次模型调用,其中大部分内容与最终排版无关。
这些手段通过中间件挂进智能体的运行循环,在模型调用和工具调用前后读取并改写上下文。 中间件是插入循环特定位置的代码,可以在下一步运行前修改上下文,而不是要求使用者自己重写整个智能体。 文件系统中间件在工具结果超过约两万 token 时把完整结果写入 /large_tool_results/{tool_call_id},模型只看到首尾几行预览和文件路径;超大用户消息在五万 token 阈值下同样处理,存入 /conversation_history/。
压缩后的历史仍然可恢复,长期记忆以纯文件形式保存在使用者自己的存储中。 摘要中间件在每次模型调用前检查 token 用量,默认达到模型上下文窗口的 85% 时,由一次单独的 LLM 调用把较早消息压缩成一份摘要,较早消息移出窗口,最近消息逐字保留。 被摘要的消息写入 /conversation_history/{session_id}.md,智能体起草报告时若需要公司 A 的调研细节可以读回;记忆文件在每次运行开始时读取并注入系统提示,模型或供应商更换后同一份文件仍可被读取。
启示与展望
这套手段面向需要跨多步、多工具运行的长任务智能体,尤其是会积累大量工具输出和中间草稿的场景,例如按固定模板周期性产出报告的调研智能体。记忆以纯文件形式存放在使用者自己控制的存储中,因此更换模型或供应商后同一份记忆仍可读取。文中给出的阈值和文件路径是默认设置,并说明默认值应当可定制,因为适合一个任务的阈值很少适合所有任务。
材料把上下文腐化描述为一种随历史、噪声和工具输出增多而准确率与推理变差的倾向,并未给出量化曲线。摘要默认在用量达到 85% 时触发,这一阈值被明确称为默认值,并提示可按主题变化而非仅按 token 阈值触发,也可自定义摘要提示。卸载与摘要被强调为可恢复而非有损截断,但材料没有说明恢复读取在长任务中的实际开销。
