文章区分 LongMemEval 的检索召回率与最终问答准确率,并固定回答模型、提示词和裁判来比较两种记忆方案。作者将公开检索结果直接用于问答评估,揭示高召回指标与实际回答能力之间的差距。
面向 AI Agent 的记忆层很喜欢引用 LongMemEval 的成绩。你会看到 94%、95%、96% 这样的数字。这些数字是真的,但它们通常衡量的是检索效果:前 5 条结果里,是否至少有一个正确的会话?也就是 recall_any@5。LongMemEval 自己采用的指标则不同:模型是否正确回答了问题?这由 GPT-4o 评判。
我想知道这两个数字究竟差多少,于是在同一批问题上同时测量了它们。
agentmemory 公布的 LongMemEval_S 成绩是 95.2% R@5。值得肯定的是,它明确说明,这个数字是检索召回率,不是问答准确率。它还公布了混合搜索(BM25 + embeddings)为全部 500 个问题分别检索出的会话。
于是,我直接使用了这份结果,没有做任何修改,并通过 commit 和 hash 固定了版本:
随后,我对自己开发的记忆层 Graph-MIND 做了同样的测试。Graph-MIND 当前发布版本的检索会返回一个约 3.4k token 的内容包,由单独的对话轮次组成。
唯一的区别是检索。同样的问题,同样的阅读模型,同样的评判模型。
有 64 个问题只有 Graph-MIND 答对,有 21 个问题只有 agentmemory 答对;精确 McNemar 检验的 p 值为 3.3e-6。
按问题类型划分,成绩如下(Graph-MIND / agentmemory):
从“前 5 条结果中有一个正确会话”到“回答正确”,中间有三个问题:
这些都不意味着 agentmemory 不好。用一个小型阅读模型在 LongMemEval 上拿到 80% 的准确率,已经相当不错,而且完整会话本来就是它自然采用的处理单位。关键在于,R@5 和问答准确率衡量的是不同的东西。拿一个项目的 R@5 去比较另一个项目的问答准确率,或者比较采用不同单位的 R@5——会话、对话轮次、文本块——都无法告诉你,究竟哪个项目回答得更好。
所有结果都可以复现:脚本位于 research/rival_agentmemory.py,每个问题、回答和评判结果都保存在 research/runs/graph-v9.6-rival-agentmemory-k5 中。如果方法有问题,我很希望有人指出来。
它是一套本地记忆,供终端中的编程 Agent 共享使用,包括 Claude Code、Codex、Cursor、Gemini CLI、Copilot CLI 和 OpenCode。它会把每轮对话原样存入你机器上的 SQLite,写入时不调用模型,检索则使用词语搜索和一个小型本地 embedding 模型。项目开源,采用 AGPL 许可证,一行命令即可安装。
无论你使用哪种记忆系统,都请关注这一点:要求提供在相同阅读模型、相同评判模型下测得的回答准确率。
如需采取进一步行动,可以考虑屏蔽此人和/或举报滥用行为。