
Uptrain • 2024-03-19
使用 UpTrain 评估为您的 LlamaIndex RAG Pipeline 加速
这是 Uptrain 的一篇客座文章。
我们很高兴宣布 LlamaIndex 最近集成了 UpTrain —— 一个用于评估您的 RAG Pipeline 并尝试不同配置的开源 LLM 评估框架。随着越来越多的公司将其 LLM 原型升级为可用于生产的系统,强大的评估提供了一个系统的框架来做出决策,而不是凭“感觉”。通过结合 LlamaIndex 的灵活性和 UpTrain 的评估框架,开发人员可以尝试不同的配置,从而微调基于 LLM 的应用程序以获得最佳性能。
关于 UpTrain
UpTrain [github || 网站 || 文档] 是一个用于评估和改进 LLM 应用的开源平台。它为 20 多种预设检查(涵盖语言、代码、嵌入用例)提供评分,对失败案例实例进行根本原因分析,并提供解决它们的指导。
主要亮点
- 数据安全:作为一个开源解决方案,UpTrain 在本地进行所有评估和分析,确保您的数据保留在您的安全环境中(LLM 调用除外)。
- 自定义评估器 LLM:UpTrain 允许自定义您的评估器 LLM,提供多种终端选项,包括 OpenAI、Anthropic、Llama、Mistral 或 Azure。
- 有助于模型改进的见解:UpTrain 不仅仅是评估,它还会进行根本原因分析,以查明您的 LLM Pipeline 中表现不佳的特定组件,并识别失败案例中的常见模式,从而帮助解决这些问题。
- 多样的实验:该平台支持对不同的提示、LLM 模型、RAG 模块、嵌入模型等进行实验,帮助您找到最适合特定用例的配置。
- 比较开源 LLM:使用 UpTrain,您可以将微调后的开源 LLM 与专有模型(例如 GPT-4)进行比较,帮助您在不牺牲质量的情况下找到最具成本效益的模型。
在以下部分中,我们将演示如何使用 UpTrain 评估您的 LlamaIndex Pipeline。此处展示的评估将帮助您快速找出影响响应质量的因素,从而使您能够采取适当的纠正措施。
LlamaIndex x UpTrain 回调处理器
我们引入了 UpTrain 回调处理器,使评估现有的 LlamaIndex Pipeline 变得无缝。只需添加几行代码,UpTrain 就会自动执行一系列检查——评估生成的响应质量、RAG Pipeline 检索到的上下文数据的质量以及所有中间步骤的性能。
如果您想直接跳到教程,请在此处查看。

全面评估:从基础 RAG 到高级 RAG
基础 RAG 包含几个步骤。您需要嵌入文档并将其存储在向量数据库中。当用户提问时,框架会嵌入问题并使用相似性搜索查找最相关的文档。然后,这些检索到的文档内容以及原始查询将被传递给 LLM 以生成最终响应。
虽然上述方法是一个很好的起点,但为了获得更好的结果,已经有了很多改进。高级 RAG 应用包含许多额外的步骤,可以提高检索到的文档质量,从而提高您的响应质量。
但正如本叔叔在 GenAI 世界中对彼得·帕克说的那句著名的话:
“复杂性的增加带来了更多故障点。”
大多数 LLM 评估工具只评估最终的上下文-响应对,而未能考虑高级 RAG Pipeline 的中间步骤。让我们看看 UpTrain 提供的所有评估。
解决 RAG Pipeline 中的故障点
1. RAG 查询引擎评估
首先,让我们来看一个基础 RAG Pipeline,看看如何测试其性能。UpTrain 提供了三个精心设计的操作符,用于测试检索到的上下文和 LLM 的响应。

- 上下文相关性:无论检索到的文档包含多少信息,如果它们与您的查询不相关,您很可能无法得到能回答您查询的响应。上下文相关性操作符判断从向量存储中获取的文档是否包含可用于回答您的查询的信息。
- 事实准确性:现在我们已经检查了上下文是否包含回答我们查询的信息,我们将检查 LLM 提供的响应是否有上下文中的信息作为支撑。事实准确性操作符评估 LLM 是否产生幻觉或提供了上下文中不存在的信息。
- 响应完整性:并非所有查询都直截了当。有些查询包含多个部分。一个好的响应应该能够回答查询的所有方面。响应完整性操作符检查响应是否包含查询请求的所有信息。

2. 子问题查询引擎评估
假设您尝试了基础 RAG Pipeline,并持续获得较低的响应完整性分数。这意味着 LLM 未能回答您查询的所有方面。解决这个问题的一种方法是将查询分解为多个更小的子查询,以便 LLM 更容易回答。为此,您可以使用 LlamaIndex 提供的 SubQuestionQueryGeneration 操作符。该操作符将一个问题分解为子问题,并使用 RAG 查询引擎为每个子问题生成响应。

如果您在 RAG Pipeline 中包含此 SubQuery 模块,它会引入另一个故障点,例如,我们将原始问题分解成的子问题未能很好地代表原始问题怎么办?UpTrain 会自动添加新的评估来检查该模块的性能。
- 子查询完整性:它评估子问题是否准确且全面地涵盖了原始查询。
- 对每个子查询的上下文相关性、事实准确性和响应完整性进行评估。


3. 重排评估
我们已经探讨了处理低响应完整性分数的方法。现在,让我们看看如何处理低上下文相关性分数。
RAG Pipeline 基于语义相似性检索文档。这些文档根据与查询的相似度进行排序。然而,最近的研究 [中间迷失:语言模型如何使用长上下文] 表明,LLM 对检索到的上下文中最关键信息的放置位置很敏感。为了解决这个问题,您可能需要添加一个重排模块。
重排涉及使用一个语义搜索模型(专门针对重排任务进行调整),该模型将检索到的上下文分解成更小的块,找到它们与查询之间的语义相似性,然后根据相似性顺序重写上下文并进行排名。

我们注意到,在使用 LlamaIndex 中的重排操作符时,可能会出现两种情况。这些情况根据重排过程前后节点的数量而有所不同。
a. 重排前后节点数量相同
如果重排后节点的数量保持不变,那么我们需要检查新的顺序是否使得排名较高的节点比旧顺序更与查询相关。为此,UpTrain 提供了一个上下文重排操作符。

- 上下文重排:检查重排后节点的顺序是否比原始顺序更与查询相关。
b. 重排后节点数量减少
减少节点数量有助于 LLM 提供更好的响应。这是因为 LLM 能更好地处理较短的上下文长度。然而,我们需要确保不会丢失对回答问题有用的信息。因此,在重排过程中,如果输出节点的数量减少,我们会提供一个上下文简洁性操作符。

- 上下文简洁性:检查减少的节点数量是否仍然提供了所有必需的信息。
主要收获:通过高级技术和评估增强 RAG Pipeline
在此快速回顾一下。我们从基础 RAG Pipeline 开始,评估了生成的响应和检索到的上下文的质量。然后,我们转向了高级 RAG 概念,如子查询技术(用于解决响应完整性分数低的情况)和重排技术(用于提高检索到的上下文质量),并探讨了量化其性能的高级评估。
这本质上提供了一个框架,用于系统地测试不同模块的性能,并通过数据驱动的决策评估它们是否实际带来了更高质量的响应。
人工智能领域的许多成功都归功于对不同架构、超参数、数据集等的实验,而我们与 UpTrain 的集成让您在构建 RAG Pipeline 时可以引入这些最佳实践。通过此快速入门教程开始使用 uptrain。