第8章:Agent Memory 评测与基准
LongMemEval、LoCoMo、MemBench、MEMTRACK 四大基准详解,评估方法论,以及自建领域基准的实操
“我换了 Memory 框架,效果到底有没有变好?”——没有评测就没有改进。本章把 4 个主流 Agent Memory 基准讲透:LongMemEval、LoCoMo、MemBench、MEMTRACK。每个基准侧重哪些能力、用了什么数据、怎么读懂分数,都给出明确答案。最后给一份”在自己业务上做评测”的实操方法论。
📑 目录
- 1. 为什么要做 Agent Memory 评测
- 2. 评测应该覆盖的 5 大能力
- 3. LongMemEval — 最权威的多会话评测
- 4. LoCoMo — 50 段超长对话
- 5. MemBench — 四象限全面评测
- 6. MEMTRACK — 状态追踪
- 7. 自建领域基准的方法论
- 8. 实操:在 LongMemEval 上对比 4 套框架
- 自我检验清单
- 参考资料
1. 为什么要做 Agent Memory 评测
| 不评测的代价 | 例子 |
|---|---|
| 拍脑袋选框架 | ”感觉 Mem0 不错,就它了”——可能不适合你的场景 |
| 优化方向错 | 改了 retrieval scoring 公式,不知道有没有提升 |
| 上线翻车 | 离线 demo 好,真实长会话用户体验差 |
| 无法对外宣传 | ”我们 agent 记忆能力强”——没数据,没人信 |
Memory 系统的好坏不是单一指标:同一个框架可能在”短期事实抽取”上 90%,但”5 个月后的偏好回忆”上只有 30%——必须多维度评测。
2. 评测应该覆盖的 5 大能力
LongMemEval 论文(Wu et al., 2024)系统总结的 5 大能力,被业界广泛采用:
| 能力 | 描述 | 例子 |
|---|---|---|
| 1. Information Extraction(信息抽取) | 从长对话中找到具体事实 | ”我上周三的会议室在哪?“ |
| 2. Multi-session Reasoning(跨会话推理) | 串联多个 session 的事实 | 把 session 1 的偏好 + session 5 的事件结合回答 |
| 3. Temporal Reasoning(时间推理) | 理解事实的时间属性 | ”用户最近半年的口味变化” |
| 4. Knowledge Update(知识更新) | 处理事实演化 | ”用户去年住上海,今年搬北京” |
| 5. Abstention(诚实拒答) | 没有相关 memory 时不胡编 | ”你之前从未告诉我你的生日” |
🌟 优秀的 Memory 系统在 5 大能力上都得过 70 分,而不是某一项 95、其他 30。
3. LongMemEval — 最权威的多会话评测
Wu et al., “LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory”, arXiv 2410.10813, 2024
3.1 数据集
- 500 道手工创建的题目,覆盖 5 大能力
- 每题对应一段长达数十个 session 的对话历史(~115K token)
- 题目和正确答案明确,可自动评分
3.2 关键设计
LongMemEval-S (Short version):
历史 ~50 sessions,~50K token,适合快速测
LongMemEval-M (Medium):
~100 sessions,~115K token,标准 benchmark
LongMemEval-Oracle:
给 agent 提供"理论上完美的 memory"(人工标注的 relevant 历史)
用来测试**memory 是否是瓶颈**——如果 oracle 也答不对,说明 LLM 推理能力不够
3.3 评分
每道题二元评分:答对 1 分,答错 0 分。各类别和总分都报。
3.4 历史成绩(2024-2025)
| 系统 | 总分 |
|---|---|
| GPT-4o vanilla(无 memory) | 30% |
| RAG + GPT-4o | 47% |
| Mem0 | 62% |
| Letta(MemGPT) | 65% |
| Zep(Graphiti) | 71% |
| Emergence AI | 90%+(2025) |
🍎 重要:基准成绩不是绝对——不同评测时间、模型、配置都会影响。自己跑一遍最可靠。
3.5 用法
git clone https://github.com/xiaowu0162/LongMemEval
cd LongMemEval
# 安装依赖,见 README
# 准备你的 agent(实现一个 chat 接口)
python evaluate.py --agent your_agent_module --task longmemeval_s
4. LoCoMo — 50 段超长对话
Maharana et al., “Evaluating Very Long-Term Conversational Memory of LLM Agents”, 2024 项目: snap-research.github.io/locomo
4.1 数据集
- 50 段对话,每段平均 35 个 session、~9K token
- 每段对话基于人工设计的 persona 和情节
- 多模态(文本 + 图像)
4.2 评测任务
| 任务 | 说明 |
|---|---|
| Question Answering | 关于对话内容的事实题 |
| Event Summarization | 概括某段事件 |
| Multi-modal Grounding | 图片相关问题 |
| Persona Consistency | agent 自己回答时是否符合预设 persona |
4.3 与 LongMemEval 的差异
| 维度 | LongMemEval | LoCoMo |
|---|---|---|
| 数据规模 | 500 题 | 50 长对话 |
| 历史长度 | 50-100 sessions | 35 sessions |
| 任务类型 | 5 类标准化 | 4 类含多模态 |
| 适合 | 横向对比框架 | 测真实多轮体验 |
🌟 结合用:LongMemEval 选框架,LoCoMo 测体验。两者都跑过的系统才能放心上线。
5. MemBench — 四象限全面评测
MemBench (2025), arXiv 2506.21605
5.1 设计
把 memory 评测正交分解成两个维度,形成四象限:
Factual Memory Reflective Memory
(事实记忆) (反思记忆)
┌──────────────────┬──────────────────┐
Participation │ 例:用户说过的事 │ 例:agent 自己 │
(Agent 主动参与) │ │ 反思的结论 │
├──────────────────┼──────────────────┤
Observation │ 例:agent 看到的 │ 例:agent 推断的 │
(Agent 被动观察) │ 旁观事件 │ 第三方意图 │
└──────────────────┴──────────────────┘
四类各设计任务测试,覆盖更全面。
5.2 关键贡献
- 首次系统区分 Participation vs Observation:这两类记忆的形成机制不同,值得分别评测
- 首次明确 Reflective Memory 的评测:不只测 raw fact,还测 agent 的高层洞察是否有用
5.3 适合谁
需要做深度学术对比或写论文 时;工业落地通常 LongMemEval + LoCoMo 已经够。
6. MEMTRACK — 状态追踪
MEMTRACK (2025), arXiv 2510.01353
6.1 焦点
专注状态追踪(State Tracking)——用户和实体的属性如何随时间演化:
“用户 7 月在公司 X 工作,9 月跳到 Y,12 月又去了 Z” 问:“用户 11 月在哪家公司?” 答:Y
6.2 用途
- 评测 bi-temporal Memory(Zep 强项)
- 测试 fact update 机制是否正确
- 长上下文场景下的”事实漂移”检测
6.3 互补性
| 基准 | 强测 |
|---|---|
| LongMemEval | 综合 5 能力 |
| LoCoMo | 真实长对话 |
| MemBench | 四象限学术 |
| MEMTRACK | 时间一致性 / 事实演化 |
7. 自建领域基准的方法论
公开 benchmark 不能完全反映你的真实场景。生产团队都该自建一个领域 benchmark,长期维护。
7.1 五步走
Step 1:收集真实对话样本
- 从生产日志取 100-300 条典型对话(注意脱敏)
- 覆盖各类用户角色、各类问题
Step 2:人工设计评测题
- 每条对话设计 3-5 道题,覆盖 5 大能力
- 题目要”agent 不查 memory 答不对,查了能答对”
Step 3:制定评分标准
- 二元评分(答对/错):简单但粗
- LLM-as-Judge:更细但要校准
- 人工抽样校验:每月 50 题
Step 4:持续维护
- 每发现一个生产 bug 就抽成一道 benchmark 题
- 定期(每季度)refresh,删过时题、加新题
Step 5:评测自动化
# CI/CD 集成
def benchmark_step():
score = run_benchmark(framework="mem0", version="latest")
if score < BASELINE - 0.03:
raise PerfRegression(f"Memory benchmark dropped to {score}")
upload_metric("memory_benchmark", score)
7.2 避坑
- 不要只选简单题:生产里的难题占比 30%,你的 benchmark 也该是这个比例
- 不要忽略 abstention:如果你的 agent 喜欢”幻觉式回答”,benchmark 必须包含”应该拒答”的题
- 不要忽略时间维度:很多 bug 是”事实更新没生效”,benchmark 必须含演化题
- 隐私优先:benchmark 数据脱敏要彻底,涉及 PII 时用 synthetic data
8. 实操:在 LongMemEval 上对比 4 套框架
完整脚本(简化版,实际运行需要 OPENAI_API_KEY 和各框架的环境):
# bench.py
import json
from longmemeval import load_dataset, evaluate
frameworks = {
"vanilla": lambda: VanillaGPTAgent(),
"mem0": lambda: Mem0Agent(),
"letta": lambda: LettaAgent(),
"zep": lambda: ZepAgent(),
}
results = {}
dataset = load_dataset("longmemeval_s") # 200 题,~50K token 历史
for name, factory in frameworks.items():
print(f"\n=== {name} ===")
agent = factory()
scores = {category: 0 for category in [
"info_extraction", "multi_session", "temporal", "update", "abstention"
]}
for item in dataset:
# 1. Replay 历史 sessions 让 agent 建立 memory
for session in item["history"]:
agent.chat(messages=session["messages"], user_id=item["user_id"])
# 2. 问 evaluation question
ans = agent.chat(
messages=[{"role": "user", "content": item["question"]}],
user_id=item["user_id"],
)
# 3. 评分
correct = evaluate(ans, item["answer"], item["category"])
scores[item["category"]] += int(correct)
# 归一化
for cat in scores:
scores[cat] /= sum(1 for x in dataset if x["category"] == cat)
scores["overall"] = sum(scores.values()) / len(scores)
results[name] = scores
# 输出对比表
print("\n| Framework | Info | Multi-Sess | Temporal | Update | Abstention | Overall |")
print("|-----------|------|------------|----------|--------|------------|---------|")
for name, sc in results.items():
print(f"| {name:9} | {sc['info_extraction']:.2f} | {sc['multi_session']:.2f} | "
f"{sc['temporal']:.2f} | {sc['update']:.2f} | "
f"{sc['abstention']:.2f} | **{sc['overall']:.2f}** |")
# 保存 JSON 供回归追踪
with open("benchmark_result.json", "w") as f:
json.dump(results, f, indent=2)
8.1 预期产出(参考值)
| Framework | Info | Multi-Sess | Temporal | Update | Abstention | Overall |
|---|---|---|---|---|---|---|
| vanilla | 0.55 | 0.20 | 0.15 | 0.10 | 0.40 | 0.28 |
| mem0 | 0.78 | 0.55 | 0.40 | 0.50 | 0.65 | 0.58 |
| letta | 0.80 | 0.62 | 0.55 | 0.55 | 0.70 | 0.64 |
| zep | 0.82 | 0.70 | 0.85 | 0.78 | 0.72 | 0.77 |
怎么读:Zep 在 Temporal / Update 上明显领先(bi-temporal 优势);Letta 在长会话 Multi-session 上稳;Mem0 综合 60% 已经很可用;vanilla 拉胯。
8.2 第 9 章会给出完整可运行版本(三个端到端示例 + 评测脚本)。
✅ 自我检验清单
- 5 大能力:能默写 LongMemEval 的 5 大能力,各举一个具体例子
- LongMemEval vs LoCoMo:能解释什么时候各用哪个
- Oracle 模式:能解释 LongMemEval-Oracle 用来测什么
- MemBench 四象限:能画图区分 Participation/Observation × Factual/Reflective
- MEMTRACK:能说明它专测哪类能力
- Abstention 重要性:能解释为什么”诚实拒答”也是 Memory 系统的核心能力
- 自建基准 5 步:能复述方法论
- CI 集成:能写一段伪代码,把 benchmark 变成 CI 中阻止退化的 gate
- 避坑:能列出至少 3 个自建 benchmark 的常见陷阱
📚 参考资料
基准
- LongMemEval (Wu et al., 2024):arXiv 2410.10813 | GitHub
- LoCoMo (Maharana et al., 2024):snap-research.github.io/locomo
- MemBench (2025):arXiv 2506.21605
- MEMTRACK (2025):arXiv 2510.01353
- Benchmarking and Enhancing Long-Term Memory in LLMs (2025):arXiv 2510.27246
- Evaluating Memory in LLM Agents via Incremental Multi-Turn Interactions:arXiv 2507.05257
行业 Benchmark Posts
- Emergence AI Broke the Agent Memory Benchmark —— Medium:博文
- Supermemory Research — State-of-the-Art Agent Memory:supermemory.ai/research
- Letta Issue #3115:Add Standard Memory Evaluation Benchmarks:GitHub
评测方法论
- LLM-as-Judge 综述
- Beyond Accuracy: Behavioral Testing of NLP Models with CheckList —— ACL 经典论文,通用方法论