分享
【实施案例】利用LLM+自己的文档+RAG,制作“问答APP”
输入“/”快速插入内容
【实施案例】利用LLM+自己的文档+RAG,制作“问答APP”
用户811
用户811
2024年4月7日创建
1578
2506
RAG 问答应用 入门案例+详细解释
🌿
场景②:
【LLM用例】互动问答(RAG驱动) 🦜️🔗 Q&A with RAG
落地:
【实施案例】利用大型语言模型+自己的文档+RAG,制作“问答APP”
发布于知乎:
【细读LangChain】RAG 问答应用入门案例+详细解释
RAG问答概览:
RAG问答
指的是利用强大的大型语言模型(简称LLM)来打造复杂的问答(Q&A)聊天机器人。这类应用能够
针对特定的信息源
来回答问题,采用的
核心技术就是检索增强生成
(Retrieval Augmented Generation,简称RAG)。
那么,RAG到底是什么呢?简单来说,RAG是一种技术,可以通过引入额外的数据来扩展LLM的知识库。虽然LLM可以讨论各种广泛的话题,但它们的知识是有局限性的,只限于训练截止时间之前的公开数据。如果我们想要
构建能够处理私有数据或模型训练后出现的新数据的人工智能应用
,就需要给模型补充具体的信息。这个过程就是将相关的信息引入并插入到模型的提示中,这就是所谓的检索增强生成(RAG)。
LangChain这个工具就有很多组件,都是为了帮助构建Q&A应用程序,以及更广泛的RAG应用程序。
需要注意的是:这里我们主要讨论的是非结构化数据的Q&A。我们在其他地方还讨论过两个RAG的应用案例:
•
SQL数据的Q&A
•
代码(例如,Python)的Q&A
RAG架构
RAG(Retrieval-augmented Generation)架构是一种结合了检索和生成的深度学习模型,它在处理问题时,既能够从大量的数据中快速找到相关信息,又能对这些信息进行综合和扩展,生成新的回答。其架构主要分为两个部分:
RAG应用的典型架构包含两个主要部分:
1.
索引:一个用于从数据源接收数据并进行索引的流水线。这通常是在线下的操作。
2.
检索与生成:实际的RAG链,它在运行时接收用户查询并从索引中检索相关数据,然后将该数据传递给模型。
从原始数据到答案的最常见完整序列如下:
索引:
1.
加载:首先我们需要使用文档加载器来加载我们的数据。
2.
分割:文本分割器将大型文档拆分成较小的块。这对于索引数据和将数据传递给模型都是有用的,因为大型块更难搜索,且无法适应模型有限的上下文窗口。
3.
存储:我们需要一个地方来存储和索引我们的分割数据,以便之后可以进行搜索。这通常使用向量存储和嵌入模型来完成。
检索与生成:
1.
检索:给定用户输入后,使用检索器从存储中检索相关的分割数据。
2.
生成:聊天模型/链式机器语言模型(ChatModel / LLM)使用包括问题和检索到的数据在内的提示来生成答案。
1.
索引(Indexing)
:
Load-Split-Store
◦
这个环节是一个数据处理流水线,它负责从原始数据源接收数据,并将其转换成适合索引的形式。这个过程通常在模型训练之前完成,并且通常是在线下进行的。
图 1 - 索引(Indexing),图源:
https://python.langchain.com/
◦
Load。
首先,使用文档加载器加载数据,这可能包括从文本文件、数据库或其他任何数据源读取数据。
◦
Split。
然后,文本分割器会将长文档分解成小块,这样做既可以方便索引管理,也有助于后续模型处理时更好地捕捉上下文信息,因为模型的注意力机制通常有一个上下文窗口的限制。