mcpField
M
memory-systems

memory-systems

github.com/guanyangAgent 工作流984400 次安装1 天前更新
代码仓库

关于 memory-systems

面向需要跨会话持久记忆的 Agent 的设计技能,帮助开发者按检索需求选择记忆架构,并仅在简单存储不足时增加结构。

主要功能

  1. 01从工作记忆到时序图的分层
  2. 02按检索模式选择框架
  3. 03语义、实体、时序与混合检索
  4. 04记忆整合与故障恢复
  5. 05基于基准测试的评估指导

适用场景

  1. 01设计跨会话 Agent 记忆
  2. 02保持跨对话实体一致
  3. 03为时序或多跳查询选型
  4. 04评估记忆检索质量

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/guanyang/open-agent-hub --skill memory-systems

安装后在 Claude Code 中输入/memory-systems确认已加载。

附带文件references/implementation.mdscripts/memory_store.py

详细介绍

记忆系统设计

记忆提供持久化层,使 Agent 能够在不同会话间保持连续性,并基于累积的知识进行推理。简单的 Agent 完全依赖上下文来记忆,会在会话结束时丢失所有状态。复杂的 Agent 则会实现分层记忆架构,在即时上下文需求与长期知识留存之间取得平衡。从向量存储到知识图谱,再到时序知识图谱,这一演进体现了人们不断增加对结构化记忆的投入,以提升检索和推理能力。

何时启用

在以下情况下启用此技能:

  • 构建必须跨会话持久保存知识的 Agent
  • 在记忆框架(Mem0、Zep/Graphiti、Letta、LangMem、Cognee)之间进行选择
  • 需要在不同对话中保持实体一致性
  • 实现基于累积知识的推理
  • 设计可在生产环境中扩展的记忆架构
  • 根据基准测试(LoCoMo、LongMemEval、DMR)评估记忆系统
  • 构建具备自动实体/关系提取和自我改进记忆能力的动态记忆系统(Cognee)

对于其他技能负责的相关工作,请勿启用此技能:

  • 基于文件的临时记录、运行日志和工具输出卸载:filesystem-context。
  • 对话压缩或便于人类阅读的交接摘要:context-compression。
  • 单次轨迹中的遮蔽、前缀缓存、令牌预算或检索范围限定:context-optimization。
  • 基于 RDF 状态的形式化信念/愿望/意图模型:bdi-mental-states。

核心概念

可以将记忆视为一个从易失性上下文窗口到持久化存储的连续谱。优先采用满足检索需求的最简单层,因为基准测试证据表明,对于某些记忆工作负载,工具复杂度不如可靠检索重要(claim-memory-locomo-filesystem-baseline)。只有当检索质量下降,或 Agent 需要多跳推理、关系遍历或时光回溯查询时,才增加结构(图谱、时间有效性)。

详细主题

生产级框架概览

根据 Agent 所需的主要检索模式选择框架。使用下表缩小候选范围,然后结合下文的基准数据进行验证。

框架架构最适合权衡
Mem0向量存储 + 图记忆,可插拔后端多租户系统、广泛集成对多 Agent 的专门支持较少
Zep/Graphiti时态知识图谱、双时态模型需要关系建模 + 时态推理的企业高级功能仅限云端
Letta自我编辑式记忆,采用分层存储(上下文内/核心/归档)需要全面 Agent 自省的场景、有状态服务对简单用例而言过于复杂
Cognee通过可定制的 ECL 流水线和可定制任务构建多层语义图不断演进、能够适应和学习的 Agent 记忆;多跳推理摄取阶段的处理开销较大
LangMem用于 LangGraph 工作流的记忆工具已采用 LangGraph 的团队与 LangGraph 紧密耦合
文件系统使用命名约定的普通文件简单 Agent、原型开发无语义搜索、无关系

当 Agent 需要双时态建模(同时追踪事件发生时间和摄取时间)时,选择 Zep/Graphiti,因为其三层知识图谱(事件、语义实体、社区子图)擅长处理时态查询。当优先考虑快速投入生产并使用托管基础设施时,选择 Mem0。当 Agent 需要通过其 Agent 开发环境进行深入自省时,选择 Letta。当 Agent 必须构建密集的多层语义图时,选择 Cognee——它将文本块和实体类型作为节点,并以详细的关系边连接;其每个核心环节(摄取、实体提取、后处理、检索)均可定制。

基准性能对比

参考这些基准来设定预期,但应将其视为特定来源针对检索维度提供的参考信号,而非绝对排名。没有任何单一基准具有决定性。

系统DMR 准确率LoCoMoHotPotQA(多跳)延迟
Cognee——已公布高分不定
Zep(时态 KG)已公布高分—各项指标处于中等水平据报告延迟较低
Letta(文件系统)—已公布文件系统基线——
Mem0—已公布专用工具基线在一项对比中较低—
MemGPT已公布高分——不定
GraphRAG已公布中高区间成绩——不定
向量 RAG 基线已公布较低区间成绩——快

关键要点:应根据检索模式而非品牌比较记忆系统。将基准数据视为有时效性的证据;在据此提出产品声明之前,必须重新核验。稳定的设计原则是从浅层方案开始,衡量检索质量,只有在较简单的层无法满足需求时,才添加语义或图结构。

记忆层(决策点)

选择满足持久化要求的最浅记忆层。每深入一层,基础设施成本和运维复杂度都会增加,因此只有在较浅层无法满足检索或持久性需求时,才升级到更深层。

层级持久性实现方式适用场景
工作记忆仅限上下文窗口系统提示词中的草稿区始终适用 — 优先使用有利于注意力的位置进行优化
短期记忆会话范围内文件系统、内存缓存中间工具结果、对话状态
长期记忆跨会话键值存储 → 图数据库用户偏好、领域知识、实体注册表
实体记忆跨会话实体注册表 + 属性维持身份一致性(“John Doe”在不同对话中指同一个人)
时态知识图谱跨会话 + 历史记录带有效时间区间的图随时间变化的事实、时光回溯查询、防止上下文冲突
检索策略

根据查询类型选择检索策略。语义搜索适合直接事实查询,但处理多跳推理时效果会下降;基于实体的遍历适合“关于 X 的所有信息”这类查询,但需要图结构;时态过滤适合处理变化的事实,但需要有效性元数据。当准确性至关重要且基础设施预算充足时,可组合多种策略进行混合检索。

策略适用场景局限性
语义(嵌入相似度)直接事实查询处理多跳推理时效果会下降
基于实体(图遍历)“告诉我关于 X 的所有信息”需要图结构
时态(有效性筛选)事实随时间变化需要有效性元数据
混合(语义 + 关键词 + 图)整体准确性最佳基础设施需求最高

混合方法通过仅检索相关子图或记忆,减少活跃上下文。Cognee 通过图、向量和关系存储中的多种搜索模式实现混合检索,让 Agent 根据查询类型选择合适的检索策略,而不是对所有查询都采用同一种方法。

记忆整合

定期运行整合以避免记忆无限增长,因为不加控制地累积记忆会随着时间推移降低检索质量。使记忆失效,但不要丢弃 — 保留历史记录对于需要重建过去状态的时态查询至关重要。可在记忆数量达到阈值、检索质量下降或到达计划时间间隔时触发整合。可参阅实现参考中的可运行整合代码。

实用指南

选择记忆架构

从最简单的可行层开始,仅在检索质量下降时增加复杂度。 大多数 Agent 在第一天都不需要时态知识图谱。请按以下路径逐步升级:

  1. 原型阶段:使用文件系统记忆。将事实保存为带时间戳的结构化 JSON。这样可以在投入基础设施之前验证 Agent 的行为。
  2. 扩展阶段:当 Agent 需要语义搜索和多租户隔离时,改用 Mem0 或带元数据的向量存储,因为基于文件的查找无法处理相似度查询。
  3. 复杂推理:当 Agent 需要关系遍历、时态有效性或跨会话综合时,添加 Zep/Graphiti。Graphiti 使用通用关系构建结构化关联,让图保持简单且易于推理;Cognee 则构建更稠密的多层语义图,并包含细致的关系边 — 根据 Agent 的需求选择:需要时态双模型(Graphiti),还是更丰富、相互关联的知识结构(Cognee)。
  4. 完全掌控:当 Agent 必须通过深入自省来自主管理记忆时,使用 Letta 或 Cognee,因为这些框架将记忆操作作为 Agent 的一等操作公开。
与上下文集成

按需检索记忆,而不是预加载所有内容,因为大型上下文负载成本高昂,还会降低注意力质量。将检索到的记忆放在更容易受到关注的位置(上下文开头或结尾),以最大限度地增强其对生成结果的影响。

错误恢复

优雅地处理检索失败,因为记忆系统本质上会产生噪声。按以下顺序应用这些恢复策略:

  • 检索结果为空:改用范围更广的搜索(移除实体筛选条件,扩大时间范围)。如果仍无结果,请提示用户进行澄清。
  • 结果过时:检查 valid_until 时间戳。如果大多数结果已过期,请先触发记忆整合,再重试。
  • 事实冲突:优先采用 valid_from 最新的事实。如果置信度较低,请向用户说明冲突。
  • 存储失败:将写入操作排队以便重试。绝不要因写入记忆而阻塞 Agent 的响应。

示例

示例 1:Mem0 集成

from mem0 import Memory

m = Memory()
m.add("User prefers dark mode and Python 3.12", user_id="alice")
m.add("User switched to light mode", user_id="alice")

# Retrieves current preference (light mode), not outdated one
results = m.search("What theme does the user prefer?", user_id="alice")

示例 2:时间查询

# Track entity with validity periods
graph.create_temporal_relationship(
    source_id=user_node,
    rel_type="LIVES_AT",
    target_id=address_node,
    valid_from=datetime(2024, 1, 15),
    valid_until=datetime(2024, 9, 1),  # moved out
)

# Query: Where did user live on March 1, 2024?
results = graph.query_at_time(
    {"type": "LIVES_AT", "source_label": "User"},
    query_time=datetime(2024, 3, 1)
)

示例 3:Cognee 记忆摄取与搜索

import cognee
from cognee.modules.search.types import SearchType

# Ingest and build knowledge graph
await cognee.add("./docs/")
await cognee.add("any data")
await cognee.cognify()

# Enrich memory
await cognee.memify()

# Agent retrieves relationship-aware context
results = await cognee.search(
    query_text="Any query for your memory",
    query_type=SearchType.GRAPH_COMPLETION,
)

指南

  1. 从文件系统记忆开始;只有在检索质量有需要时才增加复杂度
  2. 对任何可能随时间变化的事实,跟踪其时间有效性
  3. 使用混合检索(语义 + 关键词 + 图谱)以获得最佳准确性
  4. 定期整合记忆——使其失效,但不要丢弃
  5. 针对检索失败进行设计:记忆查询无结果时,始终准备好备用方案
  6. 考虑持久化记忆的隐私影响(保留政策、删除权)
  7. 在更改前后,使用 LoCoMo 或 LongMemEval 对记忆系统进行基准测试
  8. 在生产环境中监控记忆增长和检索延迟

注意事项

  1. 将所有内容塞进上下文:将所有可用记忆加载到提示词中,成本高昂,还会降低注意力质量。应使用按需检索并筛选相关内容。
  2. 忽视时间有效性:事实会过时。若不跟踪有效性,过时信息就会污染上下文,导致 Agent 基于错误假设行事。
  3. 过早过度设计:在某些基准测试中,简单的文件系统记忆可以优于更专门的工具(claim-memory-locomo-filesystem-baseline)。只有在简单方案确实无法奏效时,才增加复杂度。
  4. 没有整合策略:记忆无限增长会随着时间推移降低检索质量。设置记忆数量阈值或定期间隔,以触发整合。
  5. 嵌入模型不匹配:使用一种嵌入模型写入记忆、另一种模型读取记忆,会导致检索效果不佳,因为向量空间不能互换。为每个记忆存储固定使用一种嵌入模型;如果模型发生变化,则重新嵌入所有条目。
  6. 图谱架构僵化:过度结构化的图谱架构(僵化的节点类型、固定的关系标签)会在领域变化时失效。应优先使用通用关系类型和灵活的属性集合,避免新增实体类型时需要迁移架构。
  7. 过时记忆污染:与当前状态矛盾的旧记忆会悄无声息地破坏 Agent 的行为。应实施过期政策或置信度衰减,让 Agent 降低对陈旧事实的优先级;检测到矛盾时,应明确指出。
  8. 记忆与上下文不匹配:检索到主题相关但上下文不符的记忆(例如,Agent 正在讨论 Python 语言时,却检索到关于蟒蛇的“Python”记忆)。可通过在记忆条目中加入会话或领域元数据,并在检索时据此筛选来缓解。

集成

此技能负责持久语义记忆。相邻技能负责临时存储、压缩和上下文策略:

  • filesystem-context:在需要语义检索之前,使用文件支持的临时工作区、日志和简单运行状态。
  • context-compression:以文字形式编写摘要和交接内容,以保留会话状态。
  • context-optimization:在活跃上下文预算内实现即时记忆加载和检索范围限定。
  • context-degradation:将过时或冲突的记忆视为上下文污染或冲突。
  • bdi-mental-states:当信念、欲望、意图和来源链很重要时,进行正式的心理状态建模。
  • multi-agent-patterns:在多个 Agent 之间共享记忆。
  • evaluation:评估记忆质量、检索正确性并选择基准测试。

参考资料

内部参考:

  • 实现参考 - 适用场景:从头实现向量存储、属性图、时序查询或记忆整合逻辑

此合集中的相关技能:

  • context-fundamentals - 适用场景:设计记忆所依赖的上下文层
  • multi-agent-patterns - 适用场景:多个 Agent 需要共享或协调记忆状态

外部资源:

  • Zep 时序知识图谱论文 (arXiv:2501.13956) - 适用场景:评估双时态建模或 Graphiti 的架构
  • Mem0 生产架构论文 (arXiv:2504.19413) - 适用场景:评估托管记忆基础设施的权衡
  • Cognee 优化知识图谱 + LLM 推理论文 (arXiv:2505.24478) - 适用场景:比较多层语义图方法
  • LoCoMo 基准测试 (Snap Research) - 适用场景:评估长对话记忆保留能力
  • MemBench 评估框架 (ACL 2025) - 适用场景:设计记忆评估套件
  • Graphiti 开源时序 KG 引擎 (github.com/getzep/graphiti) - 适用场景:实现时序知识图谱
  • Cognee 开源知识图谱记忆 (github.com/topoteretes/cognee) - 适用场景:构建可自定义的记忆 ECL 流水线
  • Cognee 比较:形式与功能 - 适用场景:比较 Mem0、Graphiti、LightRAG 和 Cognee 的图结构

技能元数据

创建时间:2025-12-20 最后更新:2026-05-15 作者:Agent Skills for Context Engineering Contributors 版本:4.1.0

评论

支持 Markdown