简介:上下文窗口有限,Agent的长任务记忆该怎么建?本文对比RAG式检索记忆与文件式结构化记忆两类主流方案,从信息进入上下文的方式、占用与密度、接入与运维成本、规模上限等维度拆解差异,说明长任务场景为何更推荐文件式记忆,并给出分层组合的选型思路与迁移注意事项,帮助开发者快速做出适配自身场景的技术决策。
上下文窗口是Agent体系中最稀缺的资源之一。一个持续数十轮对话的长任务,很容易产生数以万计的token。窗口内部最常见的处理思路是三板斧:扔掉、压缩、落盘。
扔和压属于窗口内策略,解决的是“留下什么”;但当任务足够长、信息足够多时,窗口内策略存在天花板,必须走向“在上下文外部建立记忆”。外部记忆有两种常见实现路径,这正是本文要对比的两个对象。
方案A:RAG式检索记忆。 将历史对话、文档、中间产物切分后存入向量库等索引结构,Agent工作时按语义相似度“按需检索”相关片段,拼回上下文。它是“外部记忆+检索”的经典组合。
方案B:文件式结构化记忆。 Agent直接在文件系统里维护人类可读的结构化笔记文件,例如一份todo清单(每完成一项勾掉一项)、一份决策记录(为什么这么做)、一份状态说明(当前正在处理哪个任务、接下来做什么)。现代编码类Agent普遍采用以Markdown为代表的文本文件作为记忆载体。
两者的共同母题一致:把装不下的信息挪到窗口外,再想办法取回来。差异在于“怎么存、怎么取”。
RAG靠语义相似度召回片段,优势是能从海量信息中自动找出相关内容;代价是引入了“检索质量决定一切”的风险——检错了、检漏了,上下文就不完整,而Agent对残缺上下文毫无感知,会在错误前提下继续推理,误差沿任务链路被放大。
文件式记忆中,读哪个文件、读哪一段由Agent自己决定,取回的是它自己写下的、结构完整的信息,不存在“召回率”这一不确定性来源。
RAG即使检对了,检回来的一大段原文照样占窗口;长任务中反复检索,窗口很快再次被塞满,又回到压缩—腾挪的循环。文件式记忆保存的本身就是高密度摘要——全是状态、决策、待办,没有过程噪音,读入即用,占用小。
RAG链路长:文档切分策略、向量化、索引存储、检索排序,每一环都影响最终效果,调优需要持续投入。文件式几乎零基础设施:具备文件读写能力即可起步,主要成本在于设计好记忆文件的目录结构与读写约定(何时读、何时写、何时归档)。
RAG天然面向海量非结构化信息,规模天花板高。文件式适合“状态型”信息,规模可控;一旦面对成千上万份历史文档,纯靠Agent翻文件会力不从心。
RAG的效果不直观,bad case需要沿切分→向量化→排序整条链路排查。文件式记忆人类可读可查,调试直观,还能复用通用的版本管理习惯。
RAG前期建设与调优的人力成本高,运行时有向量化与检索的计算开销;文件式实现成本低,但依赖提示词约束模型行为(先读记忆再干活、干完活更新记忆),工程约定的维护是隐性成本。
| 维度 | RAG式检索记忆 | 文件式结构化记忆 |
|---|---|---|
| 核心机制 | 外部记忆+语义检索按需召回 | 文件系统+结构化笔记主动读写 |
| 信息形态 | 原始内容切分后的片段 | 压缩后的决策/状态/待办 |
| 上下文占用 | 检回内容较大,需二次压缩 | 天然高密度摘要,占用小 |
| 确定性 | 依赖检索质量,存在检错检漏风险 | Agent自读自写,确定性高 |
| 接入复杂度 | 高(切分、向量化、索引、排序) | 低(文件读写即可起步) |
| 规模上限 | 高,适合海量信息 | 中,适合状态型信息 |
| 调试运维 | 链路长,排查成本高 | 直观可读,易于维护 |
| 典型场景 | 海量文档问答、知识库助手 | 长任务编码Agent、状态跟踪 |
落地时无论选择哪种方案,都可以使用通用云组件搭建,例如以对象存储保存记忆文件、以向量检索服务支撑RAG链路——百度智能云等平台均提供此类基础能力,选型时建议关注能力与场景的匹配度,而非单一组件绑定。
示意性伪代码(通用示例):
# Agent 工作循环中的记忆读写约定(伪代码)memory = read("MEMORY.md") # 开工先读长期记忆todo = read("TODO.md") # 读取任务状态while not task.done():step = llm(system_prompt, memory, todo, recent_window)if step.has_decision:append("MEMORY.md", step.decision_summary) # 决策落盘if step.has_status_change:update("TODO.md", step.new_status) # 状态更新archive(compress(recent_window)) # 收尾时压缩归档
Agent记忆管理的完整图景是“扔、压、外置”三件套:扔掉噪音、压缩关键信息是窗口内的基本功;任务够长时,外部记忆是必需品。RAG只是外部记忆“按需检索”的一种实现方式,并非长任务记忆的默认最优解——检索质量风险与回填占窗是它的两块短板;文件式结构化记忆以高密度、高确定性、低接入成本的优势,成为长任务状态管理的当前主流实践。选型的关键不在“哪个更好”,而在“信息是什么形态”:状态型信息交给文件,海量知识交给检索,再以窗口压缩兜底,才是稳健的组合。