检索增强生成(RAG)是一种通过向大型语言模型(LLM)提供相关外部知识来增强其能力的技术。它已成为构建 LLM 应用最广泛采用的方法之一。要构建 RAG 应用,请先参阅 使用 Deep Agents 实现 RAG。 本教程将介绍如何使用 LangSmith 评估 RAG 应用:
  1. 如何创建测试数据集
  2. 如何在这些数据集上运行 RAG 应用
  3. 如何使用不同的评估指标衡量应用的性能
本教程将构建并评估一个用于回答 Lilian Weng 部分博客文章相关问题的机器人。

设置

配置环境

设置环境变量:
安装依赖:

构建应用

本教程使用 LangChain,但这些评估模式适用于任何框架。
构建一个包含三个阶段的最小 RAG 应用:
  • 索引:将 Lilian Weng 的几篇博客进行分块并索引到向量存储中。
  • 检索:根据用户问题检索相关文本块。
  • 生成:将问题和检索到的文档传递给 LLM。

索引文档

加载博客文章并建立索引:

生成答案

定义生成流程:

创建数据集

现在你已经有了应用,接下来创建一个包含示例问题和参考答案的小型数据集来评估它。本示例使用以下示例输入和输出:

定义评估器

RAG 评估器会将一个对象与另一个对象进行比较(响应、输入、检索到的文档或参考答案):
  1. 正确性(响应与参考答案)
    • 目标:评估 RAG 答案与真实答案的相似程度。
    • 模式:数据集中必须包含参考答案。
    • 评估器:使用 LLM 作为评判者来评估答案的正确性。
  2. 相关性(响应与输入)
    • 目标:评估响应对用户问题的回答程度。
    • 模式:无需参考答案;将答案与输入进行比较。
    • 评估器:使用 LLM 作为评判者来评估相关性和实用性。
  3. 依据性(响应与检索到的文档)
    • 目标:评估响应与检索到的上下文的一致程度。
    • 模式:无需参考答案;将答案与检索到的文档进行比较。
    • 评估器:使用 LLM 作为评判者来评估内容是否有依据以及是否存在幻觉。
  4. 检索相关性(检索到的文档与输入)
    • 目标:评估检索到的文档与查询的相关程度。
    • 模式:无需参考答案;将问题与检索到的文档进行比较。
    • 评估器:使用 LLM 作为评判者来评估检索相关性。
有关这些评估器类型的更多信息,请参阅评估 RAG 应用。 RAG 评估概览

正确性:响应与参考答案

使用 LLM 作为评判者,将生成的答案与数据集中的参考答案进行比较:

相关性:响应与输入

在没有 reference_outputs 的情况下比较 inputs 和 outputs。没有参考答案时无法评估准确性,但仍然可以评估模型是否回答了问题:

依据性:响应与检索到的文档

评估响应的另一种实用方式,是检查响应是否由检索到的文档提供支持(即以检索到的文档为依据),而无需参考答案:

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

使用 LLM 作为评判者,评估检索到的文档是否与用户问题相关:

运行评估

使用所有评估器运行评估:
你可以在此 LangSmith 实验中查看结果示例。

参考代码