本文讨论 Agent 记忆系统如何从聊天历史扩展为可治理的工作记忆、长期记忆、情景记忆、知识库和遗忘机制。记忆的目标不是无限保存,而是在长期协作中降低重复探索、保留稳定偏好、复用历史经验、引用外部事实并清除过期或敏感信息。文章强调,记忆必须带有作用域、来源、时间、置信度、权限和删除路径;否则记忆越强,错误污染和隐私风险越大。生产级 Agent 的记忆能力,本质上是选择、检索、压缩、验证和遗忘的组合。
Agent 记忆;短期记忆;长期记忆;情景记忆;知识库;遗忘机制;RAG;隐私治理
本文研究的问题是:一个 Agent 应该记住什么、何时写入、如何取用、什么时候遗忘。方法上,文章把记忆按用途分层:短期记忆服务当前任务,长期记忆保存稳定事实和偏好,情景记忆保存经历与复盘,知识库承载可引用外部事实,遗忘机制控制过期、冲突和敏感内容。每层都用作用域、更新权、检索方式和风险边界来评估。
记忆系统的运行逻辑可以用下面的图表示。关键点在于写入和读取都要经过策略判断,模型不能把任意对话自动变成永久事实。
记忆价值可以用信号与风险的差值近似:
其中 是当前相关性, 是可信度, 是噪声成本, 是隐私风险, 是陈旧风险。这个表达说明:旧记忆不是因为存在就应该被注入上下文,而要持续重新估值。
Agent 的记忆系统不是把聊天记录无限塞进上下文,也不是给模型旁边接一个向量库就结束。真正可用的 Agent 记忆,是一套让智能体在长期协作中保持连续性、可追溯性和自我修正能力的工程体系。它要回答的问题很具体:当前这轮任务需要哪些上下文,哪些事实应该跨会话保留,哪些经历应该保存成案例,哪些资料应该进入知识库,哪些旧信息应该压缩、降权、过期或删除。只有这些问题被设计清楚,Agent 才能从“每次都像第一次见面”的聊天工具,变成能够持续理解用户、组织、项目和任务的工作系统。
很多人第一次做记忆系统,会把记忆理解成更长的上下文窗口。这个理解太窄。长上下文能容纳更多文本,但不能自动判断什么重要,也不能保证模型在长文本中稳定找到关键事实。论文《Lost in the Middle》已经指出,模型即使支持长上下文,也可能在关键信息位于中间位置时显著变差。实际产品里,长上下文还会带来成本、延迟、隐私和噪声问题。把所有历史都塞进去,Agent 不但会慢,还会被过期指令、旧偏好和无关讨论带偏。
记忆系统的核心是选择。短期记忆负责当前会话和当前任务的工作状态;长期记忆负责跨会话稳定存在的用户偏好、项目事实和组织规则;情景记忆保存发生过的具体经历、失败案例和决策过程;知识库保存可引用、可更新、可权限控制的外部资料;遗忘机制负责让旧信息退出高优先级位置,避免系统被历史拖垮。这五类能力组合在一起,才构成生产级 Agent 的记忆底座。
提示词解决的是“这一轮应该怎么回答”,记忆解决的是“长期合作中应该记住什么”。没有记忆的 Agent 每次都要重新理解用户是谁、项目是什么、历史上踩过什么坑、哪些规则不能违反、哪些工具最适合当前环境。对一次性问答来说,这种无状态还能接受;对持续写代码、维护知识库、处理客户、跟进项目、做研究、管理设备的 Agent 来说,无状态会让系统反复探索、反复犯错、反复追问同样问题。
记忆不是为了让 Agent 显得亲切,而是为了降低重复成本和提高任务成功率。用户上周告诉过系统“这个项目只允许改两个文件”,今天继续同一任务时,Agent 应该记得这个约束,或者至少能从项目记忆中检索到它。工程团队以前发现某个部署脚本必须先停后台任务再升级,Agent 下次运维时应该把这个经验作为风险提示。一个销售助理知道客户只接受私有化方案,就不该在后续建议里反复推荐纯公有云产品。
记忆也让 Agent 能从反馈中学习。用户纠正一次“不要把内部字段展示给最终用户”,这不应该只影响当前回复,而应该沉淀为产品写作偏好。测试失败后定位出“某个 SDK 版本和驱动不兼容”,这不应该只留在聊天记录里,而应该成为可检索的项目经验。没有记忆,Agent 的每次修正都像写在沙滩上;有记忆,反馈才能变成下一次行动的约束。
但记忆越强,风险也越大。错误记忆会持续污染未来回答,敏感记忆会扩大合规风险,过度记忆会让用户觉得被冒犯,陈旧记忆会让系统做出过期判断。因此生产级记忆系统不能只追求“多记”,而要追求“该记的记住,不该记的忘掉,拿出来时知道来源、时间、权限和置信度”。
短期记忆通常对应一个会话、一个线程或一次任务运行。它保存当前对话历史、已上传文件、临时计划、工具返回、正在编辑的草稿、未完成步骤、最近错误和用户刚刚确认的约束。LangGraph 文档把短期记忆放在 Agent 的状态里,通过 checkpoint 支持线程恢复;OpenAI Agents SDK 的 Sessions 也把会话历史作为持久层,让多轮运行不用手工拼接历史。这类设计说明,短期记忆本质上是当前任务的可恢复状态,而不是普通聊天记录的别名。
短期记忆的目标是让 Agent 在当前任务中不丢上下文。用户先给一段需求,再补充限制,再要求修改输出风格,Agent 应该把这些信息组合起来使用。代码任务里,Agent 读过哪些文件、改过哪些位置、跑过哪些测试、失败原因是什么,都应该属于短期状态。浏览器自动化里,当前页面、登录状态、已填写字段和下一步按钮,也都属于短期记忆。如果这些只靠模型上下文临时保存,任务一长就容易丢。
短期记忆的难点是长度管理。完整会话不断增长,模型上下文窗口总会被填满。即使窗口足够大,陈旧内容也会分散注意力。常见方法包括滑动窗口、摘要压缩、按角色过滤、按任务阶段裁剪、保留最近工具结果、把已完成步骤写入结构化状态。关键不是粗暴删除旧消息,而是区分哪些信息仍影响当前任务。用户刚刚给出的验收标准要保留;三小时前已经解决的临时错误可以压缩;被用户否定过的方案要保留否定结论,避免反复提出。
短期记忆还要防止“历史指令劫持”。多轮对话中,用户早期可能说过一个宽泛目标,后面又改变方向。如果 Agent 仍把旧目标当成当前目标,就会跑偏。更稳妥的设计是把当前任务目标、约束、开放问题和已完成事项显式放在状态里,而不是让模型从完整聊天中猜。对复杂任务,状态可以包含任务阶段:需求确认、资料收集、方案设计、执行、验证、交付。Agent 每一步读状态、更新状态,才能减少烂尾。
短期记忆最好是可检查的。用户应该能清空当前对话、撤销最后一步、重新生成某轮结果,开发者应该能审计 Agent 为什么这么做。OpenAI Agents SDK 文档提到 Session 可以检查和编辑历史,这种能力在生产里很实用。因为记忆一旦能影响输出,就必须能被查看、修正和删除。不可见的短期记忆会让用户无法判断系统到底记住了什么,也无法纠正错误上下文。
长期记忆跨越会话存在。它保存用户偏好、项目背景、组织规则、长期目标、常用工具、历史决策和可复用经验。LangChain 的记忆概念把长期记忆描述为跨线程共享的数据,可按命名空间隔离;Deep Agents 文档也把长期记忆设计成可由 Agent 读取和更新的文件,并区分 Agent 范围、用户范围和组织范围。这说明长期记忆最重要的不是“存得久”,而是作用域清楚。
作用域决定记忆该被谁使用。用户级记忆只服务某个用户,例如“用户习惯用中文回答”“用户偏好先给结论再给步骤”。项目级记忆服务某个项目,例如“这个仓库发布前必须跑某个命令”“这个目录下不要改生成文件”。组织级记忆服务一组用户或全部 Agent,例如品牌语气、合规红线、数据保留政策。Agent 级记忆则是某个 Agent 自己的工作经验,例如擅长工具、常见故障处理流程。作用域混乱会带来严重问题:一个用户的私人偏好不应影响另一个用户,某个项目的临时规则也不应污染全局行为。
长期记忆还要区分事实、偏好和规则。事实可以被验证,例如“项目使用 PostgreSQL”;偏好是用户或团队选择,例如“报告倾向用小标题和短段落”;规则是必须遵守的约束,例如“不得把客户身份信息输出给无权限用户”。三者更新方式不同。事实可能随时间变化,需要时间戳和来源;偏好可能被用户改变,需要保留最新版本;规则通常需要权限控制,不应让 Agent 随意改写。
长期记忆的写入不能完全自动。Agent 可以建议保存,但不应把每句闲聊都当成永久事实。比如用户说“今天我不想看太长回答”,这可能只是当前情绪,不一定是长期偏好。用户说“这个客户暂时暂停项目”,这可能需要保存,但还要标明时间和业务对象。好的长期记忆写入策略通常包括触发条件、置信度、去重、合并和人工可见性。对于高影响记忆,可以让用户确认;对于低风险偏好,可以后台写入但允许用户查看和删除。
长期记忆也不是越详细越好。一个不断追加的偏好列表很快会互相冲突:用户既喜欢简洁,又希望详细;既偏好中文,又在某些任务中要求英文;既要自动化,又不允许高风险动作。长期记忆需要压缩成稳定原则,而不是保留所有片段。可以把多次反馈合并成“默认用中文,技术术语保留英文;复杂任务先给结论,再列验证结果”。这种综合记忆比几十条原始纠正更可用。
情景记忆记录“发生过什么”。它不是抽象偏好,也不是静态知识,而是具体经历:某次任务的目标、采取的步骤、遇到的错误、做过的选择、最后结果和复盘结论。论文《Generative Agents》中的智能体架构把观察、反思和规划结合起来,智能体会保存经历,再从经历中生成更高层的反思,用于后续行为。这类设计启发了很多 Agent 记忆系统:经历本身有价值,因为它包含上下文、时间和因果。
情景记忆适合保存案例。比如一次私有化部署失败,原因是证书续期端口被防火墙拦住;一次代码修复失败,原因是模型只跑了单元测试没跑集成测试;一次知识库问答答错,原因是检索召回了旧版本制度。单独保存结论“注意证书”“跑集成测试”“过滤旧文档”当然有用,但保存完整情景能让 Agent 在相似任务中更好判断风险。因为真实问题往往不是一个孤立事实,而是一串条件组合。
情景记忆和长期语义记忆不同。长期语义记忆可以写成“某项目部署依赖 443 端口和 DNS-01 记录”;情景记忆则写成“在某次部署中,HTTP-01 校验失败,因为服务只有内网入口,最后改用 DNS-01 解决”。前者适合直接注入或检索,后者适合类比、复盘和故障排查。生产系统可以同时保存两者:从情景中提炼出语义记忆,再保留原始情景作为证据。
情景记忆需要结构化。至少应包含时间、参与对象、任务目标、环境、关键动作、观察结果、失败点、最终状态和可复用经验。没有结构化,情景就会变成长篇流水账,检索时难以命中。也可以把情景拆成 episode 节点,像 Zep 文档描述的那样,把原始数据作为 episodic nodes,同时抽取实体和关系进入时间知识图谱。这样既能保留原始经历,又能支持按人物、项目、工具、时间和事实关系检索。
情景记忆的最大价值是在相似场景中提醒 Agent。用户说“再部署一套同样的服务”,系统可以检索过去部署经历,发现曾经在证书、显存、镜像标签、备份恢复上出过问题,于是在计划中主动加入检查。用户说“这次也帮我写一篇长文”,系统可以回忆上次验收标准:有效汉字数、参考资料数量、不能重复段落、不能有内部说明。情景记忆让 Agent 不只知道规则,还知道规则为什么重要。
但情景记忆也要谨慎使用。过去的解决方案不一定适用于现在,历史案例可能过期,某个用户的经历也不应暴露给其他用户。情景记忆必须带权限、时间和适用条件。检索到历史案例后,Agent 应该把它作为参考,而不是机械套用。
知识库不是 Agent 的私人记忆,而是可管理、可更新、可引用的外部知识源。它可以包括产品文档、制度文件、API 手册、合同模板、项目 README、会议纪要、工单记录、数据库表说明和研究资料。RAG 论文把生成模型的参数记忆和外部非参数记忆结合起来,强调外部知识能改善事实性、更新性和来源可追溯性。对 Agent 来说,知识库是回答“世界上或组织里有什么事实”的地方。
知识库和长期记忆的边界很重要。长期记忆通常是关于用户、项目和 Agent 交互的个性化信息,知识库通常是组织可共享的资料资产。用户偏好“回答要短”不该放进企业制度知识库;公司报销制度也不该被写成某个用户的私人长期记忆。边界清楚,权限才清楚,更新责任才清楚。
知识库建设的难点不在“上传文件”,而在资料治理。文档要有来源、版本、更新时间、权限、适用范围和失效策略。一个员工手册如果有 2023 版和 2025 版,检索系统必须知道哪个有效。一个客户合同只允许项目成员查看,Agent 不能因为向量相似就把内容提供给无权限用户。一个接口文档如果已经废弃,应该被标记为过期或移出检索范围,而不是继续影响答案。
知识库检索也不能只靠向量相似。技术文档、法律条款、配置项和错误码常常依赖精确关键词;用户问题又可能使用同义表达。生产级检索通常会结合关键词检索、向量检索、元数据过滤、重排和引用校验。Qdrant 文档强调过滤可以把数据库条件和向量搜索结合起来,NVIDIA RAG Blueprint 文档也提到混合搜索能结合稀疏关键词和稠密语义表示。对中文知识库来说,分词、专有名词、缩写和版本号尤其影响召回。
知识库进入 Agent 后,还要处理“证据如何进入上下文”。检索到十段材料,不代表都应该原样塞给模型。系统需要按相关性、权威性、新旧程度和权限筛选;长文档需要合适分块;跨文档问题需要聚合证据;答案需要标注引用来源。否则 Agent 会把知识库当成一个模糊背景,最后输出看似专业但无法追溯的答案。
知识库还应支持反馈闭环。用户指出答案引用错误时,系统要能定位是分块错误、检索错误、重排错误、资料过期,还是模型没有遵循证据。只在提示词里写“请基于知识库回答”不够。生产系统要记录查询、召回、排序、上下文、答案和引用,才能持续改善。
Letta 文档区分 memory blocks 和 archival memory,这个划分很适合理解 Agent 记忆层级。Memory blocks 是始终可见的核心记忆,类似放在上下文窗口里的结构化块;archival memory 是按需检索的外部长期存储,通常通过语义搜索访问。核心记忆适合保存必须持续可见的信息,归档记忆适合保存大量历史和资料。
核心记忆数量应少而精。它可以包括用户身份摘要、当前项目摘要、关键偏好、不可违反规则、当前长期目标和少量工作草稿。因为核心记忆每轮都会消耗上下文,它必须高密度、低冲突、经常更新。Letta 文档强调 memory block 的 description 很重要,因为 Agent 要靠描述理解该块用途。这提醒我们,记忆不是只有值,还要有语义标签、用途说明和更新规则。
归档记忆适合存放大规模材料:长期对话片段、客户历史、项目日志、研究资料、代码案例、支持工单。它不需要每轮都出现,而是在相关时被搜索出来。归档记忆的优势是容量大、成本低、可检索;弱点是召回不稳定、可能遗漏、需要好的查询和重排。一个 Agent 如果只靠归档记忆,可能在应该主动记住的规则上漏召回;如果只靠核心记忆,又会被容量限制困住。
检索记忆介于两者之间。它不是永久知识库,也不是始终可见状态,而是当前任务临时拉取的一组相关记忆。比如 Agent 开始处理某项目时,从长期记忆中检索项目规则,从情景记忆中检索相似失败案例,从知识库中检索最新文档,再把其中最相关的部分放进当前上下文。检索记忆应随任务变化动态更新,而不是一次检索后固定到底。
好的记忆系统通常是分层的:少量核心记忆常驻,大量归档记忆外置,任务相关记忆按需进入短期上下文。MemGPT 论文提出的虚拟上下文管理,就借鉴了操作系统分层内存的思想,在有限上下文窗口和更大外部记忆之间移动信息。这个比喻很准确:上下文窗口像高速但昂贵的内存,外部存储像容量更大的磁盘,系统需要决定何时加载、何时写回、何时压缩。
除了按时间划分,还可以按内容类型划分记忆。语义记忆保存事实和概念,例如“这个项目使用 Redis 缓存会话”“用户默认希望中文输出”。程序记忆保存做事方法,例如“发布前先备份数据库,再滚动重启服务,再检查指标”。反思记忆保存从经历中抽象出的经验,例如“当用户要求生产级 UI 时,不要展示开发调试字段”。这三类记忆对 Agent 的作用不同。
语义记忆最容易被向量化和检索。它通常写成短句、键值或结构化文档,适合按实体、主题和时间查找。它的风险是过期和冲突。用户今天的职位、项目今天的架构、服务今天的端口,都可能变化。因此语义记忆应带时间戳、来源和有效状态。Zep 文档中的 fact invalidation 就是为了解决关系变化:新数据无效化旧事实时,系统记录事实何时失效,而不是简单覆盖。
程序记忆更像技能或操作手册。它告诉 Agent 遇到某类任务时应该怎么做。程序记忆可以来自开发者定义,也可以来自 Agent 复盘。比如“写长文前先收集资料,写完后按汉字数和参考资料数量验收”;“升级 Kubernetes 前先读版本偏移策略、备份重要状态、逐个节点 drain”;“处理用户文件时只改指定文件”。程序记忆通常比语义记忆更稳定,但也需要版本管理,因为工具和环境会变化。
反思记忆是从一次或多次情景中总结出来的原则。它比情景更短,比程序更抽象。Generative Agents 论文中,智能体会把观察合成为高层反思,再用于计划。生产系统里的反思记忆可以帮助 Agent 改善行为,但必须防止过度概括。一次失败不一定意味着永远不要采用某方案;一次用户偏好不一定适用于所有任务。反思记忆最好保留证据链接,让系统知道它来自哪些经历。
这三类记忆可以互相转化。一次任务经历进入情景记忆;复盘后提炼出语义事实和反思;如果反思多次成立,再固化为程序记忆。这个过程类似团队知识管理:事故记录、复盘结论、操作手册和制度规范分层存在。Agent 记忆系统也应该这样演进,而不是把所有东西混在同一个向量库里。
记忆写入是最容易被低估的环节。很多系统只要模型判断“这可能重要”,就写入长期记忆。结果是记忆库里充满临时情绪、重复偏好、未经确认的推测和过期事实。写入策略应该比检索策略更严格,因为写错的记忆会长期影响未来行为。
判断是否写入,可以看四个维度:稳定性、复用价值、用户意图和风险。稳定性高的信息更适合长期保存,例如项目技术栈、用户固定偏好、组织规则。复用价值高的信息值得保存,例如常见故障解法、关键决策背景。用户明确表达“以后都这样”“记住这个”时,写入优先级更高。风险高的信息则需要确认或避免保存,例如身份信息、财务数据、健康信息、未公开商业信息。
写入内容应该尽量原子化。不要把一整段对话压成模糊记忆“用户关心安全”,而要写成可用事实:“用户在私有化部署话题中优先关注证书、备份和日志留存”。原子记忆更容易检索、更新和删除。对于结构化领域,可以用 schema 约束,例如用户偏好包含主题、偏好、适用范围、来源、更新时间、置信度;项目规则包含项目名、规则内容、强制级别、验证方式、失效条件。
写入还要去重和合并。同一偏好出现多次,不应该无限追加;新信息与旧信息冲突时,不应该两条都高优先级存在。可以用模型生成 JSON Patch 更新 profile,也可以用规则按实体和字段合并。LangChain 文档提到 profile 记忆适合持续更新单个 JSON 文档,但 profile 变大后容易出错,可能需要拆分多个文档或使用严格解码。这正是生产系统会遇到的问题:记忆越结构化,越要重视 schema 演进和校验。
谁批准写入也很关键。低风险、低敏感的偏好可以自动写入;中风险的项目规则可以写入后展示给用户确认;高风险的敏感信息默认不写,除非用户明确要求并且系统符合数据政策。企业环境里,组织规则通常只能由管理员或知识库维护者更新,不能让普通对话中的 Agent 自己改。
检索是把外部记忆带回当前上下文的过程。它看起来像搜索问题,实际上是决策问题。系统要判断查哪类记忆、用什么查询、过滤哪些作用域、取多少结果、如何排序、如何处理冲突、如何告诉模型使用方式。搜到一堆相似文本,不等于对任务有帮助。
第一步是选择记忆源。当前任务问“我上次怎么处理这个错误”,应该优先搜情景记忆;问“这个项目发布流程是什么”,应该搜项目长期记忆和知识库;问“用户喜欢什么格式”,应该搜用户偏好;问“公司政策允许吗”,应该搜组织知识库和只读规则。把所有问题都丢给一个混合向量库,会导致高价值规则被低价值相似文本淹没。
第二步是构造查询。用户原话不一定适合检索。Agent 可以根据任务状态生成多个查询:实体查询、错误查询、目标查询、时间查询。比如“上次那个部署失败的问题”需要先解析“那个”指向哪个项目、哪个时间段、哪个服务,再检索相关经历。检索记忆对指代消解和实体识别要求很高,这也是很多记忆系统在真实对话中表现不稳定的原因。
第三步是过滤和排序。权限、用户、项目、时间、记忆类型、有效状态都应该进入过滤条件。排序不能只看向量相似,还要看来源可靠性、更新时间、记忆强度和任务相关性。一个旧但相似的记忆,可能不如一个较新但文字不完全相似的规则重要。一个用户闲聊里提到的偏好,不应高过明确保存的项目约束。
第四步是冲突处理。检索结果可能互相矛盾:旧记忆说用户喜欢短答,新记忆说这类文章要详细;旧项目规则说用某端口,新部署文档已经改端口。Agent 不应该把冲突藏起来,而应该按时间、来源和权威级别决定优先级,必要时向用户确认。记忆系统应支持失效标记,而不是只靠检索排序来“碰运气”。
最后,检索结果进入上下文时要有说明。模型需要知道这条信息是硬规则、偏好、历史案例还是参考资料。硬规则必须遵守;偏好可以在适用时采用;历史案例用于提醒风险;知识库资料用于事实引用。如果把不同记忆都作为普通上下文文本,模型就可能把一个历史失败案例误当成当前事实。
遗忘不是记忆系统的附属功能,而是核心能力。人类会遗忘不重要的细节,组织会归档旧文档,数据库会设置保留周期,Agent 也需要类似机制。没有遗忘,记忆库会膨胀、检索会变慢、冲突会增加、隐私风险会累积,最终系统会被自己的历史拖垮。
遗忘有多种形式。删除是最彻底的遗忘,适合用户要求移除、敏感信息不应保存、错误记忆确认无效。过期是时间驱动的遗忘,适合临时偏好、短期任务状态、一次性授权。降权是不删除但降低检索优先级,适合旧项目经验和低置信度记忆。压缩是把多条细节合并成摘要,适合长对话和重复反馈。归档是移出高频检索路径但保留审计,适合历史任务记录。
遗忘策略应按记忆类型不同而不同。短期记忆随会话结束或任务完成而清理,只保留必要摘要;长期偏好在用户修改时更新,不应反复保留旧版本作为高优先级事实;情景记忆可以保留更久,但检索时按时间和相似度平衡;知识库按文档版本和业务制度管理,旧版本应标记失效;敏感数据遵守更严格的最小化和保留期限。
遗忘还要处理“错误记忆”。用户纠正 Agent 时,不只是当前回答要改,相关记忆也要改。比如 Agent 记错了用户所在公司,后续每次都用错称呼;仅在本轮道歉没有意义,必须找到错误来源并修正或删除。产品上可以提供“这不是我的偏好”“忘记这条”“改成这样”的用户入口。企业后台则需要记忆审计、批量清理和策略更新能力。
自动遗忘不能只靠时间。某些信息很旧但仍重要,例如组织安全规则;某些信息很新但不该保留,例如一次性验证码。更合理的遗忘信号包括访问频率、最近使用、用户确认、事实失效、来源权威、敏感级别和任务价值。对向量库中的资料,还要支持重建索引,因为嵌入模型升级、分块策略调整、权限变化都会让旧索引不再可靠。
遗忘机制也是信任机制。用户愿意让 Agent 记住自己,是因为知道能查看和删除。企业愿意让 Agent 使用内部资料,是因为知道资料有权限、版本和生命周期。没有遗忘,记忆系统迟早会变成不可控的数据沼泽。
Agent 记忆天然涉及隐私。它会保存用户身份、偏好、对话、文件、业务状态和历史操作。生产系统必须从一开始就按数据治理设计,而不是等出问题后再补。基本原则是最小化:只保存完成任务和改善体验所必需的信息,能保存摘要就不保存原文,能保存非敏感偏好就不保存敏感事实,能放在用户本地就不上传到共享环境。
隔离同样重要。不同用户、不同组织、不同项目、不同 Agent 的记忆不能混用。OpenAI sandbox-agent memory 文档强调用不同 memory layout 隔离不同 Agent 的记忆,避免一个领域的经验被合并到另一个领域。这个思想适用于所有记忆系统。一个财务 Agent 的记忆不应被客服 Agent 随意使用,一个客户项目的记忆不应出现在另一个客户的上下文中。
权限要在存储和检索层执行,不能只靠提示词。提示词可以告诉模型不要泄露,但真正的隔离必须由系统控制:检索时按用户身份和资源权限过滤,写入时按数据分类决定存储位置,输出时按引用权限检查。知识库尤其如此,向量搜索如果没有元数据权限过滤,很容易跨文档泄露。
可解释性让用户知道记忆如何影响回答。面向最终用户的产品不需要展示复杂内部字段,但可以提供自然语言层面的说明:系统记住了哪些偏好,当前回答参考了哪些资料,哪些历史设置正在生效。对企业管理员,则需要更完整的审计:谁写入了记忆,来自哪次交互,何时被检索,影响了哪次输出,是否被删除。
敏感记忆还应有默认保护。密码、密钥、令牌、验证码、身份证号、健康信息、金融账户等不应作为普通长期记忆保存。即使用户主动提供,也要判断是否只是完成当前任务所需。很多时候,正确做法是用一次性安全通道或外部凭据管理,而不是让 Agent “记住”。
记忆系统不能只靠主观感觉评估。用户觉得 Agent “更懂我”,可能只是回答更长;开发者觉得“检索到了历史”,不代表输出正确使用了记忆。评估要围绕任务结果:记忆是否减少重复追问,是否提高多轮任务成功率,是否降低错误复发,是否正确遵守长期偏好,是否没有泄露和误用。
可以设计几类测试。第一类是偏好保持测试:用户在早期表达偏好,隔几轮或跨会话后提出相关任务,检查 Agent 是否采用偏好,并在冲突时是否询问。第二类是事实更新测试:先保存旧事实,再输入新事实,检查系统是否让旧事实失效。第三类是情景复用测试:让 Agent 处理与过去相似但不完全相同的问题,检查它是否提取历史经验而不是机械复制。第四类是权限隔离测试:不同用户和项目之间不应互相召回记忆。
第五类是遗忘测试。用户要求忘记某条信息后,后续回答不应继续使用它;过期记忆不应高优先级影响结果;错误记忆被修正后,不应在摘要或缓存中残留。很多系统只测“能记住”,不测“能忘记”,这是生产风险。
第六类是长任务恢复测试。任务中断后恢复,Agent 应该知道已完成步骤、未完成步骤、关键约束和验证状态。短期记忆如果只保存聊天记录而没有结构化状态,恢复时很容易重复执行或漏验收。
评价还应包含成本和延迟。记忆检索、重排、摘要、写入和审计都会增加系统开销。一个每轮都查十个库、塞满上下文的 Agent 可能更“有记忆”,但用户体验更差。好的记忆系统会按任务需要选择最小有效记忆,而不是每次全量回忆。
第一种错误是保存一切。聊天记录、工具输出、网页内容、临时草稿、错误日志全部进入长期记忆,短期看召回丰富,长期看噪声爆炸。保存一切不是智能,是逃避选择。生产系统应该先定义记忆类型和写入标准,再决定保存。
第二种错误是只有向量库,没有权威源。向量库适合检索,不适合当唯一事实源。文档原文、版本、权限和删除策略必须存在于可治理的资料层。向量索引应该可以重建,而不是成为不可解释的黑箱。
第三种错误是把摘要当真相。长对话摘要很有用,但摘要会丢细节,也可能被模型写错。重要决策、用户确认和工具结果应保留原始证据链接。摘要适合降低上下文成本,不适合替代审计记录。
第四种错误是记忆没有时间。没有时间戳,系统不知道哪个事实更新;没有有效期,系统不知道临时偏好何时停止;没有版本,系统不知道知识库哪个文档有效。时间是记忆系统的基础字段。
第五种错误是没有用户控制。用户不能查看、修正、删除记忆,就很难信任系统。尤其是个性化产品,记忆功能越强,控制入口越重要。
第六种错误是让 Agent 随意改规则。组织政策、合规要求、品牌规范不应由普通对话自动更新。它们可以作为只读记忆进入上下文,也可以由管理员维护,但不能被模型在一次对话中“学坏”。
一个稳健的 Agent 记忆架构,可以分成五层。第一层是运行状态层,保存当前会话、任务步骤、工具结果和临时上下文。第二层是核心记忆层,保存少量高优先级长期信息,如用户摘要、项目摘要和关键规则。第三层是长期资料层,保存可检索的用户偏好、项目经验、情景案例和知识库索引。第四层是治理层,处理权限、版本、审计、保留期和删除。第五层是反思与整理层,后台把原始经历提炼为更高质量的记忆。
运行状态层要快、可恢复、和任务绑定。它不追求永久,只追求当前任务不丢。核心记忆层要小、稳定、可解释。它每轮都可能进入上下文,所以必须精炼。长期资料层要容量大、可检索、可重建。治理层是生产底线,决定记忆能不能进入企业环境。反思整理层让记忆质量随使用提升,而不是越来越乱。
这样的分层还能支持不同产品形态。个人助手可以强化用户偏好和生活上下文;研发 Agent 可以强化项目记忆、代码库经验和测试记录;客服 Agent 可以强化客户历史、工单情景和政策知识库;运维 Agent 可以强化部署经历、故障复盘和操作手册。底层原则相同,但作用域、保留期和权限不同。
架构上还要避免单点黑箱。模型负责判断和总结,但存储、权限、删除和审计不能完全交给模型。检索可以由模型改写查询,但最终过滤必须由系统执行。写入可以由模型提议,但高风险记忆需要规则和用户确认。记忆系统是模型能力和工程控制的结合。
如果从零开始,不必一次做成复杂平台。最小可用版本可以先包含三个能力:会话状态、用户偏好和知识库引用。会话状态保证当前任务连续;用户偏好保存少量明确且低风险的长期信息;知识库引用保证事实回答有来源。这个版本已经能解决很多无状态 Agent 的痛点。
第二阶段加入情景记忆和复盘。每次任务完成后,系统生成一条结构化记录:目标、关键步骤、结果、失败、经验。后台再把高价值经验提炼成项目记忆或程序记忆。这样 Agent 会开始减少重复踩坑。
第三阶段加入遗忘和治理。提供用户查看、修改、删除记忆的入口;给记忆加作用域、时间戳、来源和敏感级别;给知识库加版本和权限过滤;给过期和冲突记忆加处理策略。这一步决定系统能否进入真实组织使用。
第四阶段再优化检索和自动整理。引入混合搜索、重排、图谱关系、事实失效、后台摘要和记忆质量评分。不要把这些高级能力放在第一天,因为如果基础写入和权限没做好,高级检索只会更快地放大错误。
Agent 记忆系统的目标不是让模型“什么都记得”,而是让系统在长期协作中保持清醒。它应该知道当前任务要用什么,知道哪些经历值得复用,知道哪些事实已经过期,知道哪些资料必须引用,知道哪些信息不该保存。做到这一点,Agent 才真正从会聊天的模型,走向会长期干活的智能体。