跳到主要内容
Agent Memory

第8章:Agent Memory 评测与基准

LongMemEval、LoCoMo、MemBench、MEMTRACK 四大基准详解,评估方法论,以及自建领域基准的实操

LongMemEval LoCoMo MemBench MEMTRACK Benchmark

“我换了 Memory 框架,效果到底有没有变好?”——没有评测就没有改进。本章把 4 个主流 Agent Memory 基准讲透:LongMemEval、LoCoMo、MemBench、MEMTRACK。每个基准侧重哪些能力、用了什么数据、怎么读懂分数,都给出明确答案。最后给一份”在自己业务上做评测”的实操方法论。

📑 目录


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-4o47%
Mem062%
Letta(MemGPT)65%
Zep(Graphiti)71%
Emergence AI90%+(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 Consistencyagent 自己回答时是否符合预设 persona

4.3 与 LongMemEval 的差异

维度LongMemEvalLoCoMo
数据规模500 题50 长对话
历史长度50-100 sessions35 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 预期产出(参考值)

FrameworkInfoMulti-SessTemporalUpdateAbstentionOverall
vanilla0.550.200.150.100.400.28
mem00.780.550.400.500.650.58
letta0.800.620.550.550.700.64
zep0.820.700.850.780.720.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 的常见陷阱

📚 参考资料

基准

行业 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 经典论文,通用方法论