RAG技术深入浅出:从理论到实践,轻松掌握大模型检索增强生成

RAG(检索增强生成)是一种结合参数化记忆和非参数化记忆的框架,由检索器和生成器组成。其优势包括可解释性强、知识可更新和减少幻觉。文章详细介绍了RAG架构、分块策略和检索技术,并使用LangChain实现了从构建向量数据库到检索生成的完整示例,展示了如何通过RAG技术提升大模型在知识密集型任务上的表现。


  1. RAG 起源

RAG 全称为 retrieval-augmented generation,这一框架最早由论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》[1]于2020年提出。

该论文的核心观点是:将参数化记忆(一个预训练的序列到序列生成模型)与非参数化记忆(一个密集检索的外部知识库,如维基百科)相结合,可以显著提升模型在知识密集型自然语言处理任务上的表现。

RAG 由两大组件构成:

    1. 检索器:基于一个预训练的神经检索模型(论文中使用Dense Passage Retriever),它负责根据输入的问题或上下文,从一个大型文档索引(如维基百科)中检索出最相关的文本片段。
    1. 生成器:基于一个预训练的序列到序列模型(论文中使用BART-large),它负责融合检索到的文本片段和原始输入,生成最终的答案或文本。

RAG 的优势有三点:

    1. 可解释性与可验证性:生成结果可以追溯到检索到的具体文档,提供了“溯源”,使决策过程更透明。
    1. 知识可更新:通过更新外部知识库(非参数化记忆),即可轻松让模型获取最新知识,无需重新训练整个大模型。
    1. 减少“幻觉”:生成过程受到检索到的真实文本的约束,能生成更具体、更多样、更符合事实的内容。
  1. 简单 RAG 架构


基于嵌入检索的简单 RAG 架构为:

整体来看 RAG 架构有两个流水线:

    1. 离线的数据获取流水线,也就是虚线部分;
    1. 在线的检索生成流水线,也就是实线部分。

从流程上来说很容易理解,但是具体到各个环节都是挑战。

2.1. 分块大小

数据如何分块?以多大的尺度分块?这些都不是有明确答案的问题。

采用较小的分块能在模型有限的上下文窗口中容纳更多文本片段,为模型提供更广泛的信息来源,有助于生成更全面的回答

但过小的分块可能导致关键信息割裂或丢失。若某个主题的完整信息被分割在多个分块中,仅包含部分信息的分块可能因相关性不足而无法被有效检索,导致关键信息未能得到充分利用。

此外,过小的分块还会显著增加计算和存储成本。分块数量越多,需要生成、存储和检索的嵌入向量就越多,这可能导致向量搜索空间膨胀,进而影响查询速度。

2.2. 检索策略

向量搜索算法

向量搜索通常被表述为最近邻搜索问题,最朴素的算法是k近邻(k‑NN),但计算量大且速度慢,仅适用于小型数据集。对于大型数据集,向量搜索通常使用近似最近邻(ANN)。

这个领域也是学术研究的热门,主流的算法有:

  • LSH(局部敏感哈希):一种通用算法,适用于包括向量在内的多种数据。它将相似向量哈希至同一“桶”中,以加速相似性搜索,效率高但略微损失精度。faiss[2] 与 Annoy[3] 均支持该算法。
  • HNSW(分层可导航小世界):通过构建多层图来表示向量,节点为向量,边连接相似向量。检索时沿图结构进行最近邻搜索,速度快且支持高效增量索引。faiss 和 Milvus[4] 等平台均提供其实现。
  • 乘积量化:将每个高维向量分解为若干子向量并进行压缩编码,在低维表示下计算距离,从而大幅提升检索效率。该方法是 FAISS 的核心组件,也被多数主流向量检索库采用。
  • IVF(倒排文件索引):使用 K-means 聚类将相似向量组织到不同簇中,通常每簇包含 100 至 10,000 个向量。查询时先定位与目标最接近的簇中心,再在该簇内进行精确检索。IVF 常与乘积量化结合,构成 faiss 的主要检索框架。
  • Annoy(近似最近邻搜索库):基于多棵随机二叉划分树实现。每棵树通过随机超平面将向量空间划分为两个子空间,检索时遍历多棵树并汇集候选结果。
重排

除了算法创新之外,在检索性能上还有很多工程优化。

重排是一种能有效提升检索准确性的方法:先通过成本较低但精度有限的检索器获取候选文档列表,再利用精度更高但成本也更高的模型或机制对候选列表进行重排序,筛选出最优候选。

上下文检索

Contextual Retrieval[5] 是由 Anthropic 提出的一种改进检索环节的方法,其核心理念是通过为每个分块补充相关上下文信息,提升该分块的可检索性

简而言之,这是一种预处理技术,但其效果显著——根据官方说法:“该方法可将检索失败率降低 49%,若结合重排序机制则能提升至 67%”。

  1. 极简示例

虽然 RAG 流程很简单,但是工程实践很复杂,万事开头难,在本文最后一部分笔者将使用 LangChain[6] 实现一个最简单的示例。

3.1. 构建向量数据库

LangChain 为文本数据抽象了一个类型 Document,支持 PDF、CSV、Web 等各种类型数据的导入。

笔者以一本名为「Think.Distributed.Systems.2025.8.pdf」的PDF格式电子书为示例,通过 PyPDFLoader 加载后可直接得到一个 list[Document] 对象。

接下来就是分块了,LangChain 也提供了很多封装好的实现,这里笔者选择了 RecursiveCharacterTextSplitter,该分块器能够尽可能地将段落(其次是句子,最后是单词)保持在一起,因为这些单位通常在语义层面具有最紧密的关联性。

splitter = RecursiveCharacterTextSplitter(    chunk_size=1000,    chunk_overlap=200,    length_function=len,)chunks = splitter.split_documents(documents)

设置分块大小为1000个字符,块间重叠200个字符,块间的重叠有助于在上下文被分割于不同块时减少信息丢失。

(需说明的是,本文中所有参数数值的设置并非经过严谨调优,主要基于官方文档的示例配置)

生成嵌入向量

笔者选择了 Hugging Face 上知名的 SentenceTransformer[7] 框架和 all-MiniLM-L6-v2 模型生成嵌入向量。

model = SentenceTransformer("./model/all-MiniLM-L6-v2")texts = [chunk.page_content for chunk in chunks]embeddings = model.encode(texts, show_progress_bar=True)
存储嵌入向量

向量的存储选择知名的 faiss。

metadatas = [{"text": chunk.page_content} for chunk in chunks]dim = embeddings.shape[1]index = faiss.IndexFlatL2(dim)index.add(np.array(embeddings).astype("float32"))faiss.write_index(index, faiss_path)pickle.dump(metadatas, f)

此处的metadatas存储的是分块的原始文本内容,这是因为向量索引(index)中仅存储嵌入向量,当通过向量搜索获取到相似向量后,需通过下标定位到对应的原始文本。

3.2. 检索生成

查询相似向量

首先将 query 生成嵌入向量,然后进行向量检索。

query_emb = model.encode([query_text]).astype("float32")D, I = index.search(query_emb, top_k)results = []    for idx, dist in zip(I[0], D[0]):        meta = self.metadata[idx] if idx < len(self.metadata) else None        results.append({"index": idx, "distance": dist, "metadata": meta})

向量搜索库 faiss 将会返回 top_k 相似的向量的下标 idx 和距离 dist。

拼装提示词调用大模型
query = "What is the challenge of reaching agreement?"combined_context = "\n\n".join([res["metadata"]["text"] for res in results if res["metadata"]])prompt = f"Using the following context:\n{combined_context}\n\nAnswer the question: {query}"llm = ChatDeepSeek(api_key= "sk-xx", model_name="deepseek-chat")response = llm.invoke(prompt)

笔者使用了最爱的 DeepSeek,收到了令人满意的答案。

Based on the provided context, the challenge of reaching agreement in distributed consensus lies in the realistic system model, as opposed to a theoretical one. Specifically:

  • In a theoretical model, where components do not fail and the network is perfectly reliable (delivers messages exactly once and in order), consensus is trivial to achieve.
  • The challenge arises in a realistic model, where:
  • Components may fail.
  • The network may reorder, delay, lose, or duplicate messages.

This combination of potential process failures and an unreliable network makes designing a consensus algorithm notoriously difficult. Simple solutions, like appointing a single leader (BDFL), are insufficient because if that leader fails, the system halts, and network problems can still prevent decisions from being consistently communicated.

Answer: The challenge of reaching agreement is achieving it in a realistic system where processes can fail and the network is unreliable (can lose, duplicate, delay, or reorder messages), as opposed to a perfect theoretical system where consensus is easy.

  1. 总结

  • • RAG 从流程上来说很容易理解。
  • • 使用 LangChain 可以很容易“组装”出 RAG 示例程序。

最后,本文的示例代码放在 shichaoyuan/first-rag-demo[8]


​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

完整的大模型学习和面试资料已经上传带到优快云的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
​​
在这里插入图片描述

为什么说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。

img
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

在这里插入图片描述

​​
在这里插入图片描述

资料包有什么?

①从入门到精通的全套视频教程⑤⑥

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述

⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

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

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

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

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值