首页 / 文章

为何智能体记忆基准测试具有误导性,以及如何利用自身数据进行评估

代理记忆基准测试因有缺陷的答案键和评分标准而产生误导。应单独测试信息检索能力,并加入近期性、回避行为及遗忘检测。

发布者:REACTAPP.TOP阅读约 15 分钟3531 词

来源: Your Agent’s Memory Benchmark Is Measuring the Wrong Thing

关于智能体记忆能力的公开基准测试无法判断哪种系统更适合特定问题,甚至有些测试根本无法可靠地判定哪种系统更优。相关证据十分明显:在所有被引用的基准测试中,根据一家内存技术供应商自身的研究论文,那种将整个对话内容直接嵌入提示词的简单方法,其表现就优于专门的记忆系统。独立审计发现,该基准测试的答案键中有约6%是错误的,而且其自动评分系统会接受大约三分之二的故意给出的错误答案。合理的做法是不再依据排行榜来做选择,而是基于自身数据建立评估体系。

试想一个团队通常是如何选择记忆系统的。他们会查看排行榜,选择排名最高的方案然后投入使用。上线三周后,该系统在处理用户上周二已更正的数据时出现了错误,而且开始与一周前的决策相矛盾。查询所需的关键信息在四个无关数据的后面出现。虽然基准测试称这是市场上最好的系统,但却未提及该团队自身存在的问题。

在这一切背后有一个贯穿所有记忆系统开发的问题:如何确定它确实有效?令人不满的答案是,团队通常参考的那些数据无法回答这个问题,而且有些数据对任何人来说都难以提供有效答案。

排行榜排名仅表明某个系统在他人设计的测试中表现良好,该测试由其他评分者依据他人定义的正确答案进行评分。它并不能说明你的智能体是否能记起用户三周前提到过的内容。这是两个不同的问题,其中只有一个与你相关。

你正在筛选的基准标准衡量的是其他内容

这一主要结果值得仔细审视。以引用率最高的对话记忆基准测试为例,有一种不依赖任何记忆系统的方法,它直接将完整对话内容放入提示词中并据此作答,最终获得了第一名,其表现略优于对比组中的专用记忆系统。但没有评论者指出这一点。该研究发表在经过同行评审的学术期刊上,论文中提到一种名为Mem0的知名记忆库,作者称在原始准确率方面,完整上下文的表现优于他们自己的系统,但每条答案的延迟时间约为后者的十倍。另一家竞争厂商也引用了该论文中的相同数据,因此这并非某一方刻意编造的结论。

其实并没有看上去那么尴尬,正确读取内容才是关键。将所有内容都粘贴进去之所以准确,是因为没有遗漏任何信息。但由于溢出问题和二次成本的存在,这种方式并不具备扩展性。因此,这项基准测试主要奖励的是那些能在使用更少标记符的同时最接近全上下文准确度的系统。这确实有助于衡量性能。但这与测试系统是否能调出用户一个月前提供的某个细节并非同一回事,任何将排名结果误解为后者的人,都是被自己的假设误导了。

实际情况更为不确定。另一项公开且可重复的审计虽未经同行评审,却对该基准测试的答案进行了详细分析,发现约有6%的答案存在错误:编造的事实、错误的时间推理,以及将答案错误地归功于其他参与者。当审计人员输入一些错误但看似合理的答案给标准自动评分系统时,该系统仍接受了大约三分之二的答案。不过有一个需要说明的局限性:这项审计的作者Penfield也从事记忆系统的研究,因此他们的立场并不中立。但由于该研究可以重复验证,且该基准测试自身代码库中存在的未解决问题也指向同样的问题,因此即便评估者的可信度有所下降,这个问题依然是真实存在的。其含义十分严峻。 如果某个基准测试的关键指标误差率为6%,那就无法区分差异小于6%的两个系统;而那种能通过三分之二“看似合理但实际错误”的测试的评分标准衡量的是置信度而非正确性。

不同厂商的测试数据也彼此矛盾。两家最知名的内存厂商针对同一基准测试公布的分数相互冲突,因为它们都重新运行了对方的测试系统,得出的结果被对方质疑,而测试结果在很大程度上取决于谁来配置谁的集成方案。随着配置不同而出现数十点差异的总体数值只是营销手段,而非真实测量结果。这些并不代表这些系统质量差,只是意味着排行榜无法为你对它们进行排序,更不可能针对你的特定应用场景进行排序。

长缓存并非内存,基准测试混淆了二者

一种更为隐性的混淆在比较开始之前就破坏了其准确性。长上下文与记忆本是两回事,但许多评估方法却将它们视为同一维度。在“大海捞针”的场景中,即一个句子隐藏在冗长的文档中,模型必须将其找出来,这实际上是在测试模型对单一固定输入的注意力分配能力。这是一种便捷的初步测试,却没有相应的理论支撑,仅有被广泛复制的测试脚本。更为严格的基准测试RULER表明,那些宣称拥有巨大上下文窗口的模型,其实际处理能力远低于宣传的数值。这两种测试方法都是用来衡量模型的容量,也就是模型真正能够利用的提示信息量。

记忆意味着会话之间的连贯性。周一时智能体获取了某些信息,对话结束后窗口被清空,但到周五它仍应记得这些信息。对话记忆基准测试LoCoMo和LongMemEval会在多个会话中反复进行“存储后再检索”的过程,因此无论存在何种缺陷,它们都属于同一类测试。

需要测试的两层结构

当现有公共基准测试无法满足需求时,可以选择自行设计测试,而首要的设计决策就是如何划分测试结构。将其分为两层:一层负责信息检索,即记忆系统是否找回了正确的事实;另一层负责结果评估,即智能体最终是否给出了正确回应或采取了恰当行动。这两层可以独立出现故障,而整体端到端准确率则是通过将两层的结果平均得出的,这种方式会掩盖具体的故障所在。

这种划分并非新现象。2024年的一篇论文中提出的开源RAGAS框架便是基于此理念构建的,它将检索器查找相关上下文的能力与模型准确使用该上下文的能力分开。TruLens则用三元结构来描述相同概念:检索时的上下文相关性、答案是否基于所检索内容得出的合理性,以及答案是否回应了问题的相关性。名称不同,但划分方式一致。

这两层都是必不可少的,但恰恰是这一部分常被团队忽略。即便检索器表现良好,也仍可能给出错误答案,因为正确的事实存在于上下文中,而模型却忽视了它们,或进行错误的推理,又或将这些事实与自身已有的认知混为一谈。正因如此,真实性才需要成为独立的评估指标。相反,若检索器表现不佳,模型仍可能给出正确答案,因为它会用自己的参数化知识填补空白,而这才是更为危险的情况。端到端的评估结果会显示为“正确”,但实际上其记忆层并未获取到任何有用信息,而这种缺陷会在模型恰好不知道某个领域事实时暴露出来。仅依据最终答案是无法区分有效记忆与侥幸猜对的。

检索系统需要专门的排序指标,而非依赖大语言模型的判断

检索层是进行评分运算的环节,而运算本身并无主观判断。这些评估指标源自经典的信息检索技术,已有数十年历史:

  • Recall@k指的是本应被检索出的事实中出现在前k项中的比例。当下游模型能够容忍干扰信息,且主要关注点在于所需事实是否出现时,该指标较为适用。
  • Precision@k是指被检索出的项目中被证明是相关的内容所占的比例。在上下文空间有限、每个被浪费的位点都会耗费计算资源或使模型偏离正确路径的情况下,该指标尤为重要。
  • 平均倒排排名则用于奖励将唯一正确的事实置于首位的做法,尤其适用于那些只有首个匹配结果才有效的信息检索场景。
  • 标准化折现累积增益适用于需要按重要性排序的相关性评估,因为模型会更重视早期的上下文信息。
  • 命中率,即是否出现了任何相关内容,是一种较为粗略的初步筛选标准。
  • 请选择与您的智能体读取记忆方式相匹配的指标。

    几乎没有团队注意到下一点,而这可能是此处最重要的内容。RAGAS、TruLens和DeepEval等流行的评估框架提供了称为上下文召回率和上下文精确率的指标,人们很自然地会认为它们就是上述的排序指标。但实际上并非如此。在大多数这类工具中,是由大型语言模型评估员来阅读检索到的内容并给出评分,而非与标注过哪些事实真正相关的集合进行对比。因此,那些以为自己在衡量检索质量的团队,实际上是在让一个语言模型对另一个模型的检索结果发表意见,从而继承了该语言模型评估员所携带的所有偏见。要获得真实的数据,需要有一份标注过哪些存储事实与每个查询相关的集合,之后召回率@k等指标才只是简单的计数而已。制作这样的集合才是真正的难点,而这些评估框架却让人们可以绕过这一环节。 这就解释了为何真实的检索数值十分罕见,而那些看似严谨实则不然的仪表板却很常见。

    通用RAG评估遗漏的四种检查项

    如果将智能体内存当作普通的RAG流程来处理,就会仅评估检索结果和答案质量,然后就此止步。这样一来就会忽略仅与内存相关的四种缺陷,而这些缺陷之所以会出现,完全是因为内存会随时间持续存在并发生变化。

    一致性。该智能体所说的内容是否与之前对用户的表述或自身先前的陈述相矛盾?标准的RAG评估无法发现这一点,因为每个查询都是单独评分的,但若内存中存储了两个相互矛盾的事实,不同时间查询时就会显得前后矛盾。虽然可以用数字来表示,但NLI模型可以标记出后续陈述与先前陈述的矛盾之处,通过对整个对话以及系统返回内容的分析,将矛盾转化为可追踪的指标,而非单纯的用户投诉。用于识别对话中矛盾环节的数据集正是基于这一理念构建的。

    时效性。一旦事实发生变化,记忆会返回新值还是旧值?LongMemEval(ICLR 2025)将时间推理与知识更新列为其测试的五项能力之一,因此这是个被认可的评估维度而非额外要求。通过测试的设计具备双时间特性:事实会记录其在现实世界中的存在时间以及系统发现该事实的时间,而更新操作则是通过时间戳使旧版本失效,而非直接覆盖它。Graphiti和Zep这类时间图系统就是采用这种方式工作的。测试很简单:在更新之后,查询会返回新值,同时系统仍能告知你旧值在之前是正确的。

    回避问题。如果某个事实从未被存储下来,是系统会明确说明,还是编造内容?LongMemEval将回避问题视为一种独立的能力,这一做法是正确的:因为编造内容的记忆系统比承认存在缺失的记忆系统更糟糕,毕竟客户最终看到的总是那些被自信地编造出来的内容。这一概念早在2018年的一项阅读理解测试中就已出现,那次测试故意设置了无法回答的问题。在这种测试中,方法很简单——询问一些从未被存储的内容;正常的系统会发现没有相关信息并予以拒绝,而出问题的系统则会填补这种空白。

    遗忘。对于那些本应被淡出或删除的数据,它们真的消失了吗?机器去学习技术为此提供了方法。TOFU就是这样的一个基准测试,它将数据分为遗忘集和保留集,不仅验证被遗忘的数据无法被获取,还确保其相邻数据也未被影响。记忆测试采用类似逻辑:数据被删除后,既无法检索也无法推断,而相关数据依然存在。但这与“最新性”概念不同。替代某个值只是刻意将旧值保留在文件中,而真正的删除——比如因隐私请求而进行的删除——必须不留任何痕迹。仅能判定数据无效的系统虽然能通过最新性测试,却在“被遗忘权”审核中默默失败,只有能够区分两者的评估才能识破这一问题。

    由评判者给答案打分,但不要让其定义真相

    通过计数来计算检索得分。由于正确答案可以有多种表达方式,单纯依靠答案本身往往无法做到准确评估,因此大多数团队会使用大语言模型作为评判者。这种方法虽在有明确规定的范围内有效,但这些限制却容易被忽视。2023年那篇提出将大语言模型用作评判者的论文指出,优秀的评判者在超过80%的情况下能与人类评分者达成一致,这也使得该技术广受欢迎。该论文还列举了其失效模式:位置偏差,即评判者偏爱最先看到的答案;冗长偏差,即更看重答案的长度而非内容质量;以及自我强化偏差,即评判者更喜欢用自身风格撰写的答案。2024年的后续研究进一步揭示了令人不安的现象:模型能够识别出自己的写作风格,而且识别能力越强,它就越偏好这种风格。 另一篇2023年的论文G-Eval表明,GPT-4的评分与人类结果相当接近,但也指出了该场景中最关键的问题——评分者倾向于给流畅、自信、格式规范的文本更高分。而这恰恰正是那种看似正确实则错误的答案的特征,也正是那些内容听起来没错但数值出错的记忆会混入结果的原因。

    可以使用评分机制,但需加以约束:

    • 依据以已知正确答案为基准的评分标准进行打分,而非采用“哪个更好”的开放式评判,这样评分者就能依据事实判断,而非凭感觉投票。
    • 检查其与你自己数据中经人工标注的样本的匹配频率,因为在你的领域内与你的判断相悖的评分机制显然存在偏差。
    • 像原论文那样消除立场偏差:调换候选项的顺序后再计算平均值。
    • 应将法官模型的升级视为评估套件的迁移,而非自动改进。新模型的评分无法与旧模型相比,而悄无声息的替换会因与被测试系统无关的原因改变数值。

    法官模型是用于校准的工具,而非必须服从的权威。

    利用自身数据构建测试环境

    所有测试都基于一组标准数据集:来自您所在领域的已标记、不可更改的案例集合,每个案例都会关联需要检索的事实以及应得出的答案。它实际上是一个回归测试套件,需要持续通过测试,同时要适应非确定性输出。许多团队会从几百个手工筛选的案例开始。这个数量范围只是从业者的经验法则,并非固定规则,因此可将其视为一个可逐步扩展的起点。

    构建数据集并非难点,难的是确保其真实性。随着产品、语料库及用户群体的变化,经过冻结处理的黄金数据集会逐渐与实际流量脱节;而基于过时数据集构建的完整绿色数据集则会带来虚假的信心,这是最昂贵的代价。解决之道在于建立循环机制:将生产环境中的失败案例作为新的标注案例纳入黄金数据集,淘汰那些不再反映现实情况的案例,这样数据集就能跟随产品的发展而非仅停留在过去的快照上。合成案例可用于提升数据覆盖度,也有多种框架能够生成此类案例,但由于生成案例带有创建模型的固有缺陷,仍需人工审核的初始数据集作为补充。

    该套件会在两个环境中运行,因为离线与在线环境会检测到不同的故障。在离线模式下,它以黄金数据集为基准来控制版本发布:通过重复且可预测的测试,确认此前已确认正常的功能没有出现故障。而在在线模式下,通过分析实际采集的样本数据,它能发现静态数据集永远无法察觉的问题,比如分布偏移、那些没人预料到的异常长尾查询,以及经过数周状态累积后才显现出的缓慢老化现象。离线测试结果为绿色时表示已知功能完好无损;而在线监控则能揭示未知问题。应将离线结果视为可发布的依据,绝不能将其视为功能正常的证明。

    成本与延迟应放在同一评估体系中

    成本与延迟是大多数评估中都会忽略的指标,而对于内存而言则至关重要。内存处于每一轮处理的关键路径上,其检索延迟以p95值来衡量而非被平均值掩盖,这一数值决定了智能体响应的速度上限。每轮所需的token数构成了整个经济性分析的核心:内存的存在意义在于减少token使用量,避免直接粘贴完整历史记录,因此,即便准确率相当,那些消耗的token数超过节省量的模块也未能实现其核心目标。存储规模的扩大会带来缓慢的退化效应,每周都会增加一点延迟并引入干扰因素,最终导致检索性能明显下降,而任何特定时间点的准确率测试都未曾发出警告。写入路径的成本,即数据提取与对齐的工作量,属于实际的计算开销,而准确率指标却无法体现这一点。

    记忆系统的构建应注重效率与一致性,而评估正是检验这一点的手段。虽然每轮多花费半秒时间能提升精度,但若其带来的成本高于节省的成本,那就不能称其为更好的记忆系统;不过仅有精度一栏的评分表却会如此判定。当延迟与成本与质量并列显示时,各种权衡关系就会变得清晰可见,而非偶然出现。

    实际应用中的系统形态

    从抽象层面来看,该系统包含两层结构、四次记忆检查、一个经过校准的评估者、一套从实际应用中更新而来的标准数据,以及与精度并列显示的成本信息。两张示意图展示了其在实际应用中的具体表现。

    假设某个财富管理平台将其内存存储为知识图谱,该图谱包含少量实体类型和关系类型,并通过多阶段提取流程为每个事实赋予0到1之间的置信度分数。该团队不会通过询问模型答案是否合理来对其进行评估,而是直接用一组已标注的文档来测试检索层,这些文档中正确的实体和关系早已明确,因此提取的召回率和精确度是具体的数值而非主观印象。最新性也会经过专门测试:如果较新的文档修改了旧文档中的内容,查询结果必须返回更新后的数值。在智能体依赖该知识图谱之前对其进行评分的相同标准,也适用于智能体的内存管理。

    现在假设有一个包含几十个智能体的法律分析系统,其中一些担任评分员,另一些担任分析员,它们共享一个结构化的评分表,而非互相传递文本记录。在这种情况下,一致性成为首要的评估指标,因为任何与共享状态中的既定评分相矛盾的智能体都属于可测量的缺陷,而非某人主观感受到的问题。每轮处理的成本会与质量指标一同显示在控制面板上,因为只有当评估显示在成本下降的同时质量仍能保持时,那个负责决定文档实际需要哪些智能体并大幅减少模型调用次数的路由层才有存在的价值。这两种系统都不是通过超越基准值来赢得信任的,而是通过对自己处理的数据进行测量,结合各层功能及与工作流程相匹配的检测机制来获得信任。

    评估成为瓶颈的迹象

    有一些症状表明问题出在评估机制本身,而非模型、存储系统或检索组件:

    • 记忆系统是从排行榜中选出的,但实际运行结果与其评分始终不符。
    • 仅以端到端答案准确率作为唯一评估指标,因此无法判断故障是由于检索失败还是模型处理错误信息所致。
    • 检索次数来自框架的上下文召回指标,且不存在标注数据集,这意味着大型语言模型在自行评估检索效果并将其当作衡量标准。
    • 智能体会出现自相矛盾的情况或提供过时信息,而该评估体系根本不会察觉,因为它只测试单个查询,忽略了一致性、时效性、回避策略以及遗忘现象。
    • 由于人们只记录准确率这一项数据,因此没人知道最新的记忆更新对延迟或Token使用量产生了什么影响。

    基于这种模式,更强大的模型或更聪明的检索器也无法挽救局面,因为无法观察到的问题就无法得到改进。解决办法在于采用严格的方法:将检索与答案生成分开,在带标签的数据集上用排序指标对检索结果进行评分,加入四项记忆检查,不要盲目相信评估结果而是要对评估者进行校准,用实际数据更新黄金数据集,并在报告准确率的同时一并说明成本和延迟情况。

    这样也就完成了更全面的论证。上下文窗口并非内存。取而代之的存储结构需要通过排序方式读取,而非直接查找。模型前的工作集必须得到管理,而不仅仅是扩大规模,写入路径也应当进行整合而非堆积数据。整个系统还需要在您自己的数据上进行评估,涵盖检索、回答以及公共基准测试所忽略的四个检查项,同时要考量成本、延迟以及准确性,因为排行榜根本无法提供您真正需要了解的信息。只有同时构建内存结构及其评估机制,才能用数据明确判断该智能体是否具备记忆能力。如果跳过评估,那就只能依据他人的分数来解决本不属于他们的问题。

    相关阅读

  • 为何编程智能体的记忆应仅存储差异信息及存储方法 — 智能体的记忆应仅记录模型无法猜出的内容。每条记录需经过四项测试,存储时需满足三项要求,以及为何 git 中的 markdown 非常适用。 —