
agentmemory LongMemEval-S 基准测试面向 AI 编程 Agent 的持久记忆检索能力评估【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory导读本指南围绕 agentmemory 在LongMemEval-S学术基准上的检索评估展开回答一个核心问题当 AI 编码 Agent 需要在跨越约 48 个会话、约 115K token 的历史记忆中定位哪个会话回答了这个问题时agentmemory 的检索系统能做到多好。读完本文你将掌握LongMemEval-S 数据集的含义与构建方式、recall_anyK等评估指标的精确计算方法、BM25-only 与 BM25Vector 混合检索的完整跑测流程以及从 benchmark/longmemeval-bench.ts 源码到 benchmark/data/longmemeval_results_hybrid.json 结果文件的全链路复现方法。LongMemEvalICLR 2025论文 arXiv:2410.10813是评估聊天助手长期记忆能力的学术基准覆盖 5 项核心能力信息抽取、跨会话推理、时间推理、知识更新与拒答abstention。agentmemory 用它来验证自家 BM25 倒排索引与本地向量索引的混合检索在真实对话记忆上的召回表现。基准配置总览在正式解读数字之前先明确本次评估的完整设定见 benchmark/LONGMEMEVAL.md配置项取值数据集LongMemEval-S500 个问题每题约 48 个会话约 115K tokens数据来源xiaowu0162/longmemeval-cleanedHugging Face 数据集仓库主指标recall_anyK——任一 gold 会话是否出现在 Top-K 检索结果中嵌入模型all-MiniLM-L6-v2384 维本地运行无需 API KeyLLM 参与无。纯检索评估不做答案生成也不引入裁判模型两个要点值得注意这是检索召回而非端到端问答准确率。官方 LongMemEval 排行榜指标是 QA 准确率检索 生成答案 GPT-4o 裁判真实排行榜上的系统根据 LLM reader 的不同在 60–95% 之间Oracle GPT-4o 约 82.4%。因此本文所有数字都应被理解为在 LongMemEval-S 语料上的检索能力上限分析而不是 LongMemEval 官方分数。每题独立建索引。评估流程为针对每个问题从其约 48 个会话构建一个全新的索引用问题文本执行搜索然后检查 gold 会话 ID 是否出现在结果中见 benchmark/longmemeval-bench.ts。这保证索引规模、会话构成对所有系统完全一致比较的是检索算法本身。核心检索组件三套源码实现本次评估对比的三个检索系统对应 agentmemory 源码中三个真实的索引/搜索实现这也是评估能代表生产能力的根本原因。BM25 关键词索引SearchIndexBM25-only 模式直接使用 src/state/search-index.ts 中实现的SearchIndex类。这是一个经典的倒排索引实现关键设计包括BM25 打分公式参数k1 1.2、b 0.75search-index.tsIDF 采用平滑变体log((N - df 0.5) / (df 0.5) 1)避免负 IDF词干还原Porter stemming所有 token 在索引与查询侧都会经过 src/state/stemmer.ts 中实现的 Porter 词干算法stem()函数例如复数、过去式、-ation、-ness等后缀被统一折叠同义词扩展src/state/synonyms.ts 维护了 43 组领域同义词如db/database/datastore、perf/performance/latency/throughput查询词命中同义词组时以 0.7 的权重附加扩展项前缀匹配基于排序词表做lowerBound二分查找对查询词前缀命中额外计入 0.5 权重系数的 IDF 得分CJK 支持含 CJK 字符的 token 走 src/state/cjk-segmenter.ts 的分词路径而非词干还原search-index.ts。索引字段覆盖观察observation的title、subtitle、narrative、facts、concepts、files与typesearch-index.ts即检索时不会遗漏记忆正文之外的元信息。向量索引VectorIndex向量模式使用 src/state/vector-index.ts 的VectorIndex为每条观察保存{ embedding: Float32Array, sessionId }搜索时对查询向量与库内所有向量计算余弦相似度vector-index.ts维护一个 Top-K 最小堆式的结果窗口。该模块还实现了validateDimensions维度守卫与 base64 序列化持久化——代码注释里特别记录了因 Node Buffer 池切片导致的磁盘上出现幽灵 2048 维崩溃问题issue #455/#469/#584/#587float32ToBase64显式传byteOffsetbyteLength规避vector-index.ts。本地嵌入提供者LocalEmbeddingProvider嵌入由 src/providers/embedding/local.ts 的LocalEmbeddingProvider提供通过huggingface/transformers加载Xenova/all-MiniLM-L6-v2模型dtype: q8量化mean pooling L2 归一化输出 384 维向量全程本地推理、无需 API Keylocal.ts。huggingface/transformers在 package.json 中声明为 optionalDependencies未安装时会抛出带安装提示的明确错误。混合检索HybridSearchhybrid 模式在 src/state/hybrid-search.ts 中实现将 BM25、向量与图谱三路检索结果做加权 RRFReciprocal Rank Fusion融合RRF_K 60默认权重bm25Weight 0.4、vectorWeight 0.6、graphWeight 0.3hybrid-search.ts。评估脚本构造 HybridSearch 时传入权重(0.4, 0.6, 0.0)并关闭重排即严格对应 BM25Vector 双流融合。融合细节值得展开hybrid-search.ts每条候选的综合得分 各流weight / (RRF_K rank)的加权和除以当前激活流的最大可达得分做归一化使单流命中也能保留配置权重、静默流不产生惩罚多流同时命中的候选获得AGREEMENT_BONUS 0.05的多流一致加成随后按会话去重每会话最多 3 条diversifyBySession再回填观察对象enrichResults。评估脚本 benchmark/longmemeval-bench.ts 将每个会话的全部对话轮次拼接为role: content文本块longmemeval-bench.ts构造CompressedObservation后同时喂给 BM25 索引与向量索引从而让三套检索在完全相同的观察语料上比较。总体结果解读核心结果如下表完整 JSON 见 benchmark/data/longmemeval_results_hybrid.json 与 benchmark/data/longmemeval_results_bm25.json系统R5R10R20NDCG10MRRagentmemory BM25Vector95.2%98.6%99.4%87.9%88.2%agentmemory BM25-only86.2%94.6%98.6%73.0%71.5%MemPalace raw纯向量96.6%~97.6%———值得强调的结论混合检索与纯向量仅差 1.4pp95.2% vs 96.6%且两者使用完全相同的嵌入模型all-MiniLM-L6-v2——说明 BM25 关键词信号与向量语义信号高度互补而非冲突BM25 单独即有 86.2%——Porter 词干 同义词扩展的关键词检索在对话数据上的表现远强于直觉预期向量给 BM25 带来 9pp 的提升86.2% → 95.2%是任何单一组件贡献的最大增益印证了混合检索的设计价值R10 达 98.6%——几乎所有 gold 会话都能在前 10 条结果中找到说明在真实召回场景下用户几乎不需要翻页。需要再次强调的方法论边界原文明确声明这些是检索召回率不是端到端 QA 准确率agentmemory不声称这些数字是LongMemEval 官方分数。按问题类型的细粒度分析混合检索BM25Vector类型R5R10题数knowledge-update98.7%100.0%78multi-session97.7%100.0%133single-session-assistant96.4%98.2%56temporal-reasoning95.5%97.7%133single-session-user90.0%97.1%70single-session-preference83.3%96.7%30BM25-only类型R5R10题数knowledge-update92.3%98.7%78single-session-user91.4%95.7%70temporal-reasoning88.0%94.7%133multi-session86.5%96.2%133single-session-assistant80.4%91.1%56single-session-preference60.0%80.0%30结论提炼偏好preference类是最难类别BM25 仅 60.0%、混合也只有 83.3%。这类问题要求理解隐式/间接表述如我不太喜欢 X 那种做法关键词无法直接命中语义向量也受限于表达方式跨会话类multi-session与知识更新类knowledge-update最强混合模式下 R5 分别达 97.7% 与 98.7%、R10 双双 100%。当事实分散在多个会话中时混合检索的多路召回 会话级去重优势得到充分发挥对 BM25 而言偏好类与 assistant 类是最弱项60.0% / 80.4%而 knowledge-update 却最好92.3%——知识更新问题通常含有明确的实体与关键词如某 API 版本号变更恰好是关键词检索的强项。评估指标的计算口径benchmark/longmemeval-bench.ts 中每个指标的实现都只有几行值得逐一定义recall_anyKgoldSessionIds中任一 ID 是否出现在retrievedSessionIds的前 K 条里longmemeval-bench.ts。注意any语义——只要命中任一 gold 会话即算成功这与官方 LongMemEval 按答案会话粒度评分的口径一致NDCG10以 gold 会话集合为相关集按1 / log2(i 2)的 DCG 衰减计算再除以理想 DCG 归一化longmemeval-bench.tsMRR首个 gold 会话在检索结果中的排名的倒数longmemeval-bench.ts。此外脚本对数据集做了预处理排除 abstention拒答类问题single-session-user_abs、multi-session_abs、knowledge-update_abs、temporal-reasoning_abs四类共 500 道非拒答问题进入评估longmemeval-bench.ts这保证了检索得到会话这一事件对每个问题都是可判定的。结果会写入benchmark/data/longmemeval_results_mode.json包含per_type汇总与per_question逐题明细gold ID、检索到的 Top-10 会话 ID方便二次分析。复现与运行指南第一步下载数据集数据集约 264 MB来自 Hugging Face 的xiaowu0162/longmemeval-cleanedpip install huggingface_hub python3 -c from huggingface_hub import hf_hub_download hf_hub_download(repo_idxiaowu0162/longmemeval-cleaned, filenamelongmemeval_s_cleaned.json, repo_typedataset, local_dirbenchmark/data) 下载完成后文件位于benchmark/data/longmemeval_s_cleaned.json评估脚本会从这里读取longmemeval-bench.ts。第二步运行 BM25-only 评估npx tsx benchmark/longmemeval-bench.ts bm25此模式不需要任何嵌入模型依赖仅使用 src/state/search-index.ts 的纯关键词检索。运行约 500 道题每处理 50 题会打印一次滚动recall_any5进度。第三步运行 BM25Vector 混合评估npx tsx benchmark/longmemeval-bench.ts hybridhybrid 模式要求安装huggingface/transformers仓库中为 optionalDependencies版本^4.2.0脚本会动态导入 src/providers/embedding/local.ts 的LocalEmbeddingProvider来生成本地嵌入longmemeval-bench.tsnpm install huggingface/transformers首次运行会自动下载Xenova/all-MiniLM-L6-v2模型q8 量化版约 23 MB嵌入计算是入库时的一次性开销搜索阶段在索引建好后是亚毫秒级参见 benchmark/REAL-EMBEDDINGS.md 中的实测双流检索平均延迟 2.39ms。运行前提Node.js ≥ 20见 package.json 的engines字段命令在仓库根目录执行tsx由 devDependencies 提供或使用npx tsx完整运行 500 题需要一定时间向量模式需为每题约 48 个会话生成嵌入中途进度会持续打印可放心观察。生产环境中的启示虽然 LongMemEval-S 评估的是独立索引上的检索能力但它的结论与 agentmemory 的生产设计高度一致见 benchmark/REAL-EMBEDDINGS.md 的对比评估关键词 语义双路是性价比最高的组合BM25 零依赖、零延迟成本负责精确/实体类查询向量负责语义类查询两者融合后召回提升最显著LongMemEval-S 上 9ppREAL-EMBEDDINGS 的 recall10 也提升 8.2pp本地嵌入是默认推荐EMBEDDING_PROVIDERlocal即可启用无 API Key、无调用成本、无网络延迟检索深度影响很小R2099.4%相比 R1098.6%仅提升 0.8pp说明混合检索的前 10 条已经足够可靠——这正是生产系统中top_k默认值设计的经验依据。延伸阅读benchmark/README.mdbenchmark 目录总览区分检索质量评估与负载测试两类数字benchmark/REAL-EMBEDDINGS.md真实嵌入Xenova/all-MiniLM-L6-v2在 30 个会话、20 个标注查询上的对比评估含逐查询明细benchmark/QUALITY.md 与 benchmark/SCALE.md其他质量与规模维度的评估方法src/state/search-index.ts、src/state/vector-index.ts、src/state/hybrid-search.ts本次评估直接使用的三套检索实现源码test/search-index.test.ts、test/hybrid-search.test.ts、test/vector-index.test.ts对应组件的单元测试可验证各项检索行为。【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考