当前位置: 首页 > news >正文

基于 LangChain 搭建简单 RAG 系统

基于 LangChain 搭建简单 RAG 系统

参考其官方文档:https://python.langchain.com/v0.2/docs/tutorials/rag/

演示如何快速搭建一套简单的 RAG 系统。

(1)安装与配置

首先,安装 LangChain 框架及其依赖项。

# 安装LangChain框架及其依赖项
!pip install langchain langchain_community langchain_chroma

(2)数据准备与索引构建

接下来,准备数据并构建索引。

LangChain 的 DocumentLoaders 中提供了种类丰富的文档加载器,例如,我们可以使用 WebBaseLoader 从网页中加载内容并将其解析为文本。

from langchain_community.document_loaders import WebBaseLoader
# 使用WebBaseLoader加载网页内容:
loader = WebBaseLoader("https://example.com/page")
docs = loader.load()

加载完成后,由于加载的文档可能过长,不适合模型的上下文窗口,需要将文档分割成合适的大小。

LangChain 提供了 TextSplitter 组件来实现文档分割。

from langchain_text_splitters import RecursiveCharacterTextSplitter
# 使用TextSplitter将长文档分割成更小的块,其中chunk_size表示分割文档的长度,chunk_overlap表示分割文档间的重叠长度
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)

接下来需对分割后的文本块进行索引化,以便后续进行检索。

可以调用 Chroma 向量存储模块和 OpenAIEmbeddings 模型来存储和编码文档。

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
# 使用向量存储(如Chroma)和嵌入模型来编码和存储分割后的文档
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())

(3)RAG 系统构建:

构建好知识源后,接下来开始构建基础 RAG 系统。该系统包括检索器与生成器,具体工作流程如下:

  • 对于用户输入的问题,检索器首先搜索与该问题相关的文档,

  • 接着将检索到的文档与初始问题一起传递给生成器,即大语言模型,

  • 最后将模型生成的答案返回给用户。

首先进行检索器构建,这里可基于 VectorStoreRetriever 构建一个 Retriever 对象,利用向量相似性进行检索。

# 创建检索器
retriever = vectorstore.as_retriever()

接下来是生成器部分的构建,这里可使用 ChatOpenAI 系统模型作为生成器。

这一步,需设置 OpenAI 的 API 密钥,并指定要使用的具体模型型号。例如,我们可以选择使用 gpt-3.5-turbo-0125 模型。

import os
os.environ["OPENAI_API_KEY"] = 'xxx'
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")

随后是输入 Prompt 的设置,LangChain 的 Prompt Hub 中提供了多种预设的 Prompt 模板,适用于不同的任务和场景。这里我们选择一个适用于 RAG 任务的 Prompt。

from langchain import hub
# 设置提示模板
prompt = hub.pull("rlm/rag-prompt")

最后我们需要整合检索与生成,这里可以使用LangChain表达式语言(LangChain Execution Language,LCEL)来方便快捷地构建一个链,将检索到的文档、构建的输入 Prompt 以及模型的输出组合起来。

from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

# 使用LCEL构建RAG链
rag_chain = (
  {"context": retriever | format_docs, "question": RunnablePassthrough()}
  | prompt
  | llm
  | StrOutputParser()
)

# 定义文档格式化函数
def format_docs(docs):
  return "\n\n".join(doc.page_content for doc in docs)

# 使用RAG链回答问题
response = rag_chain.invoke("What is Task Decomposition?")
print(response)

通过以上步骤,我们可以方便快捷地使用 LangChain 迅速搭建一个基础 RAG 系统。LangChain 提供了一系列强大的工具和组件,使得构建和整合检索与生成过程变得简单而高效。


声明:资源可能存在第三方来源,若有侵权请联系删除!

http://www.dtcms.com/a/112407.html

相关文章:

  • Mysql 中的两阶段提交
  • HTML应用指南:利用POST请求获取三大运营商5G基站位置信息(一)
  • 2025-04-04 Unity 网络基础5——TCP分包与黏包
  • Windows 安装和使用 ElasticSearch
  • Git提交本地项目到Github
  • vue+form实现flappybird
  • 迅饶科技X2Modbus网关-GetUser信息泄露漏洞
  • Mysql 中 B 树 vs B+ 树
  • SQL Server 2022 脏读问题排查与思考
  • HTML5 vs HTML 和 CSS3 vs CSS:全面对比
  • Spring Boot 中使用 Redis:从入门到实战
  • Websoft9分享:在数字化转型中选择开源软件可能遇到的难题
  • 神经网络能不能完全拟合y=x² ???
  • WinForm真入门(7)——Button控件详解
  • 京东运维面试题及参考答案
  • k8s进阶之路:本地集群环境搭建
  • 谷歌 Gemini 2.5 Pro 免费开放
  • 24、 Python Socket编程:从协议解析到多线程实战
  • 如何完整迁移 Git 仓库 ?
  • yum list查询时部分包查找不到流程分析
  • 54.大学生心理健康管理系统(基于springboot项目)
  • 有人DTU使用MQTT协议控制Modbus协议的下位机-含数据库
  • Redis分布式锁详解
  • AWS Langfuse AI用Bedrock模型使用完全教程
  • 【万字总结】前端全方位性能优化指南(八)——Webpack 6调优、模块联邦升级、Tree Shaking突破
  • 安卓离线畅玩的多款棋类单机游戏推荐
  • 【leetcode100】动态规划Java版本
  • Debezium日常分享系列之:Debezium 3.1.0.Final发布
  • 什么是量子计算?
  • 【代码艺廊】pyside6桌面应用范例:homemade-toolset