跳转至

四十四:Agent记忆

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484597&idx=1&sn=2414166a74fbaf0820ea66add4b240f4&chksm=f01eb7ccc7693eda9ea3b20040d2f4d22934c42fadaa41abd2139e342677e0e0979a26366811#rd

1. 学习范围

本日主题是 Memory-based Agent,重点是 4.4.2 Memory-based Agent,同时覆盖 4.4.1 基本概念、4.4.3 如何实现 Memory-based Agent、4.4.4 如何评估 Memory-based Agent。 本日覆盖: - Agent Memory 的定义、作用和边界。

  • 短期记忆、长期记忆、情节记忆、语义记忆、程序性记忆、反思记忆。

  • Memory-based Agent 的核心架构。

  • 记忆写入、检索、更新、压缩、遗忘和冲突处理。

  • Memory-based Agent 与 RAG、Agent Planning、Tool Use 的关系。

  • Memory-based Agent 的评估指标、实验设计、常见失败模式和生产化要点。

img

img

2. Agent Memory 的基本定义

Agent Memory 是 Agent 在一次或多次交互、任务执行、环境探索中保存、检索和利用信息的机制。它让 Agent 不只依赖当前 prompt,而能够利用过去的用户偏好、任务状态、历史观察、行动结果和经验总结。 Memory 的核心目标包括: - 保持对话和任务连续性。

  • 保存用户偏好和长期事实。

  • 复用过去经验,减少重复探索。

  • 支持长期任务的状态追踪。

  • 为规划、工具调用和反思提供上下文。

Memory 不是简单的聊天记录拼接。有效记忆系统需要决定哪些信息值得保存、如何表示、什么时候检索、如何合并到上下文、如何更新或删除。

3. Memory-based Agent 的核心定义

Memory-based Agent 是把记忆作为核心能力的 Agent。它不仅能调用工具和生成答案,还能围绕记忆建立感知、决策、行动、反馈和自我改进循环。 典型循环:

User / Environment Input
        |
        v
Memory Retrieval -> Context Construction -> Planning / Reasoning
        |                                      |
        v                                      v
Memory Update <- Observation / Feedback <- Action / Tool Use
Memory-based Agent 的关键不在于“有数据库”,而在于 Agent 能够把记忆用于决策。数据库只是存储层,真正的能力来自记忆选择、检索、融合、更新和评估。

img

4. 短期记忆

短期记忆通常保存当前会话或当前任务窗口内的信息,例如最近几轮对话、当前任务目标、临时变量、工具返回结果、正在执行的计划。 短期记忆的特点: - 生命周期短,通常随 session 或任务结束而清理。

  • 高相关性,直接影响当前上下文。

  • 容易受上下文窗口限制。

  • 常以 message history、scratchpad、working memory 的形式存在。

短期记忆常用于: - 对话上下文保持。

  • 多步工具调用中的中间状态。

  • 当前计划和子任务追踪。

  • 最近错误和即时修正。

5. 长期记忆

长期记忆保存跨会话、跨任务仍然有价值的信息,例如用户稳定偏好、事实档案、过往项目、历史经验、可复用策略。 长期记忆的特点: - 生命周期长,通常持久化到数据库。

  • 检索需要选择机制,不能全部塞入上下文。

  • 需要更新、去重、合并和遗忘策略。

  • 风险更高,因为错误记忆可能长期污染 Agent 行为。

长期记忆常用存储: - Key-value store:按用户、任务或实体保存结构化字段。

  • Vector database:按语义相似度检索文本记忆。

  • Document store:保存原始文档、会话摘要、事件记录。

  • Graph database:保存实体、关系、时间线和依赖。

6. 语义记忆

语义记忆保存相对稳定的事实、概念、偏好和知识。例如: - 用户偏好:“用户喜欢简洁、工程化的解释。”

  • 项目信息:“项目 A 使用 FastAPI 和 PostgreSQL。”

  • 领域事实:“Milvus 是向量数据库,支持近似向量检索。”

语义记忆适合结构化或半结构化表示。常见字段包括:

subject: 用户 / 项目 / 组织 / 任务
predicate: 偏好 / 使用 / 负责 / 禁止
object: 具体事实
confidence: 置信度
source: 来源对话或文档
updated_at: 更新时间
语义记忆的关键问题是事实更新。当用户偏好变化时,系统需要覆盖旧记忆,而不是同时保留矛盾事实。

7. 情节记忆

情节记忆保存过去发生过的事件、轨迹和经验,强调时间、场景、行动和结果。例如: - 某次任务中 Agent 先搜索错误关键词,后来通过限定来源解决问题。

  • 某次代码修改因为没有跑测试导致回归。

  • 用户在某天要求把学习文档改成参考文档风格。

情节记忆适合支持: - 复盘过去行为。

  • 从成功或失败案例中学习。

  • 长期项目状态恢复。

  • 反思和策略调整。

情节记忆通常包含:

time, context, goal, action, observation, result, reflection

8. 程序性记忆

程序性记忆保存“如何做事”的规则、流程和技能。例如: - 生成学习包时先写学习文档,再写面试题,再写答案。

  • 使用微信公众号 HTML 时复制浏览器渲染正文,而不是复制源码。

  • 遇到工具调用失败时先检查参数,再重试。

程序性记忆更接近 Agent 的操作规范或技能库。它通常不直接回答事实问题,而是影响 Agent 的行为策略。 程序性记忆可以来自: - 人工写入的 system/developer instructions。

  • 从过去任务中总结出的操作流程。

  • 经过验证的工具调用模板。

  • 多次失败后的反思规则。

9. 反思记忆

反思记忆保存 Agent 对自身行为的总结,通常来自失败、反馈或评估结果。例如:

错误:上次只检索了相似标题,没有验证原文。
改进:回答论文方法时必须打开论文摘要和方法部分,区分作者结论与自己的推断。
反思记忆的价值在于帮助 Agent 避免重复错误。它与情节记忆的区别是:情节记忆记录发生了什么,反思记忆提炼下一次应如何做。 反思记忆适合与 Reflexion、LATS、自我评估、任务复盘结合。

10. Memory-based Agent 的架构组件

Memory-based Agent 通常包含以下组件: - Memory Writer:决定是否写入记忆、写入什么、写入到哪里。

  • Memory Store:保存记忆的底层存储,例如 KV、向量库、图数据库。

  • Memory Retriever:根据当前任务检索相关记忆。

  • Memory Ranker:对候选记忆排序、过滤、去重。

  • Context Builder:把检索到的记忆合并进 prompt 或状态。

  • Memory Updater:更新、合并、删除或降权旧记忆。

  • Controller / Policy:决定何时读记忆、何时写记忆、何时忽略记忆。

完整系统通常不是单一 memory API,而是一套围绕记忆生命周期的控制机制。

11. 记忆写入机制

记忆写入决定哪些信息进入长期存储。写入策略通常包括: - Always write:每轮都写,简单但噪声大。

  • Rule-based write:只写用户偏好、明确事实、任务结论。

  • LLM-based extraction:用模型从对话中抽取可持久化记忆。

  • Event-triggered write:任务完成、失败、用户确认后写入。

  • Human-approved write:高风险记忆需要用户确认。

优秀的写入策略要平衡 recall 和 precision。写得太少会丢上下文,写得太多会造成噪声、隐私风险和检索成本。

12. 记忆表示

img

记忆可以用多种形式表示: - 原始文本:保留完整上下文,但冗余大。

  • 摘要文本:压缩信息,但可能丢细节。

  • 结构化记录:便于更新和过滤,但抽取成本高。

  • 向量 embedding:便于语义检索,但不适合精确约束。

  • 图结构:适合实体关系、依赖和时间线,但构建复杂。

常见的长期记忆记录:

{
  "memory_id": "m_001",
  "user_id": "u_123",
  "type": "preference",
  "content": "用户希望学习文档采用参考文档风格,而不是问题驱动。",
  "source": "conversation",
  "confidence": 0.92,
  "created_at": "2026-07-06",
  "updated_at": "2026-07-06"
}

13. 记忆检索机制

记忆检索根据当前任务从存储中找出有用信息。常见策略包括: - Recency retrieval:优先最近记忆。

  • Semantic retrieval:基于 embedding 相似度。

  • Keyword retrieval:基于关键词或 BM25。

  • Entity retrieval:基于用户、项目、实体、主题过滤。

  • Hybrid retrieval:结合语义相似度、关键词、元数据过滤和时间权重。

  • Planner-driven retrieval:由 Agent 先判断需要什么记忆,再定向检索。

检索不应只追求相似度。Memory-based Agent 更关心“当前决策是否需要这条记忆”。

14. 记忆排序与融合

检索后需要排序和融合。常用信号包括: - 语义相似度。

  • 时间新鲜度。

  • 来源可信度。

  • 用户确认程度。

  • 记忆类型。

  • 与当前任务目标的匹配程度。

  • 是否与其他记忆冲突。

融合方式包括: - 直接插入 prompt。

  • 压缩为上下文摘要。

  • 转成结构化状态。

  • 转成 tool constraints。

  • 只用作 reranker 特征,不直接展示给模型。

15. 记忆更新与遗忘

Memory-based Agent 必须处理记忆变化。常见更新操作包括: - Add:新增事实、偏好、事件。

  • Update:覆盖旧事实,例如用户偏好变化。

  • Merge:合并重复记忆。

  • Decay:降低过旧记忆权重。

  • Delete:删除错误、敏感或用户要求删除的记忆。

  • Archive:从热记忆转入冷存储。

遗忘不是缺陷,而是长期记忆系统的必要能力。没有遗忘机制的 Agent 容易积累噪声、过时事实和隐私风险。

16. 记忆冲突处理

记忆冲突是长期系统中的常见问题。例如:

旧记忆:用户喜欢详细解释。
新记忆:用户要求回答尽量简短。
处理方式包括: - 时间优先:新记忆覆盖旧记忆。

  • 置信度优先:高置信度记忆覆盖低置信度记忆。

  • 范围优先:具体任务偏好覆盖全局偏好。

  • 用户确认:对关键冲突进行澄清。

  • 多版本保留:保存历史,但检索时只启用当前版本。

冲突处理要显式化,不能让模型在 prompt 中自行猜测。

17. Memory 与 RAG 的关系

Memory 和 RAG 都涉及检索,但目标不同。 RAG 通常检索外部知识文档,用来回答事实问题。Memory 检索 Agent 过去经历、用户偏好、任务状态和经验,用来保持连续性和改进行为。 对比:

RAG: "这个问题需要哪些外部知识?"
Memory: "我过去知道什么与当前用户/任务相关?"
实际系统中二者会结合: - RAG 检索产品文档。

  • Memory 检索用户偏好和历史决策。

  • Agent 将二者共同用于规划和回答。

18. Memory 与 Planning 的关系

Planning 决定 Agent 接下来做什么,Memory 提供规划所需的历史上下文。 Memory 可以支持: - 任务分解:使用过去类似任务的步骤。

  • 工具选择:记住某类任务哪个工具有效。

  • 错误避免:调用反思记忆规避旧错误。

  • 状态恢复:长期任务中继续未完成计划。

  • 个性化计划:按用户偏好调整步骤和输出形式。

没有 Memory 的 Agent 通常只能在当前上下文里规划,跨会话长期任务能力弱。

19. Memory 与 Tool Use 的关系

Memory 可以被实现成工具,也可以是 Agent 内部状态。 作为工具时,Agent 显式调用:

search_memory(query)
write_memory(content, metadata)
update_memory(memory_id, patch)
delete_memory(memory_id)
作为内部状态时,系统在模型调用前自动检索并注入相关记忆。 显式工具的优势是可控、可审计;自动记忆的优势是体验自然。生产系统常把两者结合:关键记忆写入需要工具或审批,低风险上下文检索可以自动进行。

20. Memory-based Agent 的实现流程

一个可落地的实现流程:

1. 定义记忆类型:profile, preference, task_state, episode, reflection
2. 设计 schema:content, metadata, confidence, source, timestamp
3. 选择存储:KV / SQL / vector DB / graph DB
4. 设计写入策略:规则、模型抽取、事件触发、人工确认
5. 设计检索策略:metadata filter + semantic search + recency
6. 设计上下文构造:排序、压缩、冲突处理
7. 设计更新策略:merge, overwrite, delete, decay
8. 设计评估:记忆命中率、任务成功率、幻觉率、隐私风险
实现时应先从小规模、明确 schema 的记忆开始,而不是一开始就保存所有对话。

21. 记忆评估指标

Memory-based Agent 的评估不能只看最终回答好不好,还要评估记忆链路。 常见指标: - Write precision:写入的记忆是否真的有长期价值。

  • Write recall:重要信息是否被写入。

  • Retrieval precision:检索出的记忆是否相关。

  • Retrieval recall:关键记忆是否被召回。

  • Memory utilization:模型是否真正使用了检索记忆。

  • Conflict resolution accuracy:冲突记忆是否处理正确。

  • Task success rate:长期任务是否完成。

  • Personalization quality:个性化是否符合用户偏好。

  • Hallucination rate:是否编造不存在的记忆。

  • Privacy and deletion compliance:是否遵守隐私和删除要求。

22. 评估数据集与实验设计

评估 Memory-based Agent 常用多轮、多会话、多任务数据。实验需要设计: - Longitudinal setting:跨多个 session 的长期交互。

  • Hidden preference:用户偏好在早期出现,后续任务需要使用。

  • State carryover:任务状态跨会话延续。

  • Contradiction update:后续信息覆盖早期信息。

  • Distractor memory:加入无关或相似但错误的记忆。

  • Adversarial memory:测试 prompt injection 和记忆污染。

有效实验应该区分三类错误: - 没写入关键记忆。

  • 写入了但没检索到。

  • 检索到了但模型没正确使用。

23. 常见失败模式

Memory-based Agent 常见失败包括: - 记忆污染:错误信息被长期保存。

  • 过度个性化:把偶然偏好当作长期偏好。

  • 检索漂移:相似但无关的记忆被召回。

  • 过时记忆:旧事实覆盖新事实。

  • 上下文拥塞:塞入太多记忆导致模型忽略关键内容。

  • 隐私泄露:跨用户或跨租户记忆混淆。

  • 自证循环:Agent 用自己的错误记忆强化错误结论。

  • 不可解释:无法说明某个行为受哪条记忆影响。

24. 生产化原则

生产环境中的 Memory-based Agent 应遵守: - 默认最小写入:只保存有明确价值的记忆。

  • 元数据隔离:必须按 user_id、tenant_id、project_id 过滤。

  • 可追溯:每条记忆有来源和时间。

  • 可删除:用户可以删除长期记忆。

  • 可审计:关键记忆读写有日志。

  • 可降级:记忆服务不可用时 Agent 仍能基本工作。

  • 可评估:上线前有记忆链路指标。

  • 可控注入:检索记忆不能无条件进入高权限工具调用。

25. 核心总结

Memory-based Agent 的本质是让 Agent 能跨时间利用经验。它的难点不在存储,而在记忆生命周期管理:写入什么、如何表示、如何检索、如何合并、如何更新、如何遗忘、如何评估。 面试表达时应突出三点: - Memory 是 Agent 的长期状态和经验系统,不等同于聊天记录。

  • 高质量 Memory-based Agent 需要写入、检索、更新、冲突处理、隐私和评估的完整闭环。

  • Memory 与 RAG、Planning、Tool Use、Reflection 共同构成长期自主 Agent 的基础能力。

26. 参考资料

  • Memory Sharing for Large Language Model based Agents: https://arxiv.org/abs/2404.13501

  • LangChain long-term memory documentation: https://docs.langchain.com/oss/python/langchain/long-term-memory

  • LangChain v0.1 Agent with Memory legacy page: https://python.langchain.com/v0.1/docs/modules/memory/agent_with_memory/

  • https://arxiv.org/pdf/2512.13564

            预览时标签不可点
    

    <div class="