资讯动态

娜样学AI(二十五|25):Agent Memory 不是聊天记录——从记忆写入、召回到 Runtime 编排

发布时间:2026/10/15 4:30:30 来源:尧图企业网站定制
2026年10月14日关键词Agent Memory、Long-term Memory、State、Checkpoint、Memory Retrieval、Context Engineering、Agent Runtime、Memory Consolidation一、今天学了什么以前我容易把 Memory 理解成“把聊天记录保存下来下次对话再读取”。但今天发现真正的 Agent Memory 并不是简单保存历史而是需要解决一系列工程问题Memory Write哪些信息值得长期保存Memory Storage记忆如何分类、去重和持久化Memory Retrieval什么时候召回、由谁决定召回Context Injection哪些记忆应该进入本轮模型上下文Memory Management记忆过期、冲突或失效后如何维护这些能力最终需要与 Agent Runtime、Context Builder 和 LLM 协作才能形成完整的记忆系统。今天最重要的理解是Memory 负责让重要信息能够跨会话保留Runtime 负责管理记忆的存取和权限Context Builder 决定哪些信息进入模型输入而 LLM 负责利用这些信息完成当前任务。二、Memory、History、State 和 RAG 到底有什么区别这是今天首先需要理清的问题。以前我会把所有“模型以后还可能用到的信息”统称为 Memory但这种理解过于宽泛。概念保存什么主要作用域Chat History原始对话消息当前对话State计划、执行步骤、工具结果、重试次数当前任务或 ThreadCheckpoint某一时刻的 State 快照状态恢复与持久化Long-term Memory用户偏好、项目决策、可复用经验跨会话、跨 ThreadRAG Knowledge Base企业文档、制度、外部知识应用或组织Context本轮真正发送给 LLM 的信息单次模型调用1. State 不等于 Memory例如一个 Agent 正在完成订单查询任务state { task: 查询订单状态, current_step: 2, retry_count: 1, tool_result: timeout }这些数据主要用于管理当前任务的执行过程。即使后续通过 Checkpoint 保存下来它们也不一定值得进入长期记忆。相反用户偏好 回答技术问题时优先解释底层原理并提供简短 Python 示例。这类信息具有跨会话复用价值更适合作为 Long-term Memory。2. Memory 不等于 Context这是我今天非常重要的认知修正信息写入 Memory并不代表 LLM 自动知道了这些信息。因为写入外部 Memory 不会改变模型参数。只有经过以下操作记忆才可能影响当前这一次模型推理。Memory Storage ↓ Memory Retrieval ↓ Context Builder ↓ LLM Input例如用户曾经要求“优先提供 Python 原生实现”。这条偏好虽然已保存但如果本轮模型输入没有注入它模型未必会按照这一偏好回答。所以Memory 解决信息能否长期保存的问题Context Engineering 解决当前模型能否获得并利用这些信息的问题。三、Memory 的业务分类与知识形态为什么不能混淆今天接触到了两套不同的分类方式。1. 按业务内容分类学习材料将 Memory 分为类型主要内容user用户长期偏好、稳定约束feedback用户纠正的错误、明确反馈project项目技术栈、工程决策、关键约束reference文档、链接、资料位置例如user: 用户希望学习 Agent / RAG 开发。 feedback: 用户要求数学公式能够正常渲染。 project: 当前项目使用 Python 和 LangGraph。 reference: 项目架构文档的位置。这套分类主要解决这条记忆记录的是什么业务信息但它本身不等于访问权限分类。实际系统还需要单独使用 Namespace、Scope 和 Authorization 控制数据归属与访问范围。2. 按知识形态分类Agent Memory 理论中还经常使用Semantic Memory语义记忆保存相对稳定的事实与知识。例如用户熟悉 Python正在学习 Agent Runtime。Episodic Memory情景记忆保存过去发生过的事件或经验。例如上一次执行文件写入工具时由于权限不足而失败。Procedural Memory程序性记忆保存行为规则与操作方法。例如执行具有副作用的写操作前必须检查权限。需要特别强调业务分类与知识形态是两套不同的分类维度。一条 Project Memory 可以是 Semantic Memory也可能包含 Episodic Memory。真正落地时还需要第三个维度Memory Category ↓ 记录什么业务内容 Memory Knowledge Type ↓ 属于事实、经验还是规则 Namespace / Scope ↓ 在哪些用户、项目中有效 Authorization ↓ 谁有权读取和修改这四个维度不能混为一谈。四、Memory Write为什么不能把聊天记录直接存起来长期记忆的写入不是简单地Conversation → Append to Memory而是更接近一条数据治理流水线Conversation / Tool Result ↓ Extract Candidate Memory ↓ Classification ↓ Deduplication ↓ Conflict Resolution ↓ Persistence ↓ Update Memory Index1. 为什么需要候选记忆提取并不是所有聊天内容都具有长期价值。例如今天几点了 某次工具返回的完整日志 当前任务执行到了第几步 未经确认的模型猜测这些内容通常不适合直接保存为长期记忆。而下面的信息可能值得长期保存用户稳定偏好 长期项目目标 重要技术决策 经过验证的失败经验所以 Memory Write 的核心不是“存得越多越好”而是筛选具有长期复用价值的信息。2. 为什么使用 MEMORY.md 索引采用轻量索引与明细文件分离的设计可以理解为Memory Storage │ ├── MEMORY.md │ └── 记忆索引 │ ├── user/ │ └── 用户偏好 │ ├── project/ │ └── 项目记忆 │ ├── feedback/ │ └── 用户反馈 │ └── reference/ └── 参考信息具体记忆明细可以使用 Markdown 文件并通过 YAML Frontmatter 保存名称、描述和类型等元数据。这种设计的价值是模型先看到简短的记忆目录需要时再读取详细内容而不是把全部长期记忆一次性塞进 Context。3. Memory Consolidation 需要处理什么Memory Consolidation记忆整合不仅包括提取信息还涉及Deduplication相同内容去重。Conflict Resolution解决新旧记忆冲突。Expiration识别已经失效的信息。Versioning保留必要的更新记录。Concurrency Control防止并发修改破坏数据。例如用户以前偏好深圳后来明确更改为杭州。如果系统同时保留两条互相冲突的有效偏好后续 Agent 就可能作出错误决策。因此需要明确记忆的更新策略而不是无限追加。consolidate-lock、PID 和 mtime 等设计用于协调后台整合任务及识别可能的陈旧锁。但需要注意PID 和 mtime 只能辅助锁状态判断并不天然保证完整的并发安全。实际实现仍需要可靠的加锁、异常释放以及状态一致性机制。五、Memory Retrieval召回到底由 LLM 决定还是 Runtime 决定这是今天最核心的追问我最开始容易认为Memory 是给 LLM 使用的因此应该由 LLM 自己决定什么时候召回。但现在更准确的理解是Memory Retrieval 可以由 Runtime 自动触发也可以由 LLM 主动发起还可以采用混合机制。需要先把三个动作拆开是否触发召回选择哪些候选记忆谁真正执行读取并注入 Context1. Runtime 固定注入例如每轮模型调用前Runtime 自动加载用户 Profile。User Request ↓ Runtime ↓ Load User Profile ↓ Context Builder ↓ LLM优点稳定、实现简单。缺点可能注入与当前任务无关的信息增加 Token 消耗。2. Runtime 自动检索当长期记忆很多时Runtime 可以根据当前问题通过Scope Filtering ↓ Keyword / Vector Retrieval ↓ Reranking ↓ Context Injection自动选择相关记忆这里的 Scope Filtering 很关键。例如用户 A 的任务必须先限制在其有权限访问的记忆范围内再进行相关性检索。不能因为用户 B 的记忆语义相似就将其召回。3. LLM 主动调用 Memory Tool另一种方式是让模型自己判断是否需要背景信息。User Query ↓ LLM 发现缺少项目背景 ↓ memory_search() ↓ Runtime 执行检索 ↓ Memory Observation ↓ LLM 继续回答这是一种按需检索方式具有较好的灵活性。但缺点也明显模型可能忘记检索或者生成不合适的检索条件。4.设计理解一种协作模式Runtime 加载 MEMORY.md 索引 ↓ LLM 根据任务判断需要哪些记忆 ↓ LLM 发出读取请求 ↓ Runtime 执行文件读取 ↓ 结果进入 Context但不应据此推断所有 Agent Memory 系统都使用这种方式。对于生产级 Agent我更倾向于混合设计稳定偏好固定注入项目记忆按 Scope 自动检索任务执行中缺少细节时再允许 LLM 主动补查。这样既能降低模型漏查关键记忆的风险也能够控制上下文体积。六、Memory 与 Context Compaction 为什么是互补关系昨天学习了 Context Compaction上下文压缩今天进一步把它与 Memory 联系起来。两者的职责不同机制核心目标Context Compaction缩短当前对话历史控制上下文预算Long-term Memory保存跨会话有价值的信息Memory Retrieval按需找回相关记忆Context Builder控制实际注入模型的信息一个完整过程可以表示为Conversation History ↓ 提取长期有效的信息 ↓ Memory Storage ↓ 旧历史触发 Compaction ↓ 生成历史摘要 ↓ 下一轮任务 ↓ Memory Retrieval ↓ Context Builder ↓ LLM这里有一个重要的工程细节Memory 写入成功不一定意味着当前会话立即使用了新记忆。具体何时可见取决于 Runtime 的加载、检索和注入策略。长期记忆的写入也可以分成两种时机Hot Path 与 BackgroundHot Path热路径在当前任务执行过程中提取和写入记忆。优点可能及时生效。缺点增加主链路延迟也可能干扰当前任务。Background后台处理在任务结束后或其他合适时间进行记忆整理。优点主链路更轻适合批量去重和整合。缺点新记忆可能不会立即对其他会话可见。因此实际设计需要在实时性、成本与记忆质量之间做取舍。七、Memory 如何评估不能只看 Recallk今天还形成了一个值得继续研究的问题如果 Memory 系统成功召回了一条相关记忆就说明这次召回一定有价值吗不一定。例如用户已经修改了项目技术方案但 Memory 仍召回旧版本架构。即使这条记忆与问题高度相关也可能让 Agent 作出错误决策。因此需要至少从三个方面评估评估维度关注的问题Memory Write Quality写入的信息是否真实、必要、不过期Memory Retrieval Quality是否召回正确且有权限访问的记忆Downstream Task Quality召回后是否真正提高任务完成效果例如可以关注Memory Precision写入或召回内容的相关性和正确性。Recallk前 k 条结果是否覆盖目标记忆。Duplicate Rate重复记忆比例。Stale Memory Rate过期记忆比例。Task Success Rate引入 Memory 后的任务完成率。Privacy Leakage是否发生跨用户或跨项目的信息泄漏。我认为尤其需要关注最后两项。一个检索指标很高的 Memory 系统不一定能够提高最终 Agent 的任务成功率。如果记忆过时、冲突或者错误注入反而可能产生负面效果。因此还应该使用有记忆与无记忆的任务对照评测观察其对最终任务结果的影响。八、今天最重要的三个认知修正认知一Memory 不是不断追加的聊天记录我原来以为保存 Conversation History就已经实现了长期记忆。实际上长期记忆还需要提取、分类、治理、持久化、索引、召回和更新。它更接近一个具有生命周期管理能力的信息系统。认知二Memory Retrieval 不一定由 LLM 独立决定我原来以为LLM 自己判断需要什么记忆再调用对应工具。实际上Runtime 可以自动触发检索也可以按规则固定注入LLM 则可以在执行过程中主动补查。真正的读取权限、数据范围和上下文预算应该由确定性的 Runtime 控制。认知三Memory 保存成功不代表模型已经使用即使一条记忆已经持久化模型也只有在相应内容进入本轮 Context 后才可能利用它。因此 Memory Storage 与 Context Injection 必须分开理解。九、和真实 Agent 项目的关系如果以后t 增加 Long-term Memory可以考虑采用下面的架构Agent Conversation ↓ Memory Candidate Extraction ↓ Validation / Deduplication ↓ Namespace-based Storage ↓ Memory Index ↓ New User Request ↓ Scope Filtering ↓ Memory Retrieval ↓ Context Builder ↓ LLM Decision ↓ Agent Runtime这套设计至少需要明确哪些信息允许写入长期记忆用户与项目的 Namespace 怎样划分新旧记忆冲突时怎样更新Runtime 何时自动召回LLM 何时可以主动读取如何评价 Memory 对任务成功率的真实贡献十、今天留下的问题Memory 系统的召回效果是否应该结合最终 Task Success Rate 评价如果召回了一条相关但过期的记忆应该如何衡量其负面影响当用户的新偏好与已有 Long-term Memory 冲突时应该直接覆盖旧记忆、保留版本还是要求用户确认如果 Agent 需要同时服务多个用户和项目怎样设计 Namespace、Scope 和 Authorization避免不同用户之间发生 Memory Leakage记忆泄漏今天最大的收获是Agent Memory 的核心不在于保存多少信息而在于哪些信息值得保存、怎样持续维护以及什么时候把正确的信息提供给模型。真正可靠的 Memory 系统需要将Memory Storage、Memory Retrieval、Context Engineering 和 Agent Runtime连接起来让记忆既能够跨会话复用又不会因为过期、冲突或越权访问而影响任务执行。参考资料LangChain / LangGraph — Memory ConceptsLangChain — Short-term MemoryAnthropic — Memory ToolAnthropic — Context Editing

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑