用 LangChain 手搓 RAG 系统:从原理到实战

一、RAG 系统简介

在当今信息爆炸的时代,如何高效地从海量数据中获取有价值的信息并生成准确、自然的回答,成为了人工智能领域的重要课题。检索增强生成(Retrieval-Augmented Generation,RAG)系统应运而生,它结合了信息检索(IR)和自然语言生成(NLG)技术,能够在生成回答时利用外部知识库的信息,显著提高回答的准确性和可靠性。

RAG 系统的核心思想是:首先通过检索模块从知识库中查找与用户问题相关的文档或段落,然后将这些检索到的信息输入到生成模型中,生成最终的回答。这种方法避免了传统生成模型仅依赖内部参数知识的局限性,能够处理更专业、更实时的问题。

二、LangChain 概述

LangChain是一个用于构建端到端应用程序的框架,特别适用于涉及语言模型(LLM)的应用。它提供了一系列工具和组件,方便开发者连接不同的数据源、整合多种工具,并构建复杂的工作流。在 RAG 系统中,LangChain 可以帮助我们高效地管理检索模块和生成模型之间的交互,简化开发流程。

三、准备工作

(一)安装依赖

首先,我们需要安装必要的 Python 库,包括 LangChain、Hugging Face 的 Transformers 和 Datasets、以及用于向量存储的 FAISS 等。可以通过以下命令进行安装:

pip install langchain transformers datasets faiss-cpu

(二)准备知识库

我们需要一个包含相关领域知识的数据集来构建知识库。这里以维基百科的部分数据为例,使用 Hugging Face 的 Datasets 加载数据:

from datasets import load_dataset

dataset = load_dataset("wikipedia", "20220301.en", split="train")

接下来,对数据进行预处理,包括文本清洗、分句、分词等操作。为了便于检索,我们通常会将文本分割成较小的段落或句子,并为每个段落生成向量表示。

四、构建 RAG 系统

(一)加载语言模型

我们使用 Hugging Face 的 Transformers 加载一个预训练的语言模型,例如 T5:

from transformers import T5Tokenizer, T5ForConditionalGeneration

tokenizer = T5Tokenizer.from_pretrained("t5-base")

model = T5ForConditionalGeneration.from_pretrained("t5-base")

(二)创建检索器

使用 LangChain 的 FAISS 向量存储来创建检索器。首先,将预处理后的文本转换为向量,并存储到 FAISS 索引中:

from langchain.vectorstores import FAISS

from langchain.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

vectorstore = FAISS.from_texts(dataset["text"], embeddings)

retriever = vectorstore.as_retriever()

(三)构建 RAG 链

使用 LangChain 的 RagChain 类来组合检索器和生成模型。RagChain 会自动处理检索和生成的流程,将检索到的相关文本作为上下文输入到生成模型中:

from langchain.chains import RetrievalQA

rag_chain = RetrievalQA.from_chain_type(

    llm=model,

    chain_type="stuff",

    retriever=retriever,

    input_key="question"

)

五、测试与优化

(一)进行问答测试

准备一些测试问题,例如 "Who is the author of the Harry Potter series?",然后使用 RAG 系统进行回答:

question = "Who is the author of the Harry Potter series?"

answer = rag_chain.run(question)

print(answer)

(二)优化检索和生成效果

如果回答效果不理想,可以从以下几个方面进行优化:

  1. 调整检索参数:例如设置检索的相关度阈值、返回的文档数量等。
  2. 改进文本预处理:优化文本分割策略、增加文本清洗的规则等。
  3. 选择更合适的模型:尝试不同的语言模型或嵌入模型,提高检索和生成的准确性。
  4. 增强知识库:增加更多的训练数据,或者对现有数据进行更精细的标注。

六、总结

通过 LangChain,我们可以快速地搭建一个 RAG 系统,实现基于外部知识库的问答功能。本文只是一个简单的示例,实际应用中还需要考虑更多的因素,例如处理长文本、支持多模态输入输出、提高系统的效率和可扩展性等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成LiteFlow实现轻量级工作流引擎

LiteFlow 是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑。通过支持热加载规则配置,开发者能够即时调整流程步骤,将复杂的业务如价格计算、下单流程等拆分为独立且可复用的…

38 python random

在实际中,我们常常会用到随机的概念,比如 模拟抽奖活动(如:月度优秀员工抽奖)生成测试数据(如:随机考勤时间、随机销售额)打乱数据顺序(如:随机分配任务到人)Python 的random模块就像你的 "随机事件生成器",帮你轻松创建各种随机数据 一、基础操作:从随…

附赠二张图,阐述我对大模型的生态发展、技术架构认识。

文章精炼,用两张图说明大模型发展业态方向,以及大模型主体技术架构。(目前还需要进一步验证我的Thought && ideas,等待机会吧.........) 图一:探究大模型三个层次应用方向,浅层次入门简…

2025上海车展 | 移远通信全栈车载智能解决方案重磅亮相,重构“全域智能”出行新范式

2025年4月23日至5月2日,第二十一届上海国际汽车工业展览会在国家会展中心(上海)盛大启幕。作为车载智能解决方案领域的领军企业,移远通信以“全域智能 驭见未来”为主题,携丰富的车载解决方案及客户终端惊艳亮相8.2馆8…

告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略

一、引言 大语言模型(LLM)在文本生成领域展现出惊人能力,但 “幻觉” 问题(生成虚构或偏离事实的内容)始终是落地应用的核心挑战。检索增强生成(RAG)通过将外部知识库与 LLM 结合,形…

项目笔记2:post请求是什么,还有什么请求

在 HTTP(超文本传输协议)中,请求方法用于向服务器表明客户端想要执行的操作。POST 请求是其中一种常见的请求方法,此外还有 GET、PUT、DELETE 等多种请求方法,下面为你详细介绍: POST 请求 定义&#xff…

中间系统-邻居建立,数据库同步

ISIS邻居状态: 1、Down:接口一旦启用ISIS协议之后就是Down状态 2、Init:收到了邻居的Hello报文后,发现了邻居。 3、up:收到了邻居的Hello报文,并且在邻居的hello报文中发现了自己。 ISIS邻居建立的条件&…

玩转Docker | Docker部署LMS轻量级音乐工具

玩转Docker | Docker部署LMS轻量级音乐工具 前言一、LMS介绍LMS简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署LMS服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问LMS服务访问LMS首页注册账号五、基本使用上传音乐文…

AR行业应用案例与NXP架构的结合

1. 工业巡检AR头盔 场景示例:宁德核电基地使用AR智能头盔进行设备巡检,通过实时数据叠加和远程指导,将工作效率提升35%。头盔需处理传感器数据、图像渲染和低延迟通信1。 NXP架构支持: 协处理器角色:NXP i.MX RT系列M…

【Harmony OS】组件

目录 组件概述 组件常用属性 系统内置组件 Text TextArea 多行文本输入框组件 TextInput 文本输入框 Button Image 图片组件,支持本地图片和网络图片 Radio 单选框 Checkbox 复选框 Blank 空白填充组件 Divider 分隔符 PatternLock 图案密码锁组件 Prog…

Flutter Dart 集合类型List Set Map详解军 以及循环语句 forEaclh map where any every

List基础用法 var list1 ["西瓜", "苹果", "香蕉", true, 0];var list2 <String>["西瓜", "苹果", "香蕉"];List list3 ["西瓜", "苹果", "香蕉"];list3.add("草莓&…

在网上找的资料怎样打印出来?

在数字化时代&#xff0c;我们经常需要从互联网上获取各种资料&#xff0c;无论是学术论文、工作文档还是学习资料。然而&#xff0c;如何高效地将这些网上的资料打印出来&#xff0c;却是一个值得探讨的问题。本文将为您提供一个全面的解决方案&#xff0c;帮助您轻松完成网上…

2025年计算机视觉与智能通信国际会议(ICCVIC 2025)

2025 International Conference on Computer Vision and Intelligent Communication 一、大会信息 会议简称&#xff1a;ICCVIC 2025 大会地点&#xff1a;中国杭州 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 2025年计算机视觉与智能通…

程序员思维体操:TDD修炼手册

程序员思维体操&#xff1a;TDD修炼手册 ——从"先写代码"到"测试先行"的认知革命 一、重新认识TDD&#xff1a;不仅仅是写测试 什么是TDD&#xff08;测试驱动开发&#xff09; TDD其实很简单&#xff0c;不要看名字很高级复杂&#xff0c;传统开发是直…

建筑节能成发展焦点,楼宇自控应用范围持续扩大

在全球能源危机日益严峻、环保意识不断增强的大环境下&#xff0c;建筑节能已成为建筑行业发展的核心议题。从大型商业综合体到普通住宅&#xff0c;从公共建筑到工业厂房&#xff0c;节能需求贯穿建筑全生命周期。而楼宇自控系统凭借其对建筑设备的智能化管理和精准调控能力&a…

嵌入式软件--stm32 DAY 3

0、GPIO回顾 GPIO&#xff0c;通用型输入输出&#xff0c;控制stm32输入输出的引脚&#xff0c;统称GPIO。 主功能是默认的功能 复用的功能在芯片里都是由连线的&#xff0c;有联系才能复用。所以GPIO引脚能复用的功能只能是它默认复用功能和重定义功能。一般都使用默认功能…

点云从入门到精通技术详解100篇-基于二次误差和高斯混合模型的点云配准算法

目录 知识储备 结合二次误差度量与高斯混合模型的点云配准 算法核心创新点: 关键参数说明: 性能优化建议: 前言 国内外研究现状 全局配准算法的国内外研究 局部配准算法的国内外研究 2 点云配准相关概念与方法 2.1 什么是点云配准 2.2 点云的获取及点云主要数据…

linux系统问题杂谈

1.配置好anaconda之后&#xff0c;在一个终端中编辑好环境变量之后能够正常使用conda命令&#xff0c;但是新打开一个中断使用conda命令报错"无法识别conda"。 原因&#xff1a;使用“export PATH"/home/username/anaconda3/bin:$PATH"命令&#xff0c;临…

【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)

【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题) 目录 【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)一、历年真题二、考点&#xff1a;函数调用 —— 传值调用和传地址调用&#x1f53a;1、传值调用&#x1f53a;2、传引用(地址)调…

Spring Cloud Gateway 如何将请求分发到各个服务

前言 在微服务架构中&#xff0c;API 网关&#xff08;API Gateway&#xff09;扮演着非常重要的角色。它负责接收客户端请求&#xff0c;并根据预定义的规则将请求路由到对应的后端服务。Spring Cloud Gateway 是 Spring 官方推出的一款高性能网关&#xff0c;支持动态路由、…