1. 什么是RAG
检索增强生成(RAG)技术是大语言模型实现知识扩展的关键突破,其核心工作原理可概括为"现查现用"的智能增强机制。当大模型遇到超出其训练数据范围的问题时,RAG会实时从外部知识库检索相关信息,将这些新鲜知识智能整合到生成过程中,使模型能够结合最新数据给出准确回答。这一过程完美弥补了大模型固有的三大知识短板:训练数据的时效性局限、专有知识的缺失问题以及特定领域的深度不足。通过动态检索与智能融合的双重机制,RAG既保留了预训练模型的强大推理能力,又突破了静态知识库的边界,实现了"即需即学"的智能进化。这种技术特别适合需要处理实时数据或专业领域知识的应用场景,让大模型真正具备了持续学习的能力。
如上图所示,RAG的主要流程分为三个步骤
检索 (Retrieve):用户查询被用来从外部知识源检索相关上下文。为此,用户查询通过一个嵌入模型(embedding model)被嵌入到与向量数据库中附加上下文相同的向量空间中。这使得可以执行相似性搜索,并返回向量数据库中最接近的前 k 个数据对象。
增强 (Augment):用户查询和检索到的附加上下文被填充(stuffed into)到一个提示模板(prompt template)中。
生成 (Generate):最后,这个经过检索增强的提示(retrieval-augmented prompt)被输入到大型语言模型(LLM)中。
通过上述流程我们可以知道外部知识库其实是我们了解LLM训练数据之外世界的"窗口",要做好RAG工程,外部知识库的搭建极为重要。RAG是一项很复杂的技术工程,要让模型根据已有知识库提供精准的答复,其中还涉及到很多细节,这里只接单介绍一下RAG的一些概念,然后讨论怎么通过LangChain 实现LLMs的RAG。关于RAG的优化细节我们将在后面用一个专门的系列来讲解
2. 为什么要有RAG
大型语言模型(LLMs)都存在数据新鲜度问题,即使是像 ChatGPT这样最强大的模型,对近期事件也是一无所知。因为大模型只知道通过训练数据呈现的世界,而训练数据集是不可能包含特定数据和最新数据的,这就给任何依赖最新信息或特定数据集的应用场景带来了问题。下图就是一个典型案例:
我们想让ChatGPT告诉我们美国总统特朗普在2025年对全球增加关税的具体措施,ChatGPT其实是不知道的,因为它在训练的时候不包含这些很新的信息。因此,弥补大型语言模型的通用知识与任何附加上下文之间的差距非常重要,这有助于大型语言模型生成更准确、更符合上下文的补全内容,同时减少幻觉的产生。
传统上,神经网络可以通过微调模型来适应特定领域或专有信息。虽然这种技术很有效,但它也计算密集、成本高昂,并且需要专业技术知识,这使得它在适应不断变化的信息方面不够敏捷。
2020年,Lewis 等人在《面向知识密集型自然语言处理任务的检索增强生成》(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks)[1] 这篇论文中提出了一种更灵活的技术,称为检索增强生成(RAG)。在这篇论文中,研究人员将一个生成模型与一个检索模块相结合,以便从一个可以更容易更新的外部知识源提供额外信息。
简单来说,RAG 之于大型语言模型(LLMs),就好比开卷考试之于人类。在开卷考试中,学生被允许携带参考资料,如教科书或笔记,他们可以用这些资料来查找相关信息以回答问题。开卷考试背后的理念是,测试侧重于学生的推理能力,而不是他们记忆特定信息的能力。
类似地,在RAG中,事实性知识从大型语言模型的推理能力中分离出来,并存储在一个可以轻松访问和更新的外部知识源中:
参数化知识 (Parametric knowledge):在训练期间学习到的知识,隐式地存储在神经网络的权重中。
非参数化知识 (Non-parametric knowledge):存储在外部知识源中,例如向量数据库。
而我们所说的RAG相关的知识就是这部分非参数化知识
3. 基于 LangChain 实现RAG
接下来,我们将展示如何利用 Python 结合 OpenAI的大语言模型 (LLM)、Weaviate 的向量数据库以及 OpenAI的嵌入模型来实现一个检索增强生成(RAG)流程。在这个过程中,我们将使用 LangChain 来进行整体编排。
如果你对向量数据库Weaviate 还不是很了解,可以先去https://weaviate.io/了解一下
3.1 软件包安装
在开始之前,需要先安装相关软件包
pip install langchain openai weaviate-client
这里langchain就LanChain框架,如果是学习过前面的LanChain系列章节,这个包就已经安装过了,这里就没必要安装了。openai包主要是提供嵌入模型和大语言模型 (LLM),weaviate-client主要是用于操作向量数据库
3.2 环境变量设置
此外,还需要在项目根目录下的 .env
文件来定义相关的环境变量,这里主要是设置一下OPENAI_API_KEY。如果项目根目录下没有.env
文件,可以创建一个。同时,如果还没有OpenAI API 密钥,可以在https://platform.openai.com/api-keys创建一个。
OPENAI_API_KEY="<你的OPENAI_API密钥>"
然后,运行以下命令来加载相关的环境变量。
import dotenv
dotenv.load_dotenv()
3.3 数据准备
在数据准备阶段,主要是要建立一个向量数据库,这个数据库就是作为大模型的外部数据源来给它提供大模型不知道的额外信息
3.3.1 数据加载
这里我们选用2022 年拜登总统的国情咨文 作为外部数据源,数据位于: LangChain 的 GitHub 仓库 的docs目录下,它是一个txt文件。我们将其下载下来翻译成中文,保存到项目的根目录的下的data目录下的一个rag.txt文件来做测试。为了加载这些数据,可以使用 LangChain 内置的TextLoader
加载器来进行加载,这个部分在前面学习LangChain的Mode I/O组件的时候也有介绍过,下面是具体代码:
from langchain.document_loaders import TextLoader
# 直接使用 TextLoader 加载本地文件
loader = TextLoader("./data/rag.txt")
documents = loader.load()
执行成功之后,可以打印一下documents,查看一下是否加载成功
documents
由于内容很多,这里就不打印输出了,程序运行截图如下:
3.3.2 文档切割
接下来,需要的文档进行分块 (chunk) – 因为原始状态下的文档 (Document) 太长,无法放入大型语言模型 (LLM) 的上下文窗口中,需要将其切割成更小的片段。LangChain 提供了许多内置的文本分割器 (text splitters)。在这个简单的示例中,可以使用 CharacterTextSplitter
,设定大约 500 的块大小 (chunk_size) 以及 50 的块重叠 (chunk_overlap),以保持块与块之间文本的连续性。
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 创建更智能的文本分割器,减小块大小
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=200, # 块大小
chunk_overlap=20,
length_function=len,
separators=["\n\n", "\n", " ", ""] # 添加更多的分隔符
)
chunks = text_splitter.split_documents(documents)
3.3.3 词嵌入
最后一步是嵌入并存储上一步切割后的这些文本块 。 为了能够在文本块之间进行语义搜索,需要将每个文本块向量化,然后存储到向量数据库中。这里使用 OpenAI 的嵌入模型,而要存储它们,这里我们可以使用前面安装的 Chroma 向量数据库。通过调用 .from_documents()
方法,向量数据库会自动将这些块填充进向量数据库中
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
# 创建向量存储
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=OpenAIEmbeddings(),
)
3.3.4 检索
向量数据库被填充完毕之后,接着就可以将其定义为检索器 (retriever) 组件,这个组件能够根据用户查询输入与已嵌入的文本块之间的语义相似度,检索出相关的补充上下文。
# 创建检索器,限制返回的文档数量和长度
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={
"k": 2, # 只返回最相关的2个文档
}
)
3.3.5 增强
下一步,就可以定义一个提示词模板,在这个提示词模板中,包含我们前面定义的检索器 (retriever) 组件,这样根据这个提示词输入的问题,大模型就可以利用检索器,去查找相关联的上下文信息,起到一个增强回答的效果
from langchain.prompts import ChatPromptTemplate
template = """你是一个问答任务的助手。
请使用以下检索到的上下文内容来回答问题。
如果你不知道答案,就直接说你不知道。
最多使用三句话作答,并保持简洁明了。
问题:{question}
上下文:{context}
回答:
"""
prompt = ChatPromptTemplate.from_template(template)
print(prompt)
3.3.6 生成
最后,再为 RAG 流水线构建一个 chain(链式结构),将检索器(retriever)、提示模板(prompt template)和大语言模型(LLM)串联起来。当这个 RAG 链条定义完成后,就可以直接调用它来完成问答或生成任务。
from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
query = "总统是如何评价布雷耶大法官的?"
rag_chain.invoke(query)
程序输出
'总统对布雷耶大法官表示致敬,称其为一位毕生致力于服务国家的人。'
大模型很好的根据给定的外部数据,回答了我们提出的问题
4. 总结
检索增强生成 (RAG) 是一种使用来自私有或专有数据源的信息来补充文本生成的技术,它将检索技术和LLM提示结合在一起,提高了 LLM 响应的准确性和相关性。RAG的主要有三个步骤,首先根据用户查询从外部知识库检索相关信息,然后将然后将这些信息与原始查询组合成提示,最后由大型语言模型基于增强的提示生成答案。RAG目前正成为解决大模型知识局限的一种常见的解决方案。
随着大模型的持续火爆,各行各业纷纷开始探索和搭建属于自己的私有化大模型,这无疑将催生大量对大模型人才的需求,也带来了前所未有的就业机遇。**正如雷军所说:“站在风口,猪都能飞起来。”**如今,大模型正成为科技领域的核心风口,是一个极具潜力的发展机会。能否抓住这个风口,将决定你是否能在未来竞争中占据先机。
那么,我们该如何学习大模型呢?
人工智能技术的迅猛发展,大模型已经成为推动行业变革的核心力量。然而,面对复杂的模型结构、庞大的参数量以及多样的应用场景,许多学习者常常感到无从下手。作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。
为此,我们整理了一份全面的大模型学习路线,帮助大家快速梳理知识,形成自己的体系。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、大模型全套的学习路线
大型预训练模型(如GPT-3、BERT、XLNet等)已经成为当今科技领域的一大热点。这些模型凭借其强大的语言理解和生成能力,正在改变我们对人工智能的认识。为了跟上这一趋势,越来越多的人开始学习大模型,希望能在这一领域找到属于自己的机会。
L1级别:启航篇 | 极速破界AI新时代
- AI大模型的前世今生:了解AI大模型的发展历程。
- 如何让大模型2C能力分析:探讨大模型在消费者市场的应用。
- 行业案例综合分析:分析不同行业的实际应用案例。
- 大模型核心原理:深入理解大模型的核心技术和工作原理。
L2阶段:攻坚篇 | RAG开发实战工坊
- RAG架构标准全流程:掌握RAG架构的开发流程。
- RAG商业落地案例分析:研究RAG技术在商业领域的成功案例。
- RAG商业模式规划:制定RAG技术的商业化和市场策略。
- 多模式RAG实践:进行多种模式的RAG开发和测试。
L3阶段:跃迁篇 | Agent智能体架构设计
- Agent核心功能设计:设计和实现Agent的核心功能。
- 从单智能体到多智能体协作:探讨多个智能体之间的协同工作。
- 智能体交互任务拆解:分解和设计智能体的交互任务。
- 10+Agent实践:进行超过十个Agent的实际项目练习。
L4阶段:精进篇 | 模型微调与私有化部署
- 打造您的专属服务模型:定制和优化自己的服务模型。
- 模型本地微调与私有化:在本地环境中调整和私有化模型。
- 大规模工业级项目实践:参与大型工业项目的实践。
- 模型部署与评估:部署和评估模型的性能和效果。
专题集:特训篇
- 全新升级模块:学习最新的技术和模块更新。
- 前沿行业热点:关注和研究当前行业的热点问题。
- AIGC与MPC跨领域应用:探索AIGC和MPC在不同领域的应用。
掌握以上五个板块的内容,您将能够系统地掌握AI大模型的知识体系,市场上大多数岗位都是可以胜任的。然而,要想达到更高的水平,还需要在算法和实战方面进行深入研究和探索。
- AI大模型学习路线图
- 100套AI大模型商业化落地方案
- 100集大模型视频教程
- 200本大模型PDF书籍
- LLM面试题合集
- AI产品经理资源合集
以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
二、640套AI大模型报告合集
这套包含640份报告的合集,全面覆盖了AI大模型的理论探索、技术落地与行业实践等多个维度。无论您是从事科研工作的学者、专注于技术开发的工程师,还是对AI大模型充满兴趣的爱好者,这套报告都将为您带来丰富的知识储备与深刻的行业洞察,助力您更深入地理解和应用大模型技术。
三、大模型经典PDF籍
随着人工智能技术的迅猛发展,AI大模型已成为当前科技领域的核心热点。像GPT-3、BERT、XLNet等大型预训练模型,凭借其卓越的语言理解与生成能力,正在重新定义我们对人工智能的认知。为了帮助大家更高效地学习和掌握这些技术,以下这些PDF资料将是极具价值的学习资源。
四、AI大模型商业化落地方案
AI大模型商业化落地方案聚焦于如何将先进的大模型技术转化为实际的商业价值。通过结合行业场景与市场需求,该方案为企业提供了从技术落地到盈利模式的完整路径,助力实现智能化升级与创新突破。
希望以上内容能对大家学习大模型有所帮助。如有需要,请微信扫描下方CSDN官方认证二维码免费领取相关资源【保证100%免费
】。
祝大家学习顺利,抓住机遇,共创美好未来!