Memory Benchmark Harness Audit — 大白话版

完整版见 audit_memory_benchmarks.md(367 行,带 file:line 代码引用)。这份只讲做决定要知道的事。

一句话结论

只有 AMemGym 有真 harness 可借鉴。MemoryArena 是 dataset-only,Mem2ActBench 是 data-construction-only。

GAME.md 提到的”借鉴现有 benchmark”基本就是借鉴 AMemGym 一家。

三个意外发现

  1. MemoryArena 没开源 harness。 项目主页 (memoryarena.github.io) 上的 “Code” 链接是字面意义的 https://github.com 占位符。HuggingFace 上只有 700 行 dataset (ZexueHe/memoryarena,5 个 subset)。Stanford+UCSD+UIUC+Princeton 的论文,没有 evaluation runner。

  2. AMemGym 根本没有 memory abstraction。 没有 MemoryStore ABC,没有 adapter protocol。Memory 完全活在每个 BaseAgent subclass 里——换 backend = 写新 agent class。Mem0Agent 123 行包了 mem0.Memory.from_config()Memory 是 agent-shaped 不是 service-shaped——这跟主流叙事相反,但代码里就是这样。

  3. AMemGym 的 LLM simulator 自己承认会泄露 ground-truth。 env/gen.py:152-164 是一个 20-retry validation loop + schema-hiding prompt,只为阻止 LLM 在 user turn 里说漏 user state。这是我们坚持 YAML NPC 的最强外部证据——LLM simulator 真的会泄。

三个 benchmark 一句话定位

  • AMemGym:唯一有完整 harness 的。BaseAgent ABC 6 个方法(act / add_msgs / load_state / save_state / answer_question / reset)。answer_question 是 read-only inference——这正是我们 hook-triggered test session 需要的(测试时不能 mutate memory)。直接照抄。
  • MemoryArena:dataset 设计可借鉴(interdependent subtasks with causal dependency),但 harness 自己写。
  • Mem2ActBench:5 个 dataset construction script + JSONL,没 runner。唯一值得借鉴的是 per-argument grounding tagsexplicit / inferred / default)——可以映射到我们 IPaS 的 High/Medium/Low confidence。

六个工程问题谁怎么答

AMemGymMemoryArenaMem2ActBench
Q1 PA↔memory 接口Single ABC, agent owns memory未发布未发布
Q2 PA↔env 接口纯 LLM 对话,无 tool未发布Schema-validated tool calls (no execution)
Q3 Harness↔PABlack-box messaging + filesystem checkpoint per “period”未发布未发布
Q4 Diagnostic traceExternal re-query at每 period,分 write_pos vs read_pos论文级 SR/PS onlyPer-arg grounding tag at build time
Q5 SimulatorLLM with 20-retry leak guardFrozen QAFrozen reverse-generated query
Q6 已知坑配置硬编码、match factory 难扩展没 codeAPI key checked in (04_qa_construction.py:30)

MCP-server vs MemoryArena env:tradeoff

  • MCP 赢的地方:interaction style attributes(verbosity, proactivity, transparency)只能在 live execution 里观察到。MemoryArena 的 frozen QA 根本测不了 interaction style。
  • MCP 输的地方:reproducibility 更脆弱,工程成本更高(要维护 stateful server + reset hook)。
  • 解法:MCP server 当 live shell,里面跑 MemoryArena 风格的 task DAG(subtask 之间有 causal dependency)。两边都要。

YAML NPC vs AMemGym LLM simulator:tradeoff

  • YAML 赢的地方:reproducibility 完全可控;无 simulator bias 污染 eval;ground truth 就是 script 本身。
  • YAML 输的地方:(1) caricature 风险——脚本+CharCard 太硬可能让 PA “检测不到 drift”实际是用户表达太机械;(2) 覆盖盲区——脚本只能编进作者想到的 drift 信号。
  • 解法:preference-bearing turn 完全脚本化;filler turn(“听起来不错”、复述)允许 templated 或 tightly-prompted LLM 填充。AMemGym 的 add_msgs off-policy mode (eval/overall.py:81-95) 是 hybrid 的好模板。

实施建议(v1 优先级排序)

  1. 照抄 AMemGym BaseAgent ABC,但 actrespond,加 observe(env_event) 让非对话刺激(calendar 通知、tool result)能进;保留 answer_question 的 read-only 区分。
  2. Agent factory 用 dict registry,不用 match。AMemGym 都被迫 comment-out a-memnemori 两个 case (assistants/__init__.py:37-41)。
  3. save_state / load_state 强制 manifest 文件(写了什么 + checksum)。AMemGym 的 freeform pickle 一旦 mem0 目录损坏要等 eval crash 才知道。
  4. Diagnosis runner 单独 entry point。AMemGym 把 eval/diagnosis.pyeval/overall.py 分开,可以不重跑 on-policy 直接换诊断逻辑——我们 Per-attribute Judge 也该这样。
  5. Off-policy replay 当 first-class,不是 flag。一个 persona × 一个 PA backend × 一个 simulator seed 应该产生 frozen interaction log,所有其他 memory backend 都能 re-ingest——这是 Judge 跨条件可比的结构基础。
  6. MCP server 必须有 reset(seed) + snapshot() / restore(snapshot) 三件套。否则 IQI 的 “session 10 vs 25 vs 50” 在跨 run 之间不可比。
  7. 不要复用 AMemGym 的 MC-answer eval format 给 IQIOVERALL_PROMPT 让 agent 从列表里挑——这把 interaction style 折叠没了。坚持 PrefIx-adapted free-form + Judge,贵也认。
  8. 加 memory-dependency probe(per scenario × attribute)。GAME.md 的 personalization-necessity check 是跨 persona 维度的;Mem2ActBench 的 solvable_without_memory 思路是跨 memory 条件的——两个都要。
  9. Mem2ActBench 的 explicit/inferred/default grounding tag 直接借——映射到 IPaS extractor 的 confidence + evidence type。
  10. Forced event nodes 借 AMemGym 的 two-stage 思路:state evolution 离线生成(确定性),然后 live replay。映射到我们 forced event node 几乎完美。

一句话给写论文用

“Of three concurrent agentic-memory benchmarks (AMemGym, MemoryArena, Mem2ActBench), only AMemGym ships a usable harness; none target interaction preference, and none use within-subject preference shifts as a controlled stimulus.”