Python:基于LangChain的RAG(检索增强生成)应用开发实践


前言

  检索增强生成(RAG:Retrieval-Augmented Generation),LangChain官网上说:RAG是一种技术,可以通过将其与外部知识库结合来增强大语言模型。RAG 解决了模型的一个关键限制:模型依赖固定的训练数据集,这可能导致信息过时或不完整。当给定一个查询时,RAG 系统首先会在知识库中搜索相关信息。然后,系统将检索到的信息整合到模型的提示中。模型利用提供的上下文来生成对查询的响应。通过弥合大语言模型与动态、有针对性的信息检索之间的鸿沟,RAG 是一种构建更强大、更可靠的 AI 系统的强大技术。

一、基本概念

  RAG包含两个主要组件:

  1. 检索器(Retriever):从知识库中检索相关信息或文档。
  2. 生成器(Generator):将检索到的信息传递给大模型生成回答。

二、业务流程

  上面定义中说到,RAG依赖知识库来进行检索,所以检索前就需要先构建好知识库,于是业务实现中就有了知识构建和用户对话这两个部分,如下:

在这里插入图片描述

1、知识构建

  知识库的构建需要用到文档加载器(Loader)、数据分割器(Spliter)、向量嵌入模型(Embedding)和向量数据库(Vector DataBase)这几个组件和服务。

  • 文档加载器LangChain集成了丰富的文档加载器,包含对各种文件的读取支持。本文使用TextLoader加载本地文本文件来做测试说明,当然也可以使用WebBaseLoader来加载网页。在langchain安装目录的document_loaders目录中可以看到所有支持的的文档加载器。
  • 数据分割器:常见的基于文本结构,自然地组织成段落、句子和单词等层次单元。利用这种内在结构来指导我们的分割策略,创建能够保持自然语言流畅性、保持分割内部语义连贯性并适应不同粒度文本的分割。LangChainRecursiveCharacterTextSplitter实现了这一概念。在langchain安装目录的text_splitter文件中定义了对数据分割器的集成支持。
  • 向量嵌入模型LangChain中的向量嵌入模型接口定义在其安装目录的embeddings目录中,这里我们选用FastEmbedEmbeddings来做说明。
  • 向量数据库LangChain中集成了众多的数据存储服务接口,定义在了其安装目录的vectorstores文件夹下。本文选用最简单的FAISS向量数据库来做测试。

2、用户对话

  用户发起对话,输入查询问题,系统通过向量嵌入模型将查询问题生成向量,然后送往向量数据库服务做余弦相似度检索,通过Top-K指定召回的文档块(Chunk)数量。此外,还可以使用重排序模型(RankLLM)对检索结果进行重新排序(本文将不涉及)。LangChain中关于Rerank的支持接口定义在langchain_community安装目录下的document_compressors目录里面。
  将检索返回的文档块组合成文本后放入到提示词模板(Prompt Template)中,作为上下文内容提供给大语言模型(LLM)。最后将由大语言模型将回答结果返回给用户。

三、实现步骤

1、安装开发依赖

1.1、安装LangChain包

  官方说:LangChain 是一个用于开发由大型语言模型(LLMs)驱动的应用程序的框架。简单理解就是一个集成工具包,除了提供一些开源的工具组件外,还集成了一大批第三方大型语言模型及相关技术(如嵌入模型和向量存储),实现了标准接口。

  • langchain:主框架和标准组件。这是最常用的包,包含了核心的抽象、标准实现和常用工具。
  • langchain-core:核心抽象和基础。包含了最基本的接口(如BaseChatModel, BaseRetriever)、核心概念(如 Messages, Documents)和基础运行时(如Runnable协议)。其他包都构建于此之上。多数情况下,只需要直接安装langchain包。它会自动安装langchain-core作为依赖。
  • langchain-community:第三方集成。包含了所有与第三方服务(如OpenAI, Anthropic, Pinecone, Chroma等)的集成代码。这些集成由社区维护,稳定性可能不如核心包。

  使用Pip安装

pip install --upgrade langchain langchain-community

1.2、安装其它依赖包

  • 嵌入模型:我们使用Qdrant FastEmbeddingLangChain中定义的FastEmbedEmbeddings,要使用这个类需要安装fastembedPython包,如下:
pip install --upgrade fastembed
  • 向量数据库:文中使用FAISS向量数据库,同样的,需要安装faiss-cpu这个Python包,如下:
pip install --upgrade faiss-cpu
  • 大模型依赖:文中大语言模型使用智谱AI,根据LangChain文档说明,需要安装httpx httpx-sse PyJWT这几个Python代码包,如下:
pip install --upgrade httpx httpx-sse PyJWT

2、构建数据知识库

2.1、文档数据加载

  准备一个普通的文本文件,如:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值