Skip to main content
检索增强生成(RAG)是一种通过为大型语言模型(LLMs)提供相关外部知识来增强其能力的技术。它已成为构建 LLM 应用最广泛使用的方法之一。 本教程将向您展示如何使用 LangSmith 评估您的 RAG 应用。您将学习:
  1. 如何创建测试数据集
  2. 如何在这些数据集上运行您的 RAG 应用
  3. 如何使用不同的评估指标来衡量应用的性能

概述

典型的 RAG 评估工作流程包含三个主要步骤:
  1. 创建一个包含问题及其预期答案的数据集
  2. 在这些问题上运行您的 RAG 应用
  3. 使用评估器来衡量应用的表现,考察以下因素:
    • 答案相关性
    • 答案准确性
    • 检索质量
在本教程中,我们将创建并评估一个聊天机器人,它能够回答关于 Lilian Weng 几篇富有洞察力的博客文章的问题。

设置

环境

首先,让我们设置环境变量:
并安装我们需要的依赖项:

应用

虽然本教程使用 LangChain,但此处演示的评估技术和 LangSmith 功能适用于任何框架。请随意使用您偏好的工具和库。
在本节中,我们将构建一个基本的检索增强生成(RAG)应用。 我们将坚持一个简单的实现,包括:
  • 索引:将 Lilian Weng 的几篇博客文章分块并索引到向量存储中
  • 检索:根据用户问题检索这些分块
  • 生成:将问题和检索到的文档传递给 LLM。

索引和检索

首先,让我们加载我们想要为其构建聊天机器人的博客文章并进行索引。

生成

我们现在可以定义生成管道。

数据集

现在我们已经有了应用,让我们构建一个数据集来评估它。在这种情况下,我们的数据集将非常简单:我们将包含示例问题和参考答案。

评估器

思考不同类型 RAG 评估器的一种方式是将其视为一个元组:评估对象 X 评估依据:
  1. 正确性:响应 vs 参考答案
    • 目标:衡量“RAG 链的答案相对于标准答案有多相似/正确
    • 模式:需要通过数据集提供的标准(参考)答案
    • 评估器:使用 LLM 作为评判者来评估答案的正确性。
  2. 相关性:响应 vs 输入
    • 目标:衡量“生成的响应在多大程度上解决了初始用户输入
    • 模式:不需要参考答案,因为它会将答案与输入问题进行比较
    • 评估器:使用 LLM 作为评判者来评估答案的相关性、有用性等。
  3. 基于事实性:响应 vs 检索到的文档
    • 目标:衡量“生成的响应在多大程度上与检索到的上下文一致
    • 模式:不需要参考答案,因为它会将答案与检索到的上下文进行比较
    • 评估器:使用 LLM 作为评判者来评估忠实度、幻觉等。
  4. 检索相关性:检索到的文档 vs 输入
    • 目标:衡量“我的检索结果对于这个查询有多相关
    • 模式:不需要参考答案,因为它会将问题与检索到的上下文进行比较
    • 评估器:使用 LLM 作为评判者来评估相关性
RAG 评估概述

正确性:响应 vs 参考答案

相关性:响应 vs 输入

流程与上面类似,但我们只需查看 inputsoutputs,而不需要 reference_outputs。没有参考答案,我们无法评估准确性,但仍然可以评估相关性——即模型是否解决了用户的问题。

基于事实性:响应 vs 检索到的文档

另一种无需参考答案来评估响应的有用方法是检查响应是否由检索到的文档证明(或“基于”)。

检索相关性:检索到的文档 vs 输入

运行评估

我们现在可以使用所有不同的评估器来启动我们的评估任务。
您可以在此处查看这些结果的示例:LangSmith 链接

参考代码