评估记忆系统对于理解和优化代理行为是不可或缺的一部分。如第3章所述,记忆赋予代理状态保留、上下文持久性以及从过往交互中学习的能力,使它们能够有效处理长期任务。无论是相关性、速度还是成本方面,糟糕的记忆性能都会显著降低代理的推理、规划和整体任务成功率。因此,对记忆组件进行严格评估是很有必要的。这项评估不仅仅是检查数据是否能够存储和检索。我们必须衡量记忆系统在复杂操作中如何良好地满足代理的动态需求。重要方面包括检索信息的质量、记忆操作的效率以及对其实现目标的能力的最终影响。检索质量的度量标准当代理查询其记忆时(通常是用于长期信息的向量存储或用于短期上下文的缓冲区),检索信息的关联性很重要。不相关或过时的上下文会使代理偏离方向,导致错误的推理或不当的行动。我们采纳标准的信息检索度量方法,并引入针对代理的质量度量。标准信息检索度量方法这些度量方法为检索效率提供了一个基础的理解,前提是我们拥有表明哪些存储项与给定查询相关的真实标签。准确率@K: 衡量前K个检索结果中相关项的比例。它回答:“在显示的K个项目中,有多少是实际有用的?” $$ \text{准确率@K} = \frac{|\text{相关项} \cap \text{检索出的}_K|}{K} $$ 当处理不相关信息的成本较高时,高准确率很重要。召回率@K: 衡量在前K个结果中找到所有现有相关项的比例。它回答:“在我应该看到的所有项目中,有多少是在前K个结果中找到的?” $$ \text{召回率@K} = \frac{|\text{相关项} \cap \text{检索出的}_K|}{| ext{相关项}|} $$ 当缺少相关信息对任务有害时,高召回率很重要。平均倒数排名 (MRR): 评估列表中第一个相关项的排名位置。当用户或代理通常只需要一个好的结果时,它特别有用。 $$ \text{MRR} = \frac{1}{|Q|} \sum_{i=1}^{|Q|} \frac{1}{\text{排名}_i} $$ 其中 $|Q|$ 是查询数量,$\text{排名}_i$ 是第 $i$ 个查询的第一个相关文档的排名。归一化折损累积增益 (nDCG@K): 一种更复杂的度量方法,它考虑了分级相关性(项目可以是部分相关的),并降低了列表中排名靠后的相关项的价值。 $$ \text{DCG@K} = \sum_{i=1}^{K} \frac{rel_i}{\log_2(i+1)} \quad \text{或} \quad \text{DCG@K} = \sum_{i=1}^{K} \frac{2^{rel_i} - 1}{\log_2(i+1)} $$ $$ \text{nDCG@K} = \frac{\text{DCG@K}}{\text{IDCG@K}} $$ 其中 $rel_i$ 是排名为 $i$ 的项的相关性分数,IDCG@K 是理想的DCG@K(该查询可能达到的最大DCG@K)。nDCG对于评估复杂的排序场景很有用。以代理为中心的上下文评估标准度量方法虽然有用,但在代理系统中往往不足。从记忆中检索到的项目可能与查询事实相关,但对于代理的当前推理步骤或计划行动来说并非上下文中有用。例如,检索历史股价可能与关于公司的查询相关,但如果代理的即时目标是查找CEO姓名,则无益。我们需要评估检索到的上下文在代理操作流程中的实用性的度量方法。像RAGAS这样的框架在此提供了启发:上下文关联性: 衡量检索到的上下文与代理在当前状态和目标下的隐含需求有多契合。这通常需要以大型语言模型作裁判的方法,即一个独立且强大的大型语言模型评估检索到的上下文相对于推断查询的信噪比。评估提示可能会问:“鉴于代理的目标G和当前状态S,检索到的上下文C对于取得进展的关联性如何?”上下文忠实度: 评估代理的后续生成(推理步骤、计划更新或响应)是否基于事实并源于检索到的上下文。这有助于检测幻觉或代理忽视检索信息的实例。同样,以大型语言模型作裁判的方法很常见,用于检查代理提出的主张是否可直接归因于所提供的上下文C。为这些以代理为中心的度量方法建立真实标签是具有挑战性的。它通常涉及细致的人工标注或复杂的模拟环境。合成数据生成和基于大型语言模型的评估是实用的替代方案,尽管它们需要仔细验证。{"layout": {"title": "检索策略性能对比", "xaxis": {"title": "度量标准"}, "yaxis": {"title": "分数"}, "barmode": "group", "legend": {"traceorder": "normal"}, "template": "plotly_white", "font": {"color": "#495057"}}, "data": [{"type": "bar", "name": "策略A (基础余弦)", "x": ["Precision@3", "Recall@10", "nDCG@10"], "y": [0.65, 0.75, 0.72], "marker": {"color": "#339af0"}}, {"type": "bar", "name": "策略B (HyDE + 重排)", "x": ["Precision@3", "Recall@10", "nDCG@10"], "y": [0.80, 0.88, 0.85], "marker": {"color": "#20c997"}}]}使用标准度量方法对检索策略进行对比。策略B,结合了HyDE和重排,表现出更好的性能。效率和成本的度量标准代理系统,特别是交互式系统或大规模运行的系统,必须考虑与记忆操作相关的效率和成本。延迟: 从查询发出到接收结果的时间很重要。高延迟会使代理感觉反应迟钝,或减缓复杂的、多步骤的任务。测量端到端检索延迟,并将其分解为各个组成部分:查询嵌入生成、向量索引搜索、文档获取以及任何重排或后处理步骤。在各种负载条件下分析延迟分布(平均值、p95、p99)。吞吐量: 记忆系统每单位时间(例如,每秒查询数,QPS)可以处理的查询数量。这对于拥有许多并发用户或众多代理查询共享或独立记忆的多代理系统来说很重要。计算成本: 测量在索引(如果适用)、嵌入生成和查询期间消耗的CPU、GPU和内存资源。这直接影响运营支出。分析每次查询的成本或每份索引文档的成本。存储成本: 存储原始文档、生成的嵌入和向量索引结构所需的磁盘空间。对于大规模知识库,存储成本会变得可观。评估索引大小、检索速度和准确性之间的权衡(例如,在向量索引中使用乘积量化)。评估记忆交互及其影响除了静态的检索质量和效率之外,还要评估代理如何随着时间与其记忆进行互动,以及这种互动如何影响整体性能。记忆访问模式: 记录并分析代理读写记忆的频率。记忆是否为任务得到适当利用,或者代理是否利用不足或过度依赖它?特定类型的记忆(例如,短期与长期)是否按代理设计预期被访问?记忆更新有效性: 对于采用记忆整合、总结或遗忘机制的代理,评估它们的有效性。总结的记忆是否保留重要信息?代理的性能是否因压缩导致的信息丢失而在长时间交互中下降?对比采用不同记忆更新策略的代理的任务成功率。端到端任务性能: 最具决定性的评估涉及测量记忆系统对代理成功完成预期任务能力的影响。进行A/B测试,对比不同的记忆配置(例如,不同的向量数据库、嵌入模型、检索参数如块大小或top-K、结构化记忆的存在与否),并对照“定义代理任务的成功度量标准”中定义的基准任务。测量任务完成率、执行步骤、成本和用户满意度(如果适用)。工具和技术有效评估记忆系统通常需要专用工具和技术:以大型语言模型作裁判: 运用有能力的大型语言模型(例如,GPT-4,Claude 3)和精心设计的提示,评估上下文关联性、忠实度和总结质量等定性方面,并提供分数或比较判断。评估框架: 使用诸如LangChain Eval、LlamaIndex Eval、RAGAS或DeepEval等库,它们提供用于计算各种度量标准、管理评估数据集以及编排基于大型语言模型的评估的模块。仪器化和日志记录: 在代理内部实现详细的日志记录,以捕获记忆查询、检索到的上下文片段、检索后的代理推理步骤、延迟测量和最终结果。可追溯性对于调试记忆相关问题很重要。分布式追踪系统对复杂的多代理设置有益。评估代理的记忆系统需要多方面的方法。孤立地优化单个度量标准(如准确率@K)是不够的。您必须考虑检索质量、操作效率、成本以及对代理实现其目标效率的最终影响之间的关系。从这项评估过程中获得的认识对迭代记忆设计、调整参数,并最终构建更具能力和可靠性的代理系统非常重要。