README_ZH.md

July 5, 2026 · View on GitHub

MemoryData logo MemoryData

面向记忆增强 Agent 的统一基准测试套件

"一套流水线。四大基准族。二十二种方法预设。一致的执行接口。"

Python Methods Benchmarks Platform Taxonomy


English  |  简体中文

简介  •  特性  •  快速开始  •  仓库结构  •  方法  •  基准  •  配置  •  产物  •  常见问题  •  引用

MemoryData main results
配套论文中的主要结果:记忆增强 Agent 方法在 LongMemEvalLoCoMoDB-Bench 三个基准上进行对比,指标涵盖 exact-match、ROUGE-L 和 LLM-judge 三类。图中柱状按范式分组——参考基线、序列上下文、结构拓扑、多范式混合。

📣 参与进来

  • 📝 想要阅读清单? 请见 Awesome Agent Memory —— 配套的论文合集。
  • 🚧 持续更新中 —— 我们正在不断补充新的方法和基准数据集。
  • 持续关注 —— Star 仓库追踪进展;欢迎提 issue 反馈需求;PR 同样欢迎!

✨ 简介

记忆增强 Agent、结构化记忆架构以及基于检索的基线方法通常各自为战——每篇论文都自带自己的数据加载器、运行时适配器和指标评测工具。结果之间难以横向比较,要在两个方法之间复现同一个评测数值,往往意味着要把两个方法都重新实现一遍。

MemoryData 正是为填补这一空白而生。 它是一个面向研究的基准测试套件,将四大基准族(MemoryAgentBench、LoCoMo、LongBench、MemBench)、二十二种方法预设以及共享的运行时统一到一个 main.py 启动器之下,使异构的记忆范式能够在一致的执行接口和稳定的产物布局下进行比较。

📚 特性

🚀 统一启动器 main.py 是基准执行、产物写入以及可选的运行后评测钩子的唯一入口。只需指定两个 YAML 文件,即可选择任意方法与任意基准。

🧩 22 种方法预设 扁平化的 YAML 预设覆盖参考基线、序列上下文、结构拓扑、多范式混合四类架构——每一种都已接入对应的内嵌(vendored)运行时。

📊 4 大基准族 MemoryAgentBench、LoCoMo、LongBench 和 MemBench,各自提供完整版配置以及按类别/切片的细分配置,开箱即用。

🗂 一致的分类体系 方法分组遵循论文中 RQ1 有效性研究的分类方式,因此可以按范式而非文件名来查找预设。

📦 结构化产物 每次运行都会在稳定、支持覆盖的 results/ 根目录下产出结果 JSON、持久化的 Agent 状态以及可选的日志,便于可复现的后处理。

🖥 跨平台 为 Linux/macOS 与 Windows 分别提供依赖清单,BM25 和长上下文参考路径保留在 utils/ 下。

🕹 快速开始

前置条件: Python 3.11、一个 OpenAI 兼容的模型推理端点,以及放置在 datasets/ 下的基准数据集。

第一步:创建环境

conda create -n memory-bench python=3.11
conda activate memory-bench
平台命令
Linux / macOSpip install -r requirements.txt
Windowspip install -r requirements-windows.txt

第二步:配置模型端点与密钥

大多数预设默认使用 OpenAI 兼容的推理端点。请修改 config/ 下的 YAML 文件,使 modelbase_urlembedding_base_url 及相关 provider 字段与你环境中可用的模型服务相匹配。

变量使用方说明
OPENAI_API_KEY大多数预设用于对话与嵌入调用的默认密钥变量
OPENAI_API_BASEMemOS 示例环境使用 MemOS 专属配置时请参考 methods/MemOS/config/.env.example

第三步:准备数据集

本仓库随附数据集。请按照加载器的预期将其放置在 datasets/ 下。

基准默认路径格式说明
MemoryAgentBenchdatasets/MemoryAgentBench/eval_dataset_collection/HuggingFace save_to_disk 目录本地副本缺失时回退到 ai-hyz/MemoryAgentBench
LoCoModatasets/LoCoMo/rq1_4cat_600_dist/locomo_4cat_600_dist.jsonJSON 文件供完整版及按类别的 LoCoMo 预设使用
LongBenchdatasets/longBench_rep150_proportional/datasetsHuggingFace save_to_disk 目录对应按比例采样的子集
MemBenchdatasets/MemBench/MemData/FirstAgent/*.jsonJSON 文件simplenoisyknowledge_updatehighlevelRecMultiSession

参考目录结构:

datasets/
├── MemoryAgentBench/
│   └── eval_dataset_collection/          # HuggingFace save_to_disk 目录
├── LoCoMo/
│   └── rq1_4cat_600_dist/
│       └── locomo_4cat_600_dist.json
├── longBench_rep150_proportional/
│   └── datasets/                         # HuggingFace save_to_disk 目录
└── MemBench/
    └── MemData/FirstAgent/               # simple / noisy / knowledge_update / highlevel / RecMultiSession

第四步:运行实验

命令模板:

python main.py --agent_config <agent_yaml> --dataset_config <dataset_yaml>

代表性运行示例:

场景Agent 配置数据集配置附加参数
MemoryAgentBench 默认运行config/reference_long_context_agent.yamlbenchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml-
小规模冒烟测试config/reference_long_context_agent.yamlbenchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml--max_test_queries_ablation 1
LoCoMo 评测config/hybrid_simplemem.yamlbenchmark/locomo/config/Locomo_qa_4cat_600_dist.yaml-
LongBench 评测config/reference_embedding_rag.yamlbenchmark/longbench/config/LongBench_rep150_proportional.yaml-
MemBench 评测config/sequential_mem0.yamlbenchmark/membench/config/MemBench_simple.yaml-

示例:

python main.py \
  --agent_config config/reference_long_context_agent.yaml \
  --dataset_config benchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml

🗂 仓库结构

project-root/
├── main.py                        # 统一的实验入口
├── config/                        # 扁平化预设:参考、序列、拓扑、混合
├── benchmark/
│   ├── memoryagentbench/          # MemoryAgentBench 加载器与基准配置
│   ├── locomo/                    # LoCoMo 配置与 JSON 加载器
│   ├── longbench/                 # LongBench 按比例采样子集支持
│   └── membench/                  # MemBench 各切片配置与加载器
├── evaluation/
│   └── longmemeval/               # 保留的 LongMemEval 外挂评测辅助代码
├── methods/                        # 按论文分类组织的方法运行时
│   ├── embedding_rag/              # 稠密检索参考基线
│   ├── memagent/  mem0/  memochat/ # 序列上下文架构
│   ├── cognee/  graph_rag/  hipporag/  memtree/  raptor/  zep/  zep_local/ # 结构拓扑架构
│   └── a_mem/  everos/  letta/  lightmem/  memorag/  memoryos/  self_rag/  simplemem/  MemOS/ # 多范式混合架构
├── utils/                          # 共享运行时工具,包括长上下文与 BM25 参考路径
├── requirements.txt               # Linux/macOS 依赖清单
└── requirements-windows.txt       # Windows 依赖清单

🧠 方法概览

下表的分类方式遵循配套论文中 RQ1 有效性主表的分组。对于保留在代码仓库中但未在该汇总表中列出的方法,为完整性起见,我们将其归入对应的分类组。

分类方法代表性预设运行时入口说明
参考基线Long Contextreference_long_context_agent.yamlutils/agent.py不依赖外部记忆存储、直接利用长上下文作答的基线
参考基线Embedding RAGreference_embedding_rag.yamlmethods/embedding_rag/embedding_retriever.py稠密检索参考基线
参考基线BM25 RAGreference_simple_rag_bm25.yamlutils/agent.py用于对照与冒烟测试的稀疏词法检索基线
序列上下文架构MemAgentsequential_memagent.yamlmethods/memagent/循环式序列记忆基线
序列上下文架构Mem0sequential_mem0.yamlmethods/mem0/source/mem0/带有持久化结构化状态的序列记忆存储
序列上下文架构MemoChatsequential_memochat.yamlmethods/memochat/memochat_adapter.py带有滚动摘要的序列对话记忆
结构拓扑架构Cogneetopological_cognee.yamlmethods/cognee/source/cognee/图结构记忆运行时
结构拓扑架构Zep Localtopological_zep_local.yamlmethods/zep_local/main.py本地图记忆服务路径
结构拓扑架构MemTreetopological_memtree.yamlmethods/memtree/memtree_adapter.py带溯源信息的树状记忆组织
结构拓扑架构GraphRAGtopological_graph_rag.yamlmethods/graph_rag/graph_rag.py基于结构化图的检索基线
结构拓扑架构HippoRAGtopological_hippo_rag_v2_openai.yamlmethods/hipporag/基于图结构文档组织的检索
结构拓扑架构RAPTORtopological_raptor.yamlmethods/raptor/raptor.py分层聚类并摘要的检索基线
结构拓扑架构Zeptopological_zep.yamlmethods/zep/zep.py云端图记忆集成
多范式混合架构Lettahybrid_letta.yamlutils/agent.py通过内嵌(vendored)的 Letta 源码与本地运行时管理集成
多范式混合架构LightMemhybrid_lightmem.yamlmethods/lightmem/lightmem_adapter.py分层的记忆构建与检索
多范式混合架构SimpleMemhybrid_simplemem.yamlmethods/simplemem/simplemem_adapter.py语义、关键词、结构化检索的混合方案
多范式混合架构MemOShybrid_memos.yamlmethods/MemOS/source/src/内嵌的记忆操作系统运行时
多范式混合架构MemoryOShybrid_memoryos.yamlmethods/memoryos/memoryos_adapter.py针对保留的 MemoryOS 实现的本地运行时封装
多范式混合架构A-MEMhybrid_a_mem.yamlmethods/a_mem/a_mem_adapter.py带溯源追踪的混合记忆写入与检索
多范式混合架构EverOShybrid_everos.yamlmethods/everos/everos_adapter.py面向搜索的外部记忆运行时
多范式混合架构Self-RAGhybrid_self_rag.yamlmethods/self_rag/self_rag.py当前代码版本中保留的检索增强生成(RAG)基线
多范式混合架构MemoRAGhybrid_memo_rag.yamlmethods/memorag/面向长上下文、依赖缓存的检索流水线

📊 基准测试概览

基准族配置文件任务焦点预期输入格式
MemoryAgentBench / 精确检索benchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml
benchmark/memoryagentbench/Accurate_Retrieval/config/LongMemEval/Longmemeval_s.yaml
在精选的 MemoryAgentBench 切分下进行问答与长时记忆检索位于 datasets/MemoryAgentBench/eval_dataset_collection/ 的 HuggingFace save_to_disk 副本,或回退到 ai-hyz/MemoryAgentBench
MemoryAgentBench / 冲突消解benchmark/memoryagentbench/Conflict_Resolution/config/Factconsolidation_mh_6k.yaml在长交互历史中消解相互冲突的事实与上文相同的 MemoryAgentBench 加载路径
MemoryAgentBench / 测试时学习benchmark/memoryagentbench/Test_Time_Learning/config/ICL/ICL_banking77.yaml上下文内适配与标签空间记忆与上文相同的 MemoryAgentBench 加载路径
LoCoMobenchmark/locomo/config/Locomo_qa_4cat_600_dist.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat1_multi_hop.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat2_temporal.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat3_open_domain.yaml
benchmark/locomo/config/Locomo_qa_4cat_600_dist_cat4_single_hop.yaml
在长对话上进行对话式问答,提供完整版与按类别的子集JSON 文件,通常为 datasets/LoCoMo/rq1_4cat_600_dist/locomo_4cat_600_dist.json
LongBenchbenchmark/longbench/config/LongBench_rep150_proportional.yaml在当前预设所使用的按比例采样子集上进行长上下文多选题推理HuggingFace save_to_disk 目录,通常为 datasets/longBench_rep150_proportional/datasets
MemBenchbenchmark/membench/config/MemBench_simple.yaml
benchmark/membench/config/MemBench_noisy.yaml
benchmark/membench/config/MemBench_knowledge_update.yaml
benchmark/membench/config/MemBench_highlevel.yaml
benchmark/membench/config/MemBench_RecMultiSession.yaml
记忆压力测试,覆盖简单回忆、噪声、知识更新、高层次推理以及多会话推荐位于 datasets/MemBench/MemData/FirstAgent/ 下的各切片 JSON 文件

⚙️ 配置约定

字段含义
provider对话模型后端类型,默认预设中通常为 openai_compatible
base_url对话模型服务的端点
embedding_provider当方法使用向量检索时,生成嵌入所用的后端类型
embedding_base_url嵌入模型服务的端点
*_api_key_env运行时用于解析 API 密钥的环境变量名
retrieve_num启用检索的方法所使用的检索深度或 top-k

📦 输出产物

产物类型默认位置说明
结果 JSONresults/outputs/<model>/<dataset>/<name_tag>_results.json主要评测输出,包含指标、查询级记录以及汇总字段
Agent 状态results/agents/持久化的 Agent 记忆、检索缓存与方法特定的状态
产物根目录覆盖--artifact_root /path/to/artifacts重设外层产物根目录,但内部布局保持不变

产物布局:

results/
├── outputs/                                     # 按模型与数据集分组的评测输出
│   └── <model>/                                 # 模型或预设专属的输出命名空间
│       └── <dataset>/                           # 基准专属的输出命名空间
│           └── <name_tag>_results.json          # 包含指标与记录的主结果文件
├── agents/                                      # 持久化的 Agent 状态与方法侧缓存
│   └── <model_or_method>/                       # 运行时专属的存储命名空间
└── logs/                                        # 由本次运行开启的可选执行日志

示例:

python main.py \
  --agent_config config/reference_long_context_agent.yaml \
  --dataset_config benchmark/memoryagentbench/Accurate_Retrieval/config/EventQA/Eventqa_full.yaml \
  --artifact_root /path/to/artifacts

当指定 --artifact_root 时,流水线会在新的根目录下保持同样的 results/outputsresults/agentsresults/logs 内部组织方式,便于隔离多次重复实验批次,同时保持下游解析与后处理逻辑不变。

🤔 常见问题

数据集是否随仓库一起提供?
不提供。本仓库不分发数据集。请按照快速开始一节中的路径将其放置在 datasets/ 下。当本地缺失时,MemoryAgentBench 还会回退到 ai-hyz/MemoryAgentBench 这个 HuggingFace 镜像。
不同运行之间是否需要重新构建或重新安装?
不需要。MemoryData 是一个通过 python main.py 启动的纯 Python 流水线。切换方法或基准,只需将 --agent_config--dataset_config 指向不同的 YAML 文件即可。
支持哪些模型提供商?
默认预设面向 OpenAI 兼容的对话与嵌入端点,因此任何提供该接口的提供商均可使用。请修改所选预设中的 base_urlembedding_base_url 以及相关的 *_api_key_env 字段以匹配你的服务。
如何强制进行一次干净的重新运行?
传入 --force 可在运行前删除已保存的结果、重建本地 agent 状态并重置受支持的外部持久化。若想在恢复运行时重试之前失败的查询而不是跳过它们,可使用 --retry_failed_queries

📒 引用

如果该基准套件对你的研究有帮助,请引用:

@article{zhoumemorydata2026,
    title={Are We Ready For An Agent-Native Memory System?},
    author={Wei Zhou and Xuanhe Zhou and Shaokun Han and Hongming Xu and Guoliang Li and Zhiyu Li and Feiyu Xiong and Fan Wu},
    year={2026},
    journal={arXiv preprint arXiv:2606.24775},
    url={https://arxiv.org/abs/2606.24775}
}