检索增强生成 (RAG) 是一种通过为大型语言模型 (LLM) 提供相关外部知识来增强其能力的技术。它已成为构建 LLM 应用最广泛使用的方法之一。
本教程将向您展示如何使用 LangSmith 评估您的 RAG 应用。您将学习:
- 如何创建测试数据集
- 如何在该数据集上运行您的 RAG 应用
- 如何使用不同的评估指标来衡量应用的性能
概述
典型的 RAG 评估工作流程包含三个主要步骤:
- 创建包含问题及其预期答案的数据集
- 在这些问题上运行您的 RAG 应用
- 使用评估器来衡量应用的表现,考虑以下因素:
- * 答案相关性
- * 答案准确性
- * 检索质量
在本教程中,我们将创建并评估一个用于回答 Lilian Weng 的 有见地的博客文章的问答机器人。
设置
环境
首先,设置环境变量:
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "YOUR LANGSMITH API KEY"
os.environ["OPENAI_API_KEY"] = "YOUR OPENAI API KEY"
process.env.LANGSMITH_TRACING = "true";
process.env.LANGSMITH_API_KEY = "YOUR LANGSMITH API KEY";
process.env.OPENAI_API_KEY = "YOUR OPENAI API KEY";
安装所需的依赖项:
pip install -U langsmith langchain[openai] langchain-text-splitters bs4 requests
npm i langsmith langchain @langchain/classic @langchain/openai @langchain/textsplitters cheerio
yarn add langsmith langchain @langchain/classic @langchain/openai @langchain/textsplitters cheerio
pnpm add langsmith langchain @langchain/classic @langchain/openai @langchain/textsplitters cheerio
应用
在本节中,我们将构建一个基本的检索增强生成 (RAG) 应用。
我们采用一个简单的实现方式:
- * 索引:将 Lilian Weng 的部分博客分块并存储在向量数据库中
- * 检索:根据用户问题检索相关块
- * 生成:将问题和检索到的文档传递给 LLM。
索引和检索
首先,加载我们想要构建聊天机器人的博客文章并对它们进行索引。
生成
现在我们可以定义生成流程。
数据集
现在我们已经完成了应用构建,让我们创建一个数据集来评估它。在这个例子中,我们的数据集非常简单:包含示例问题和参考答案。
评估器
思考不同类型 RAG 评估器的一种方式是将其视为一个元组:被评估的内容 X 评估依据:
- **正确性**:回答与参考答案对比
- *
Goal:衡量 "*how similar/correct is the RAG chain answer, relative to a ground-truth answer*" - *
Mode:需要通过数据集提供真实(参考)答案 - *
Evaluator:使用 LLM 作为评判者来评估答案正确性。
- **相关性**:回答与输入对比
- *
Goal:衡量 "*生成的回复在多大程度上解决了用户的初始输入*" - *
Mode:无需参考答案,因为它会将答案与输入问题进行比较 - *
Evaluator:使用 LLM 作为评判者来评估答案的相关性、实用性等
- **基础性**:回复与检索文档的对比
- *
Goal:衡量 "*生成的回复在多大程度上与检索到的上下文一致*" - *
Mode:无需参考答案,因为它会将答案与检索到的上下文进行比较 - *
Evaluator:使用 LLM 作为评判者来评估忠实度、幻觉等
- **检索相关性**:检索文档与输入的对比
- *
Goal:衡量 "*我的检索结果对这个查询的相关性如何*" - *
Mode:无需参考答案,因为它会将问题与检索到的上下文进行比较 - *
Evaluator:使用 LLM 作为评判者来评估相关性
正确性:回复与参考答案的对比
相关性:回复与输入的对比
流程与上述类似,但我们只需查看 inputs 和 outputs 而无需 reference_outputs。没有参考答案我们无法评分准确性,但仍然可以评分相关性——即模型是否回答了用户的问题。
基础性:回复与检索文档的对比
另一种无需参考答案即可评估回复的有效方法是检查回复是否由检索文档支撑(或"基于"检索文档)。
检索相关性:检索文档与输入的对比
运行评估
我们现在可以使用所有不同的评估器启动评估任务。
您可以在此处查看这些结果的示例: LangSmith 链接