LLM 支持的最强大的应用程序之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。
本教程将展示如何基于文本数据源构建一个简单的问答应用程序。在此过程中,我们将介绍典型的问答架构。
一、什么是 RAG?
RAG是一种通过附加数据增强 LLM 知识的技术。
LLM 可以推理广泛的主题,但它们的知识仅限于在训练它们的特定时间点之前的公共数据。如果你想构建能够推理私有数据或模型截止日期后引入的数据的 AI 应用程序,则需要使用模型所需的特定信息来增强模型的知识。将适当的信息引入和插入模型提示的过程称为检索增强生成(Retrieval Augmented Generation)。
LangChain 有许多组件旨在帮助构建问答应用程序,以及更普遍的 RAG 应用程序。
注意:这里我们专注于非结构化数据的问答。如果你对结构化数据的 RAG 感兴趣,我将在后续介绍关于通过 SQL 数据进行问答的教程。
典型的 RAG 应用程序有两个主要组件:
-
索引:从源中提取数据并对其进行索引的管道。这通常是离线进行的。
-
检索和生成:实际的 RAG 链,它在运行时接受用户查询并从索引中检索相关数据,然后将其传递给模型。
从原始数据到答案的最常见完整序列如下所示:
索引
-
加载:首先,我们需要加载数据。这是通过文档加载器完成的。
-
拆分:文本拆分器将大型文档拆分成较小的块。这对于索引数据和将其传递到模型中都很有用,因为大块更难搜索,并且不适合模型的有限上下文窗口。
-
存储:我们需要某个地方来存储和索引我们的拆分,以便以后可以搜索它们。这通常使用 VectorStore 和 Embeddings 模型来完成。
检索和生成
4. 检索:给定用户输入,使用检索器从存储中检索相关文本块。
5. 生成:ChatModel/LLM 使用包含问题和检索到的数据的提示生成答案。
二、准备工作
首先我们需要设定一下 LLM:
然后我们还需要 embedding model,即嵌入模型:
为了节约成本,我使用了 BGE 系列的开源模型。
我还使用了 Qdrant 向量数据库。
接下来,我们将按照上面的步骤来学习如何使用 LangChain 搭建一个 RAG 系统。
三、索引:加载
LangChain 本身提供的 DocumentLoader 不多,我们可以选择社区贡献的 PDF DocumentLoader:
可以看到,我们得到了 Document 对象的列表。Document 对象包含 page_content (str) 和元数据 (dict) :
docs 列表的长度就表示 PDF 文档的页数。可以理解为每页一个 Document 对象。
LangChain 官方提供了很多集成的 DocumentLoader:
https://python.langchain.com/docs/integrations/document_loaders/
四、索引:拆分
许多 LLM 的上下文窗口只有 8-32k。即使现在有超长上下文窗口的 LLM,但是模型也很难在几千字甚至几万字的文档输入中找到信息。
为了解决这个问题,我们将文档拆分成块以进行嵌入和向量存储。这应该有助于我们在运行时仅检索与文章中最相关的部分。
在这种情况下,我们将 Document 对象拆分成 1000 个字符的块,块之间有 200 个字符的重叠。重叠有助于减轻将语句与与其相关的重要上下文分离的可能性。我们使用 RecursiveCharacterTextSplitter,它将使用常用分隔符(如换行符)递归拆分文档,直到每个块的大小合适。这是针对一般文本用例的推荐文本拆分器。
我们设置 add_start_index=True,以便每个拆分文档在初始文档中开始的字符索引保留为元数据属性“start_index”。
五、索引:存储
现在我们需要索引 13 个文本块,以便我们可以在运行时搜索它们。最常见的方法是使用嵌入模型生成每个文本块内容的嵌入向量,并将这些嵌入向量插入到向量数据库中。当我们想要搜索我们的文本块时,我们首先生成查询的嵌入向量,然后执行某种“相似性”搜索,以识别与我们的查询嵌入向量最相似的文本嵌入向量。最简单的相似性度量是余弦相似性。
初始化完成 vector_store 之后,我们就可以将文本块及其嵌入向量拆入向量数据库中了:
每个文本块都会有一个 ID 关联。
六、检索和生成:检索
现在让我们编写实际的应用程序逻辑。我们想要创建一个简单的应用程序,它接受用户问题,搜索与该问题相关的文档,将检索到的文档和初始问题传递给模型,并返回答案。
首先,我们需要定义搜索文档的逻辑。LangChain 定义了一个 Retriever 接口,它包装了一个索引,可以根据字符串查询返回相关文档。
最常见的 Retriever 类型是 VectorStoreRetriever,它使用向量存储的相似性搜索功能来促进检索。任何 VectorStore 都可以通过 VectorStore.as_retriever() 轻松转换为 Retriever:
七、检索和生成:生成
让我们将所有内容放在一起形成一个链,该链接收问题、检索相关文档、构建提示、将其传递到模型并解析输出。
LangChain提供了:
-
create_stuff_documents_chain 指定了将检索到的上下文输入到提示模板和 LLM 中的方法。
-
create_retrieval_chain 添加检索步骤并通过链传播检索到的上下文,并将其与最终答案一起提供。它具有输入键 input,并在其输出中包含输入、上下文和答案。
在问答应用中,向用户展示用于生成答案的来源通常很重要:
八、最后分享
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源
,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享
!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码
,免费领取【保证100%免费
】