分享
构建检索增强生成 (RAG) 应用程序
输入“/”快速插入内容
构建检索增强生成 (RAG) 应用程序
飞书用户2749
6月24日修改
构建检索增强生成 (RAG) 应用程序
LLM 所实现的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。
💾
本教程将介绍如何基于文本数据源构建一个简单的问答应用程序
。在此过程中,我们将介绍典型的问答架构,并重点介绍更多高级问答技术的资源。还将了解 LangSmith 如何帮助我们跟踪和理解我们的应用程序。随着我们的应用程序变得越来越复杂,LangSmith 将变得越来越有用。
什么是 RAG
💾
•
RAG 是一种利用附加数据增强 LLM 知识的技术。
•
LLM 可以推理广泛的主题,但他们的知识仅限于他们接受训练的特定时间点的公共数据。如果您想构建能够推理私有数据或模型截止日期后引入的数据的 AI 应用程序,则需要使用模型所需的特定信息来增强模型的知识。将适当的信息引入模型提示的过程称为检索增强生成 (RAG)。
•
LangChain 有许多组件,旨在帮助构建问答应用程序以及更广泛的 RAG 应用程序。
注意
:这里我们专注于非结构化数据的问答。如果您对结构化数据的 RAG 感兴趣,请查看我们关于
通过 SQL 数据进行问答的
教程。
概念
典型的 RAG 应用程序有两个主要组件:
💾
•
索引
:从源中提取数据并对其进行索引的管道。
这通常在线下进行。
•
检索和生成
:实际的 RAG 链,它在运行时接受用户查询并从索引中检索相关数据,然后将其传递给模型。
从原始数据到答案最常见的完整序列如下:
1.
加载
:首先我们需要加载数据。这是通过
DocumentLoaders
完成的。
2.
拆分
:
文本拆分器
将大块内容拆分
Documents
成小块内容。这对于索引数据和将数据传递到模型都很有用,因为大块内容更难搜索,并且不适合模型的有限上下文窗口。
3.
存储
:我们需要一个地方来存储和索引我们的分割,以便以后可以搜索它们。这通常使用
VectorStore
和
Embeddings
模型来完成。
检索和生成
1.
检索:根据用户输入,使用
检索器
从存储中检索相关分割。
2.
生成
:
ChatModel
/
LLM
使用包含问题和检索到的数据的提示生成答案
设置
Jupyter Notebook
本指南(以及文档中的大多数其他指南)使用
Jupyter 笔记本
,并假设读者也使用 Jupyter 笔记本。Jupyter 笔记本非常适合学习如何使用 LLM 系统,因为经常会出现问题(意外输出、API 故障等),而在交互式环境中阅读指南是更好地理解它们的好方法。
本教程和其他教程可能最方便在 Jupyter 笔记本中运行。请参阅
此处
了解安装说明。
安装
要安装 LangChain,请运行:
代码块
Python
pip install langchain
LangSmith
使用 LangChain 构建的许多应用程序将包含多个步骤,并多次调用 LLM 调用。随着这些应用程序变得越来越复杂,能够检查链或代理内部究竟发生了什么变得至关重要。最好的方法是使用
LangSmith
。
通过上面的链接注册后,请确保设置环境变量以开始记录跟踪:
代码块
Python
export
LANGCHAIN_TRACING_V2="true"
export
LANGCHAIN_API_KEY="..."
或者,如果在笔记本中,您可以使用以下方式设置它们:
代码块
Python
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()