四十四: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 的评估指标、实验设计、常见失败模式和生产化要点。
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
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 先搜索错误关键词,后来通过限定来源解决问题。
-
某次代码修改因为没有跑测试导致回归。
-
用户在某天要求把学习文档改成参考文档风格。
情节记忆适合支持: - 复盘过去行为。
-
从成功或失败案例中学习。
-
长期项目状态恢复。
-
反思和策略调整。
情节记忆通常包含:
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. 记忆表示¶
记忆可以用多种形式表示: - 原始文本:保留完整上下文,但冗余大。
-
摘要文本:压缩信息,但可能丢细节。
-
结构化记录:便于更新和过滤,但抽取成本高。
-
向量 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 检索用户偏好和历史决策。
-
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. 设计评估:记忆命中率、任务成功率、幻觉率、隐私风险
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="