一文读懂RAG(检索增强生成)

img

一、前言

近阶段,笔者落地了一个蛮深刻的项目,该项目通过RAG技术成功解决了一些问题。因此计划通过两篇文章跟大家分享有关RAG结合ToB Agent应用的探索与实践。

本篇文章,主要关于笔者对RAG(围绕Navie RAG)的些许理解。

二、RAG是什么?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与自然语言生成的技术,通过检索外部知识库增强文本生成能力。

听起来有点复杂,我们不妨从为什么需要用到RAG开始。

为什么需要用到RAG

随着近两年LLM(以下统称为大模型)不断地发展,大模型逐渐成为了我们日常办公场景中不可缺少的一环。但在使用过程中,会发现几个问题:

  • 知识局限性问题:通用的大模型没有企业内部数据和用户数据,将私域数据上传第三方平台进行训练,存在着数据泄露的风险。从而导致大模型对一些内部数据无从学习,并不具备某一方面的知识,存在局限性。
  • 幻觉问题:大模型底层的设计机制决定了它所生成的回答本质是基于概率而非既定事实的,导致只要大模型生成内容是符合它自己的语言逻辑的,就算内容与事实差了十万八千里,它也会毫不犹豫地输出。
  • 时效性问题:模型知识的获取是通过使用训练数据集训练获取的,模型训练后产生的一些新知识,是没有学习的,而大模型训练成本极高,不可能为了弥补知识而频繁进行模型训练。

本质来看,大模型输出的结果都是以过去的公共数据进行归纳推理,没有“固定的知识”。那么假如我们给它外挂上一个“知识库”,是否就能解决这类问题呢?简单举个例子:

我们问大模型“请帮我简单总结一下今天的工作”。很明显大模型在一本正经地胡说八道,因为它并不了解我今天具体做了什么。

img

▲没有带上“固定知识”的提问

但我们把今天的工作内容作为上下文结合到Prompt中,输入给大模型。大模型便能基于我们提供的内容进行针对性的回复。

img

▲带上“固定知识”的提问

那是否意味着,我们可以把整个知识库都发送给大模型进行处理呢?

这是一个方法,比方说通过长上下文的方式,但目前来看并不是最优解,一个原因是模型一次接收的信息仍然是有限的(目前普遍最多支持128K)。第二个原因是发送大量的上下文内容所需的消耗成本远大于短文本。最重要的原因是,输入大模型的内容过于广泛,大模型处理的效果会愈发不准确

因此我们需要先对知识内容进行预处理,这里就引入了RAG的技术。

大白话解释RAG

简单理解,在向大模型提问前,我们需要预先对大量私有化知识内容进行梳理,提取**(检索)出与提问相关的知识内容后整合到Prompt中再向大模型提问,让大模型围绕“固定的知识”进行针对性回答。从而提升模型输出内容的准确性和可靠性(增强生成)**,如下图所示。

img

▲RAG的大致流程

三、RAG流程

RAG的重点之一在于如何对知识内容进行检索,比如说:关键词检索、相似度检索。

1、关键词检索

顾名思义就是我们日常工作中常见的检索方式,比如:通过输入订单标题关键词,模糊检索到订单信息。对于部分场景而言,使用关键词检索会高效快速得多

img

▲关键词检索的示例

2、相似度检索

使用各种不同的相似度算法(如欧氏距离、余弦等)进行数据检索的一种技术。简单理解,就是把问题Embedding为向量,去向量数据库中匹配与此问题相似度最高的几个内容片段。

相似度检索是RAG中常用的检索方式,接下来我们展开说说如何利用相似度检索完成RAG的整个过程。

a)知识分块处理

首先对数据库中的内容进行处理,比方说:把非文本形式的数据转换为标准的纯文本数据。然后将知识内容进行分块,切分成更短的段落或句子,以便更有效地进行处理。其中知识分块的策略会对最终知识片段的检索起到重要的影响

img

▲知识切分

知识向量化存储

把分成小块的知识片段通过一个嵌入模型(Embedding Model)转换成文本向量后创建索引并存储于向量数据库。向量通常会以数字的形式存储于一个多维空间中。

img

▲向量嵌入与存储

c)问题处理

当用户提问时,问题将通过和知识分块相同的嵌入模型与转换规则转化成查询向量,以保证问题和知识片段在相同的向量空间里,其中向量间的距离可以反映文本之间的语义相似度。

img

▲问题向量化

d)向量检索

被转换成向量的问题与向量数据库中存储的知识向量进行比较,找出与查询向量最相似的知识片段,这一步骤通常通过计算向量之间的距离(如余弦距离、欧氏距离等)来实现。

img

▲向量的相似度检索

e)大模型处理

提取相似度得分最高的几个知识片段,这些内容可以作为额外的上下文信息,结合用户的原始提问构建成Prompt后,输入给大模型进行处理。

回答

将大模型输出的问题结果返回给用户。这个答案是从知识库中检索到的最相关信息生成,确保了准确性和相关性。

总结来看,整个RAG流程大致如下图所示。

img

▲RAG的完整流程

四、RAG存在的挑战

虽说 RAG 能够解决在大模型使用过程中遇到的部分问题,但它仍存在方方面的挑战,比如:

1、索引阶段

Naive RAG在编制索引时,可能无法有效处理非结构化文件中的图像、表格等信息,导致信息提取不完整。其次用简单的知识分块策略,可能会导致重要信息被分割在不同的知识块中,从而影响检索效果 。

2、检索阶段

使用用户原始提问做检索,可能会存在意图识别不明确(当遇到含糊或过于简短的用户查询时),这就导致用户提问和知识索引不能很好的匹配,检索质量比较差。又比如采用单一的检索方法,没有融合关键词、语义和向量等多种检索技术组合,也会一定程度上影响到检索效果。

3、生成阶段

大模型可能无法将检索到的上下文与当前的生成任务有效整合,导致输出结果不一致或相关性不高。其次在生成过程中过度依赖检索到的信息,导致生成的内容只是重复输出检索到的内容,而没有提供新的价值或综合信息。

为了解决上述存在的挑战,RAG技术也在持续地发展和优化中,比方说衍生出了**高级RAG(Advanced RAG)模块RAG(Modular RAG)**等解决方案(本文不做细说)。

五、结语

作为AIGC应用方,通常以集成第三方向量数据库为主,这意味着把RAG技术应用在实际业务当中相对比较容易,但想做好仍然有很多的困难需要克服,每个步骤都有可能对最终效果产生影响。

下一篇文章,将通过一个案例与大家分享RAG在ToB Agent的探索与实践。

以上是笔者近阶段的学习与思考,希望能帮到你。

关于AI大模型技术储备

学好 AI大模型 不论是就业还是在工作技能提升上都不错,但要学会 AI大模型 还是要有一个学习规划。最后大家分享一份全套的 AI大模型 学习资料,给那些想学习 AI大模型 的小伙伴们一点帮助!

感兴趣的小伙伴,赠送全套AI大模型学习资料和安装工具,包含Agent行业报告、精品AI大模型学习书籍手册、视频教程、最新实战学习等录播视频,具体看下方。

需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

一、大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

二、如何学习大模型 AI ?

🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

### 检索增强生成模型(RAG)的工作原理 检索增强生成模型(RAG)结合了检索模型和生成模型,通过动态检索外部知识库中的信息来补充文本生成能力。其核心思想是利用检索模型从大规模数据集中获取相关上下文信息,并将这些信息传递给生成模型以生成高质量的响应[^1]。具体而言,RAG技术通过融合大语言模型(LLMs)的生成能力和外部知识库的检索功能,实现了准确、丰富且时效性强的文本输出[^2]。 在工作流程中,RAG模型首先使用检索组件对输入问题进行处理,从外部知识库中提取与问题相关的文档片段或段落。然后,生成组件基于检索到的信息以及原始输入生成最终的响应。这种设计使得RAG能够突破传统预训练语言模型的静态知识局限性,支持动态引入最新的外部信息[^2]。 --- ### RAG 的实现方法 RAG的实现通常依赖于两种主要组件:**检索模型**和**生成模型**。以下为其实现的关键步骤: #### 1. 数据准备 构建一个包含丰富知识的私有或专有数据源作为检索模型的基础。这些数据可以包括结构化数据库、非结构化文档集合或其他形式的知识库。为了提高检索效率,需要对数据进行预处理,例如分词、向量化等操作[^3]。 #### 2. 检索模型 选择或开发适合的检索模型,如基于密集表示的学习到检索(DPR, Dense Passage Retrieval)模型。该模型通过编码器将查询和文档分别映射到同一语义空间中的向量表示,从而计算相似度并选出最相关的文档片段[^3]。 #### 3. 生成模型 将检索到的相关文档片段与原始输入一起传递给生成模型(如T5、BART等),以生成最终的响应。生成模型可以根据检索到的信息调整其输出内容,确保生成结果既符合用户需求又具备高准确性[^1]。 --- ### RAG 的代码示例 以下是一个基于 LangChain 实现 RAG 的简单代码示例,展示了如何结合检索生成模型完成任务[^3]。 ```python from langchain import OpenAI, VectorDBQA from langchain.prompts import PromptTemplate from langchain.chains import RetrievalQA from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings # 初始化嵌入模型和向量数据库 embeddings = OpenAIEmbeddings() vectorstore = FAISS.load_local("path/to/faiss_index", embeddings) # 定义提示模板 prompt_template = """Use the following pieces of context to answer the question. {context} Question: {question} Answer:""" PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"]) # 初始化生成模型 llm = OpenAI(temperature=0) # 构建 RAG 链 qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(), return_source_documents=True, chain_type_kwargs={"prompt": PROMPT} ) # 示例查询 query = "什么是检索增强生成模型?" result = qa_chain({"query": query}) print(result["result"]) ``` 上述代码中,`FAISS` 是一种高效的向量数据库工具,用于存储和检索文档的嵌入表示。`OpenAIEmbeddings` 负责生成文档和查询的嵌入向量,而 `RetrievalQA` 则整合了检索生成过程[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值