MCP 记忆与持久化工具:让 Agent 拥有长期记忆

MCP 记忆与持久化工具设计:Agent 记忆的类型(短期/长期/语义/程序性)、记忆工具的模式(写入/检索/删除)、向量记忆与语义检索、结构化的记忆图谱(实体/关系)、跨会话持久化的实现(存储后端/一致性)、记忆的隐私与治理、记忆工具的上下文管理与性能,以及记忆错误(幻觉/过期/冲突)的防护。

1. Agent 为什么需要记忆

LLM 本身是无状态的:每次对话都从上下文重新开始。MCP 的记忆工具给 Agent 补上"记得住"的能力——记住用户偏好、历史决定、领域知识,跨会话复用。记忆是 Agent 从"每次重新认识你"进化到"越来越懂你"的关键基础设施。

1.1 记忆的类型

记忆类型内容存储形态检索方式
短期记忆当前会话上下文对话窗口直接包含
长期记忆跨会话事实/偏好外部存储检索注入
语义记忆知识/概念向量/知识图谱语义检索
程序性记忆怎么做某事工具/工作流触发加载

1.2 MCP 记忆工具的价值

# 没有记忆工具: 每次会话都要重新交代偏好/历史
# 有记忆工具
# 1) 用户偏好: "上次你说喜欢简洁回复" → 跨会话生效
# 2) 项目上下文: "这个仓库的构建命令" → 记住
# 3) 决策历史: "上次选了方案 A 因为 X" → 避免重复纠结
# 4) 领域知识: 注入团队规范/业务知识

2. 记忆工具的基本模式

2.1 三类核心操作

# 记忆工具的经典三操作
# 1) 写入记忆: remember(key, content, metadata)
# 2) 检索记忆: recall(query, limit) → 相关记忆
# 3) 删除/更新: forget(key) / update(key, content)
# 工具命名示例
#   memory/save / memory/search / memory/delete
# 原则: 记忆操作要可检索(不是"存了就忘")

2.2 写入的工程规范

# 写什么
# 1) 事实性记忆: 偏好、事实、决定(可验证)
# 2) 少写过程噪音: 别把每句对话都存(记忆污染)
# 3) 带元数据: 时间、来源、重要性、主题
# 4) 可冲突: 旧记忆与新事实冲突 → 更新而非堆叠
# 模型主动存 vs 工具自动存
# 主动: 模型判断"这值得记住"再存(精确,需模型判断力)
# 自动: 关键事件自动落库(全,但噪音多)
# 实践: 混合——自动捕获 + 模型精选

2.3 检索的工程规范

# 检索什么
# 1) 按主题/实体检索(结构化)
# 2) 按语义检索(向量,近似相关)
# 3) 时间范围过滤(近期优先)
# 检索结果注入上下文(不超过预算 token)
# 重要性: 检索要"少而准",别把记忆库全倒进上下文

3. 向量记忆与语义检索

3.1 语义记忆的形态

# 向量记忆: 把记忆文本向量化,按语义相似检索
# 适用: 自然语言描述的记忆(偏好、笔记、讨论)
# 优点: 不问"精确关键词"也能召回相关
# 需要: 向量存储(向量数据库/嵌入 + 索引)
# 工作流
# 1) 写入时: 内容 → 嵌入向量 → 存向量 + 原文
# 2) 检索时: 查询 → 嵌入 → 相似度 Top-K

3.2 向量工具的设计

# 工具: memory/search(query, topK)
# 服务器内部
# 1) 查询文本嵌入
# 2) 向量相似检索(余弦相似度)
# 3) 返回 Top-K(带分数,供模型判断相关度)
# 注意
# 1) 嵌入模型与写入/检索一致(同模型)
# 2) 阈值: 相似度低于阈值别硬给(避免无关记忆)
# 3) 结合关键词过滤(精确 vs 语义互补)

4. 结构化记忆与知识图谱

4.1 记忆图谱(实体-关系)

# 场景: 记住"用户与项目、决定、偏好的关系"
# 结构化存储: 实体(用户/项目/工具)+ 关系(属于/偏好/决定)
# 查询: "这个项目用了什么技术栈" → 实体关系检索
# 优点
# 1) 精确(关系明确)
# 2) 可推理(A 关联 B,B 关联 C → 间接)
# 3) 可更新(关系增删改)
# 代价: 维护成本高(实体抽取/关系建模)

4.2 图谱 vs 向量的选择

维度向量记忆记忆图谱
检索语义相似关系精确
查询类型“关于 X 的笔记”“X 与 Y 的关系”
维护低(嵌入即可)高(结构化建模)
更新重嵌入关系操作
组合常用精确场景
# 实践: 向量为主(覆盖大部分自然记忆)
#       图谱用于"关系密集"领域(项目/人员/决策)
#       可共存: 图谱实体也能向量化混合检索

5. 跨会话持久化的实现

5.1 存储后端选型

后端特点适用
SQLite 本地零部署、单用户本机工具
Redis快、可过期短期偏好/缓存
向量库(Milvus/pgvector)语义检索大规模记忆
文档库(对象存储)原始内容长文档记忆
# 选型: 单用户本机 → SQLite;多用户服务 → 服务器数据库
# 记忆是"长期资产": 选可靠持久化(别存内存/临时)

5.2 一致性与版本

# 记忆更新的并发
# 同一记忆并发写 → 版本号 + 乐观锁
# 冲突: 新事实覆盖旧事实要可追溯(保留历史或 diff)
# 删除: 用户要求删除记忆 → 真删(含向量索引)
# 备份: 记忆是用户资产,定期备份/导出

5.3 记忆的上下文预算

# 检索注入必须控制 token
# 1) 检索 Top-K 按预算限制
# 2) 记忆条目截断(只注入关键部分)
# 3) 模型可"需要更多时再深查"(分级注入)
# 4) 别把整个记忆库塞进上下文(超预算 + 噪音)

6. 记忆的隐私与治理

6.1 记忆即用户数据

# 记忆可能包含敏感信息(偏好、联系方式、业务秘密)
# 治理要求
# 1) 明确告知: 用户知道"Agent 记住了什么"
# 2) 可查看: 提供"查看我的记忆"工具
# 3) 可删除: 一键清除(GDPR 删除权意识)
# 4) 最小化: 只存必要信息,不默认全存
# 5) 加密: 敏感记忆加密存储(见安全实践)

6.2 记忆的边界

# 记忆使用边界
# 1) 单用户记忆隔离(别串用户)
# 2) 团队/共享记忆: 权限控制(谁能看/写)
# 3) 敏感记忆: 默认不自动写,需确认
# 4) 过期清理: 不重要记忆定期清理(防污染检索)

7. 记忆错误的防护

7.1 三类记忆错误

错误表现防护
幻觉记忆模型"以为"记住了不存在的事检索带来源 + 置信度
过期记忆事实变了仍按旧记忆回答带时间戳 + 更新机制
记忆污染噪音/错误写入干扰检索写入质量门 + 定期清理

7.2 让记忆"可证伪"

# 记忆应带来源与时间(谁、何时、从哪来)
# 回答时基于记忆但可质疑: "根据 3 月的记录……"
# 冲突时: 多个记忆冲突 → 显式标注,别静默选一个
# 用户纠正: 提供"纠正记忆"的路径(更新而非追加)

8. 记忆工具的测试

# 1) 写入-检索闭环: 存 → 语义检索能召回
# 2) 冲突更新: 新记忆覆盖旧记忆,检索返回新值
# 3) 过期清理: 过期条目被排除在检索外
# 4) 隔离: 多用户记忆互不串
# 5) 删除: 删除后检索不到(含向量)
# 6) 上下文预算: 检索注入不超过限制

9. 常见陷阱

  • 记忆污染:把所有对话都存,检索全是噪音——只存值得记的。
  • 记忆幻觉:检索到的记忆当作"当前事实",不核对时间/来源。
  • 串用户:多用户共用记忆库,隐私泄露。
  • 遗忘能力缺失:只有"存"和"取",没有"改"和"删"。
  • 上下文爆炸:记忆检索超预算,反而稀释主上下文。

10. 总结

MCP 记忆与持久化工具的工程要点:记该记的(事实/偏好)、检索少而准、可查看可删除、带时间来源。向量记忆服务语义检索、图谱服务关系查询、存储选可靠后端、隐私治理当用户数据对待。记忆让 Agent 从"每次重新认识"进化为"越来越懂"——但要有克制地记、有把握地用、有边界的存。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「AI工程」更多文章

  1. MCP 发布与生态:让工具被更多人发现和使用
  2. MCP 浏览器与网页工具:让 Agent 操作真实网页
  3. MCP 工具调用可靠性:超时、重试与长任务