在 LongMemEval-S 上对智能体记忆检索进行基准测试 — Recall@5 达 98%,R@23 实现 100% 召回,仅依赖本地嵌入模型 (all-MiniLM-L6-v2),无需 LLM 与 API Key
摘要
作者分享了用于智能体记忆的 Python 库 memweave 的基准测试结果,该库仅使用本地嵌入且无需调用 LLM,便在 LongMemEval-S 上实现了 98% 的 Recall@5。本文详细介绍了实现方法,并与 mempalace 进行了性能对比,突出了其在不同问题类型上稳定的检索表现。
我一直在开发 memweave —— 一个用于持久化智能体记忆的 Python 库,底层由纯 Markdown 文件和 SQLite 提供支持。我想在此分享其在 LongMemEval-S 上的基准测试结果及其背后的实现方法。
---
## 基准测试
LongMemEval-S 是一个包含 500 个问题的检索基准测试(Wu et al., 2024)。每个问题都附带一个包含约 53 场多轮对话的候选语料库(haystack)。任务目标是:检索出包含答案的对话场次(session)。该基准定义了 6 种问题类型:
- single-session(用户发言)
- single-session(助手发言)
- implicit preference
- multi-session
- knowledge-update
- temporal-reasoning
**环境配置**
- 嵌入模型:`all-MiniLM-L6-v2`(本地)
- 索引内容:仅用户发言
- 全程无 LLM 调用、无 API Key、无云服务
- 参数仅在 50 题的开发集上进行调优;450 题的保留测试集仅评估一次,无任何事后调整
---
## 结果 — 保留测试集(450 题)
**单次运行(最佳启发式流水线:ECR + IDF + CAATB)**
| K | Recall@K | NDCG@K |
|----|----------|--------|
| 1 | 90.00% | 90.00% |
| 3 | 96.44% | 93.45% |
| **5** | **98.00%** | **93.75%** |
| 10 | 99.11% | 93.76% |
| 25 | **100.00%** | 93.83% |
在 **R@23** 时达到 100% 召回率。
**5 种子交叉验证(5 个独立的分层划分,每个划分独立进行开发集参数搜索)**
| 指标 | 均值 | ±标准差 |
|--------|----------|---------|
| R@5 | 97.24% | ±0.12% |
| R@10 | 98.76% | ±0.12% |
| R@25 | 100.00% | ±0.00% |
| NDCG@5 | 92.28% | ±0.69% |
R@5 上 ±0.12% 的标准差表明,该结果在不同数据划分上表现稳定,而非侥幸碰上了有利的开发集/测试集划分。
---
## 与 mempalace 的对比
Mempalace 是最接近的可比系统 —— 使用相同的基准、相同的嵌入模型、相同的“仅索引用户发言”策略。他们在此配置下发布的最佳结果是 Hybrid v4。
| 系统 | R@5 | R@10 | NDCG@5 | 100% 召回位置 |
|------------------------------|--------|--------|--------|----------------|
| memweave (ECR + IDF + CAATB) | 98.00% | 99.11% | 93.75% | R@23 |
| mempalace Hybrid v4 | 98.44% | 99.78% | — | R@30 |
Mempalace 在 R@5 和 R@10 上得分略高。Memweave 提前 7 个位次达到 100% 召回(R@23 对比 R@30)。对于先检索固定 Top-K 再输入重排器或 LLM 的流水线而言,能在保证完全覆盖的前提下使用更小的 K 值,在实际应用中具有重要意义。
方法论上的一处差异:mempalace Hybrid v4 在数据入库时会注入合成的“偏好”文档 —— 通过启发式正则表达式为每场对话生成额外的索引条目。而 Memweave 在没有任何入库阶段数据增强的情况下就达到了 98.00%:仅索引原始对话文本。
---
## 分数是如何实现的
该流水线使用了基于 memweave 插件 API(`mem.register_postprocessor(...)`)构建的三个后处理器。目前它们都不在核心库中,而是作为基础版 memweave 记忆之上的扩展。
**ECR — EntityConfidenceReranker**
置信度自适应实体增强。采用加法策略,仅在向量模型相对不确定时触发,并跳过实体匹配不可靠的偏好类查询。它绝不会覆盖极高置信度的匹配结果。
**IDF — IDFKeywordBooster**
针对单题、基于语料库相对频率的关键词增强。IDF 值基于该特定问题检索出的 200 个候选项计算,因此在当前语料库中常见的词得分较低。采用乘法策略,因此在保留强向量匹配项相对顺序的同时,会轻微提升包含罕见但重要 token 的候选项排名。
**CAATB — ConfidenceAdaptiveTemporalBooster**
针对表达时间偏移的查询(如“4 周前”、“上个月”、“几天前”)的时间邻近度增强。无词法过滤条件 —— 仅凭时间邻近度即可触发增强。该增强为加法且置信度自适应,因此主要帮助日期与查询吻合的中等置信度候选项,而不会进一步拉高已排名靠前的对话。
---
## 各问题类型表现(保留测试集)
| Question type | n | R@5 | NDCG@5 |
|---------------------------|-----|--------|--------|
| single‑session‑user | 63 | 100% | 98.62% |
| knowledge‑update | 69 | 98.55% | 97.25% |
| single‑session‑assistant | 54 | 98.15% | 97.01% |
| multi‑session | 115 | 99.13% | 94.57% |
| temporal‑reasoning | 124 | 97.58% | 90.51% |
| single‑session‑preference | 25 | 88.00% | 77.12% |
几点说明:
- **single-session-preference** 是最难的类型。LongMemEval 中的偏好通常是隐式的,且问题表述往往与原始对话没有共享词汇。对于仅基于对话内容进行检索的系统来说,这是一个根本性挑战。
- **single-session-assistant** 在此配置下存在结构性上限:由于仅索引用户发言,因此那些*仅*存在于助手发言中的答案,无法通过此处的任何嵌入策略被检索到。
---
## 复现指南
完整流水线、策略源码及分步命令见首条评论。欢迎就方法论、局限性或上述任何策略提问。
相似文章
LongMemEval-V2:评估长期智能体记忆,迈向经验丰富的同事
本文介绍了 LongMemEval-V2,这是一个用于评估 Web 智能体长期记忆系统的基准,同时提出了两种记忆方法:AgentRunbook-R 和 AgentRunbook-C。
从回想到遗忘:为个性化智能体评估长期记忆
研究者推出 Memora 基准,衡量大模型在持续数周至数月的对话中保留、更新与遗忘用户长期记忆的能力,发现模型常复用已失效记忆。
MemGym:面向LLM智能体的长时记忆环境
MemGym是一个基准测试,用于评估LLM智能体在长时任务中的记忆形成,它统一了现有的智能体gym和合成流水线,并采用记忆隔离得分。它涵盖工具使用对话、多轮搜索、编码和计算机使用,并包含一个轻量级奖励模型(MemRM)以实现高效评估。
RecMem:基于重复的记忆整合方法,用于高效且有效的长期运行LLM智能体
RecMem是一种基于重复的记忆整合方法,适用于长期运行的LLM智能体,通过仅在语义相似的交互重复出现时调用LLM,可减少高达87%的令牌消耗,同时提高准确性。
GroupMemBench:多轮对话中LLM代理记忆的基准测试
GroupMemBench是一个新的基准,用于评估多轮对话中LLM代理的记忆能力,揭示了当前记忆系统的缺陷,最佳系统仅达到46%的平均准确率。