Agent Memory Leaderboard
来自 AML 团队

AML 官方博客

来自 Agent Memory Leaderboard 团队的研究、技术实践与最新动态。

一起探索智能体记忆。
← 返回全部文章

AML榜前方案解读|从“相似”到“完整”,InvMem 如何让 Agent 找回真正有用的长期记忆

方案聚焦15 分钟阅读

记忆之巅排行榜


Agent Memory 没有唯一答案。

本次方案解读系列邀请记忆之巅排行榜 AML 榜前的开源、商业记忆方案,围绕AML第一期挑战赛,拆解各自如何写入、组织、检索和治理记忆。我们关注的不是排名,而是成绩背后的技术选择、工程取舍与适用边界。






AML 开源方法榜首方案解读


一套以细粒度表示、混合检索、排名融合和对话结构恢复为核心的轻量级长时记忆方案

Github仓库地址:

https://github.com/wenxiaof345-ctrl/vanilla-rag-memory

榜单地址:

https://huggingface.co/spaces/agent-memory-leaderboard/leaderboard

InvMem 用 Dense 检索理解语义改写,用 BM25 保留精确事实,再通过 Weighted RRF 与同会话邻接扩展,把“相关片段”组织为“完整证据”。




导语:

Agent 需要的不是更长的聊天记录,

而是更有效的记忆




当 Agent 从单轮问答走向长期协作,历史信息开始迅速累积。把所有对话原样塞回上下文,看似最直接,却会带来成本上升、噪声增加和关键事实被淹没等问题。真正困难的不是“存下多少”,而是在问题出现时,从漫长历史中找到真正相关、足够准确、上下文完整的证据。

在 Agent Memory Leaderboard(AML)首期榜单中,InvMem 以 45.06 的正式全量评测成绩(公开报道四舍五入为 45.1)位列开源方法榜第一。

与依赖复杂生成链路或多轮模型调用的方案不同,InvMem 的核心是一条经过精细组织的轻量级混合检索链路:先把对话变成细粒度记忆,再同时利用语义相关性与词法精确性进行召回,最后恢复命中片段周围的局部对话结构。

更细粒度结果显示,InvMem 在“程序与工作流执行”细项中以 37.26 位列第一,并在“经验数据发现与模拟”细项中并列第一。这两项结果提示,长期记忆系统的价值不仅在于召回相似内容,还在于能否完整带回规则前提、执行步骤,以及可供当前任务参考的历史经验。

核心认识:长期记忆检索不能只回答“哪一句最像问题”,还要把规则、条件、步骤和经验上下文组织成能够支撑当前任务的一组证据。

InvMem 的方法定位

InvMem 把长期记忆问题定义为“证据检索与组织”,而不是在存储阶段生成新的知识。历史消息仍是事实来源,系统不预先调用大模型总结对话,也不把记忆改写成可能偏离原意的摘要。它所做的,是改变历史信息的表示粒度、组合互补的检索信号,并在结果阶段恢复局部对话结构。

因此,InvMem 的输入是历史对话与当前问题,输出是按相关性组织的 Top K 记忆证据。最终答案可以由下游模型基于这些证据生成,但 InvMem 的核心算法止于“把正确证据找出来并组织好”。这一边界使方法效果更容易归因,也使每个模块都可以独立分析和消融。




长对话检索为什么不能只靠一种相似度




长对话记忆中存在三类典型缺口。第一,用户提问往往会改写历史表述,字面不同但语义相同;第二,向量表示擅长理解整体语义,却可能弱化姓名、日期、数字和专有名词等精确线索;第三,检索器即使命中了正确句子,也可能漏掉它前后的主语、指代、原因或时间条件。

因此,InvMem 没有把希望押在单一检索器上,而是围绕这三类缺口设计互补机制:用细粒度分块减少信息稀释,用 Dense 与 BM25 双路检索覆盖语义和字面线索,用 Weighted RRF 稳定融合异构排名,再用同会话邻接扩展补回局部上下文。

如果把传统的向量检索流程概括为“切块—向量化—相似度排序—返回 Top K”,那么 InvMem 的变化主要发生在三个位置:切块时主动保护边界语义,排序时引入词法通道与排名级融合,返回前再利用会话局部结构补全证据。它并没有推翻 RAG 的基本范式,而是对长对话中最容易出错的环节进行了针对性修正。

图 1 InvMem 核心算法流程




第一步:

把长对话变成可检索的细粒度记忆




InvMem 以单条消息为基本边界处理对话。短消息直接形成一个记忆单元;长消息按照 320 个词法单元切分,相邻分块保留 40 个单元重叠,滑动步长为 280。随后,每个记忆单元由 BAAI/bge-small-en-v1.5 编码为归一化向量,并保留角色、时间和会话归属等必要上下文信息。

为什么要分块?一条长消息可能同时讨论多件事。如果只生成一个整体向量,局部事实容易被主题平均化;当问题只对应其中一句时,整体相似度未必足够高。细粒度分块让每个向量聚焦更窄的语义范围,检索器更容易定位具体事实。

为什么要重叠?机械切分可能恰好把条件与结论、主语与谓语拆到两侧。40 个单元的重叠使边界附近的信息同时出现在相邻记忆中,降低关键语义因切分位置而丢失的风险。

这一阶段解决的问题:让长消息中的局部事实不再被整体主题稀释,同时尽量保住分块边界处的完整语义。

归一化向量:让相似度只反映方向

BGE 编码后,InvMem 对文档向量和查询向量都进行 L2 归一化。未经归一化时,向量模长可能影响点积分数;归一化后,所有向量都落在单位超球面上,点积只反映方向接近程度,也就等价于余弦相似度。这样既避免了向量长度带来的额外偏差,也可以直接通过矩阵乘法批量计算当前用户记忆与查询之间的相似度。

正式版本只对当前记忆片段的原文进行编码,没有在向量输入中拼接前后消息。这样做保留了细粒度表示的独立性,也避免同一段上下文被反复复制到大量向量中。上下文信息不在编码阶段提前混入,而是在检索完成后通过受约束的邻接扩展恢复。




第二步:Dense 与 BM25 双路检索




问题到来后,InvMem 首先构造统一检索查询。普通问题直接进入检索;如果题目包含候选选项,则把问题和全部选项拼接为一个查询,使选项中的人名、地点、日期和候选事实也能参与召回。随后,同一查询分别进入 Dense 语义检索和 BM25 词法检索。

Dense:理解“换一种说法”

Dense 检索将查询编码为归一化向量,并与记忆向量计算点积。由于双方都经过 L2 归一化,这个点积等价于余弦相似度。它负责识别同义表达、语义改写和隐含关联。例如,历史中的“她开始在医院工作”与问题中的“她从事什么行业”虽然没有完全相同的关键词,语义向量仍可能把二者连接起来。

BM25:守住不能模糊的精确信息

只靠语义向量并不稳妥。姓名、日期、数字、缩写、地点和代码符号往往决定答案是否正确,却可能在整体语义表示中被弱化。InvMem 因此并行执行 BM25 检索,让稀有且有区分度的词获得更强信号,同时通过长度归一化避免长文本天然占优。正式版本采用经典参数 k₁=1.5、b=0.75。

公式中的词频 f(t,i) 衡量查询词在当前记忆中的出现强度,IDF(t) 衡量该词在整个记忆集合中的稀有程度,|i|/avgdl 则负责修正片段长度。一个只在少量记忆中出现的专有名称,通常比“去”“做”“今天”这样的常见词更有区分度;同样,一个很长的片段也不会仅因包含更多词而自动获得优势。

InvMem 的词法切分与消息分块使用相同的基础规则,并进行大小写归一化。只有 BM25 分数大于零的记忆才进入词法排名,这意味着完全没有词面交集的片段不会凭空获得词法融合增益。

双路互补:Dense 负责“意思是否相近”,BM25 负责“关键字面事实是否准确”。两者不是重复召回,而是在补彼此的盲区。




第三步:

用 Weighted RRF 融合两套排名




Dense 的余弦相似度与 BM25 的词法相关分数含义不同、数值尺度也不同。如果直接把原始分数相加,就必须人为设计归一化方式,而且分数分布还会随查询和记忆集合改变。InvMem 选择在排名层面融合,而不是在原始分数层面硬拼。

其中,60 是 RRF 的平滑参数;Dense 排名权重为 1.0,BM25 排名权重为 0.5。也就是说,正式版本以语义召回为主,以词法召回为辅。RRF 只关心一个记忆在两条路径中的名次,因此无需让两种原始分数具有相同尺度,对偶发异常高分也更稳健。

这一设计还带来一个直观效果:同时被两条路径排在前列的记忆会获得稳定增益;只在某一路表现突出的记忆仍有机会进入候选,从而兼顾共识证据与互补证据。

一个简化的融合例子

假设记忆 A 在 Dense 排名中位列第 2,在 BM25 中位列第 5;记忆 B 在 Dense 中位列第 1,却没有任何词面交集。按照当前权重,A 会同时获得语义与词法两部分贡献,而 B 只获得 Dense 贡献。B 仍可能因为语义排名足够高而领先,但 A 不会因两个分数体系尺度不同而被不合理压低。

这个例子体现了 RRF 的克制:它不会把词法匹配直接变成绝对裁决,也不会忽略精确命中。BM25 的 0.5 权重提供辅助增益,Dense 的 1.0 权重仍保持主导,符合长对话问题经常对历史表述进行改写的特点。平滑参数 60 则减小相邻名次之间的剧烈波动,使融合结果不会过度依赖某一路的一两个排名位置。




第四步:

从“命中片段”恢复“完整证据”




完成融合排序后,InvMem 不会直接截取前 Top K。它先选择融合排名前 20 个结果作为高置信种子,再为每个种子补充存储顺序中前后各一个记忆单元。邻居必须与种子属于同一会话,扩展结果完成去重后,如果数量仍不足,再按照原始融合排名补足 Top K。

这一步利用的是对话的局部连续性。检索器可能命中一句“是的,我下周就会过去”,但“去哪里”和“为什么去”可能在上一话轮;也可能命中一个结论,而它依赖的条件位于紧邻片段。通过补充同会话邻居,系统能够恢复问答配对、指代关系、因果条件、时间顺序和事件补充。

邻接扩展不是第三个检索器,也不会让任意相邻内容无条件进入结果。只有高置信种子才能触发扩展,并且扩展范围严格限制在同一会话、前后各一个记忆单元,从而在上下文完整性与噪声控制之间保持平衡。

关键变化 InvMem 的最终目标不是返回“最像问题的句子”,而是返回“能够共同支撑答案的一组记忆证据”。

为什么选择 Top-20 种子和 ±1 邻居

种子数量决定了多少高相关片段能够获得上下文补充。种子过少,部分有效召回无法恢复周边证据;种子过多,低相关候选也会携带邻居进入结果。正式版本选择前 20 个融合作为种子,是召回覆盖与噪声控制之间的折中。

邻接窗口同样需要克制。前后各一个记忆单元通常足以恢复紧邻的问答配对、主语和事件条件;窗口继续扩大,结果很容易被某一会话的大段局部文本占满。InvMem 因此采用小窗口扩展,并在去重后用原始融合排名补足剩余位置,避免上下文恢复取代相关性排序。




一个完整例子:四个模块如何协同




考虑一段虚构的长期对话。某次会话中,用户提到:“Mina 接受了柏林研讨会的邀请,准备介绍 Atlas 项目。”紧接着又说:“她把出发时间改到周五,因为周四需要完成医院的值班。”若之后的问题是“她去哪里介绍什么项目,为什么改期?”,答案同时涉及地点、项目名称和改期原因,证据分布在相邻话轮中。

首先,分块机制把这两条消息保存为独立而相邻的记忆单元,避免整段会话被压缩成一个宽泛向量。查询进入 Dense 通道后,“去哪里介绍什么项目”能够与“研讨会”“介绍 Atlas”形成语义联系;进入 BM25 通道后,“Atlas”“柏林”等精确实体提供强词面信号。Weighted RRF 会提高同时受到两条通道支持的片段排名。

如果高分种子首先命中“介绍 Atlas 项目”,邻接扩展会把关于“柏林研讨会”的同一条消息以及紧接着的改期原因共同带回。最终证据集合不再只有一个孤立答案片段,而是覆盖“柏林—Atlas—医院值班”三项信息,为下游回答提供完整依据。

示例所体现的分工:分块保护局部事实,Dense 连接改写语义,BM25 锁定精确实体,RRF 协调两路排名,邻接扩展补齐跨话轮证据。




关键技术路径:从历史对话到可用证据




InvMem 的实际技术链路由以下六个步骤组成。它们从记忆表示、检索召回、排名融合到上下文恢复逐层衔接,最终把历史对话组织为可供下游任务使用的 Top K 证据:

1. 细粒度表示:按消息处理历史,对长消息执行 320/40 重叠分块,并用 BGE 建立归一化语义向量。

2. 统一查询:将问题与候选选项组织为同一检索视图,使判别性线索共同参与召回。

3. 双路召回:Dense 建立语义排名,BM25 建立精确词法排名。

4. 排名融合:使用 Weighted RRF 汇总两套排名,以语义为主、词法为辅。

5. 结构恢复:从前 20 个高置信种子出发,在同一会话内补充前后各一个记忆单元。

6. 结果组织:去重并按原始融合排名补足,得到最终 Top K 记忆证据。




榜单结果如何与系统设计相互印证




AML 官方邀稿邮件确认,InvMem 位列首期学术/开源榜单第一;在“程序与工作流执行”细项中以 37.26 位列第一,并在“经验数据发现与模拟”细项中并列第一。这些结果只对应 AML 首期学术/开源榜单、InvMem 、相应评测套件和当期规则,不能外推为永久排名或对所有应用场景的普遍结论。

程序与工作流执行:

规则不仅要“找到”,还要“带全”

程序与工作流类任务通常同时依赖规则含义、精确条件、参数以及步骤顺序。InvMem 用 Dense 检索连接问题改写与历史规则的语义,用 BM25 强化数字、实体和限定词等精确信号,再由 Weighted RRF 稳定融合两路排名;当高分片段只覆盖某一步时,同会话邻接扩展会尝试补回紧邻的前提和后续操作。这样的设计与该细项所关注的能力方向相吻合,但现有榜单结果不能被解释为某个单独模块的确定贡献。

经验数据发现与模拟:

把历史经历恢复为可复用案例

经验数据往往以条件、行动与结果相互关联的形式分散在多轮对话中。Dense 检索负责发现措辞不同但情境相似的经历,BM25 帮助保留名称、地点、时间和参数等关键细节,邻接扩展则恢复同一会话中的局部过程。InvMem 本身负责检索和组织这些类比证据,并不直接执行后续模拟或答案生成;下游模型基于返回的证据完成相应任务。

团队如何理解这两项结果

我们更愿意把这两项结果理解为对“证据完整性”设计思路的支持:长期记忆的目标不只是把 Top 1 相似片段排在最前面,而是尽量让最终证据集合同时覆盖语义相关内容、精确事实以及必要的局部上下文。对于规则执行和经验复用,这种完整性往往比单句相似度更接近任务真正需要的信息形态。

哪些结论可以说,哪些不能说

从实现机制看,可以说 InvMem 的细粒度表示、双路检索、排名融合和邻接扩展与邮件所指出的两类能力表现具有合理对应关系。但在没有受控消融实验的情况下,不能断言某一模块贡献了多少分,也不能把当期评测结果推广到未测试的数据、任务或应用环境。




下一步计划:

从强基线走向可验证的研究系统




InvMem 是一个以检索为中心、边界清晰的正式版本。它通过重叠分块、Dense 与 BM25 双路召回、Weighted RRF 和同会话邻接扩展组织记忆证据;尚未自动执行记忆摘要、事实抽取、冲突消解、遗忘管理或显式的全局关系建模。这些边界既说明当前结果来自哪条实际链路,也限定了后续研究需要解决的问题。

第一步将围绕现有强基线开展成对、可复现的消融实验,并在 LoCoMo-Refined 等公开数据上分别考察分块大小与重叠比例、词法权重、RRF 参数、邻接种子数量和窗口范围。只有在控制其他条件后稳定复现的变化,才会被视为相应模块的有效增益。

在此基础上,后续可研究自适应记忆粒度、会话结构建模、时间信息建模、记忆更新与冲突处理、遗忘机制,以及面向更大记忆规模的索引方案。这些内容目前属于待验证方向,不属于 InvMem 正式全量测评版本的既有能力。SQLite 仍只承担持久化与元数据管理,是工程基础设施而非核心算法贡献。

研究原则:后续改进将以可复现的公开实验和严格消融为依据,区分“合理假设”与“已经验证的增益”,避免把未完成的方向写成现有能力。




结语:

让长期记忆从“存储能力”

变成“证据能力”




InvMem 的核心并不是简单叠加多个检索组件,而是针对长对话记忆中的三类实际缺陷建立一一对应的机制:通过重叠分块缓解信息稀释,通过 Dense 与 BM25 的互补召回缓解单一相似度偏差,通过 Weighted RRF 消除异构分数难以直接比较的问题,再通过同会话邻接扩展修复证据上下文的残缺。

这条链路最终实现的是从“找到相似内容”到“组织可用证据”的转变。对长期协作型 Agent 而言,记忆的价值不在于保存了多少历史,而在于需要它时,能否以准确、完整且可解释的方式把关键经验重新带回当前任务。InvMem 的探索,正是围绕这一目标展开。




  • 团队介绍:忆构智能团队

  • 团队成员:房文晓、武志妍、李星璇、刘昱浩

  • 指导老师:郭婷、王达、马亿

忆构智能团队聚焦智能体长时记忆、检索增强生成与结构化知识组织研究,注重算法创新与工程实践相结合。团队研发的 InvMem 系统融合语义检索、词法检索、结果排序与上下文扩展等机制,为智能体提供统一、可靠的记忆写入与检索能力。团队将持续探索更准确、高效且可复现的智能体记忆技术,推动相关方法在实际场景中的应用。

内容说明:本文所涉及的系统架构、技术实现、数据分布、相关讨论等由 InvMem 团队提供,仅代表该团队对自身方案的介绍与理解,不代表 Agent Memory Leaderboard(AML)的官方技术立场或推荐意见。

AML 仅对文中引用的对应评测周期、赛道、组别、参评版本及正式榜单成绩进行核验。

本文不构成对该方案在所有场景下的效果保证、产品推荐或采购建议。




▉ Github仓库地址:

https://github.com/wenxiaof345-ctrl/vanilla-rag-memory

▉ 榜单地址:

https://huggingface.co/spaces/agent-memory-leaderboard/leaderboard