【必藏】大模型RAG技术全解析:从原理到9步实战构建,附完整代码实现
【必藏】大模型RAG技术全解析:从原理到9步实战构建,附完整代码实现
本文详细介绍了RAG(检索增强生成)技术,包括其背景定义、9步构建流程(文档处理、分块、向量化、向量数据库、问题改写、检索、重排、prompt设计、LLM生成)以及应用场景。文章提供了从零到一的完整代码实现,帮助读者理解如何构建企业级RAG系统,解决大模型缺乏背景知识的问题,提升生成质量,适合对大模型应用感兴趣的开发者学习参考。
1、什么是 RAG?
RAG 是一种从外部数据库中检索相关信息来辅助改善大模型生成质量的系统,其主要包括检索器和生成器(语言模型)两部分,如下图所示。

2、RAG 的整体架构和流程什么?

从上述流程图中可以看出,RAG 由关键的 9 步组成,分别为文档、文档切分与 chunks、向量化、向量数据库、问题改写、检索、重排、prompt、生成器 LLM,接下来对每一项进行分别介绍。
(1)文档
RAG 是模型能力满足,但是缺少背景资料,因此 RAG 的核心是资料数据库的质量和数量。数据量太大,易造成效率慢,检索质量低。
文档部分主要包括数据搜集、数据清洗、知识库增强(给知识库生成一些总结、标题)。
文档处理的难点是如何将 PDF、PPT、Excel 等数据转化成统一的文档格式,特别是半结构化数据(例如 Word 中包括图片);常用的文档预处理工具包括-Unstructured、Docling、OmniGen 等。
(2)文档切分与chunks
为什么要对文档进行分块? 通过分块可以提升检索效率,文本有上下文窗口大小限制,RAG 的关键部分就是把文档合理分块。
如何合理分割 chunks?可以基于大模型对文档语义或内容进行分块(昂贵)、可以根据内容量或字数多少进行分块(根据字数切分一般效果差)、不同的文档使用不同的分块方式(推荐基于文档结构来进行分块)。
(3)向量化
为什么要对每一个 chunk 做 embedding?向量化是 NLP 领域的重要突破,是使用向量来表示文本含义,对每一个 chunk 做 embbeding 是为了方便后续用户问题对每一个 chunk 的检索。
如何把文档合理的 embeeding?可以使用预训练大模型,也可以自己训练 embedding 模型,一般每家大公司都有自己的 embedding 模型,可以使用 BAAI 的 Embedding 或者 gte-Qwen2-7B-instruct。
embedding 模型的输入长度不固定,但一般模型输出长度固定。
(4)向量数据库
向量数据库和数据库的核心区别是什么?向量数据库包含的是向量。引入向量数据库是因为高效的向量索引方法可以用来提高检索效率。
langchain 中集成了很多向量数据库,包括 FAISS、opensearch 等。
向量数据库核心两点:第一是向量的总个数,第二是每一个向量的维度。

(5)问题改写
问题扩充的对象是用户的 prompt。为什么要对用户的问题进行扩写?
用户的问题有可能有歧义、用户未表达清楚,需要对问题进一步处理扩充或者改写,进行二次处理;
如何对用户问题进行扩充和改写?一方面可以对 prompt 进行同义改写、进行多视角分解,将复杂问题拆分成几个子问题,将模糊的问题进行细化。
另一方面可以对用户问题生成更大长度的语义理解以加强背景理解。
(6)检索
什么是检索?给定知识库和用户查询,检索旨在找到知识库中与用户查询相关的知识文本。
检索的效率和准确率都很重要,检索的质量(召回率、精度、多样性)会直接影响大模型的生成质量;检索的效率也是评估 RAG 系统性能的关键组成,极大影响用户体验。
常见的文本检索方法有 3 种:判别式检索器(基于关键字的稀疏编码、交叉编码、双编码器-双编码器可以把文档提前编码)、生成式检索器、图检索器。
判别式检索器是目前主流的检索器,判别式检索器对问题和文档进行特征向量提取得到相关性分数(在计算向量与向量相似度最常用的方法是余弦相似度)。
生成式检索器是使用大模型直接生成文档id。图检索器可以理解数据之间结构关系。
(7)重排
什么是重排?检索相当于是粗排,重排是精排。为什么有了粗排还要精排?
举例来说,粗排是得到 10 个答案,精排是从 10 个答案中选择前 5 个,这样做的整体效果更好,因为直接使用余弦相似度计算的精度上限低,如果直接使用交叉编码搜索效率低,这样综合精度和效率更好。
如何对检索的结果进行精排?基于交叉编码的方法来评估文档与查询之间的相关性,但因其效率低,计算量大,交叉编码器通常用在精排,比较好用的方法有智源开源的 BGE-reranker。
(8)prompt
对于精排后的结果,需要和用户的问题进行“合并”得到 prompt,prompt 对生成器的质量至关重要。
将检索和精排后的外部知识和用户查询拼接到 prompt 中输给大模型,这是目前主流的方法。此外,也可以采用交叉注意力将外部知识直接编码到模型隐藏状态中。
对于复杂问题和模糊查询进行多次迭代,以提升 RAG 在困难问题上回答效果,也是 prompt 的范畴。具体来说,将复杂问题拆分成几个子问题,将模糊的问题进行细化。
(9)生成器 LLM
什么是生成器 LLM?利用输入问题和精排后的 context 合成的 prompt,生成最终的答案,一般基于预训练大语言模型。
到底使用何种生成器“大模型”?是使用专业、微调、还是通用,需要具体任务具体分析,一般生成大模型更看重其总结归纳的能力。

3、RAG 有哪些应用场景?
应用场景如下:
- AI Agent。大模型是上半场,Agent 是下半场。
- RAG 应用较多的场景是在企业内部知识问答。
- RAG 对 AI 应用产品很重要,在企业内部非常重视。
- 多模态应用。
4、如何从 0 到 1 构建 RAG?
(1)环境依赖安装:

(2)chunk分块:
from typing import List
def split_into_chunks(doc_file: str) -> List[str]:
with open(doc_file, 'r', encoding='utf-8') as file:
content = file.read()
return [chunk for chunk in content.split("\n\n")]
chunks = split_into_chunks("doc.md")
for i, chunk in enumerate(chunks):
print(f"[{i}] {chunk}\n")
(3)embedding 向量化:
from sentence_transformers import SentenceTransformer
embedding_model = SentenceTransformer("shibing624/text2vec-base-chinese")
def embed_chunk(chunk: str) -> List[float]:
embedding = embedding_model.encode(chunk, normalize_embeddings=True)
return embedding.tolist()
embedding = embed_chunk("测试内容")
print(len(embedding))
print(embedding)
(4)存入向量数据库:
import chromadb
# chromadb.PersistentClient("./chroma.db")
chromadb_client = chromadb.EphemeralClient()
chromadb_collection = chromadb_client.get_or_create_collection(name="default")
def save_embeddings(chunks: List[str], embeddings: List[List[float]]) -> None:
for i, (chunk, embedding) in enumerate(zip(chunks, embeddings)):
chromadb_collection.add(
documents=[chunk],
embeddings=[embedding],
ids=[str(i)]
)
save_embeddings(chunks, embeddings)
(5)检索:
def retrieve(query: str, top_k: int) -> List[str]:
query_embedding = embed_chunk(query)
results = chromadb_collection.query(
query_embeddings=[query_embedding],
n_results=top_k
)
return results['documents'][0]
query = "哆啦A梦使用的3个秘密道具分别是什么?"
retrieved_chunks = retrieve(query, 5)
for i, chunk in enumerate(retrieved_chunks):
print(f"[{i}] {chunk}\n")
(6)重排:
from sentence_transformers import CrossEncoder
def rerank(query: str, retrieved_chunks: List[str], top_k: int) -> List[str]:
cross_encoder = CrossEncoder('cross-encoder/mmarco-mMiniLMv2-L12-H384-v1')
pairs = [(query, chunk) for chunk in retrieved_chunks]
scores = cross_encoder.predict(pairs)
scored_chunks = list(zip(retrieved_chunks, scores))
scored_chunks.sort(key=lambda x: x[1], reverse=True)
return [chunk for chunk, _ in scored_chunks][:top_k]
reranked_chunks = rerank(query, retrieved_chunks, 3)
for i, chunk in enumerate(reranked_chunks):
print(f"[{i}] {chunk}\n")
(7)生成:
from dotenv import load_dotenv
from google import genai
load_dotenv()
google_client = genai.Client()
def generate(query: str, chunks: List[str]) -> str:
prompt = f"""你是一位知识助手,请根据用户的问题和下列片段生成准确的回答。
用户问题: {query}
相关片段:
{"\n\n".join(chunks)}
请基于上述内容作答,不要编造信息。"""
print(f"{prompt}\n\n---\n")
response = google_client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt
)
return response.text
answer = generate(query, reranked_chunks)
print(answer)
如何从零学会大模型?小白&程序员都能跟上的入门到进阶指南
当AI开始重构各行各业,你或许听过“岗位会被取代”的焦虑,但更关键的真相是:技术迭代中,“效率差”才是竞争力的核心——新岗位的生产效率远高于被替代岗位,整个社会的机会其实在增加。
但对个人而言,只有一句话算数:
“先掌握大模型的人,永远比后掌握的人,多一次职业跃迁的机会。”
回顾计算机、互联网、移动互联网的浪潮,每一次技术革命的初期,率先拥抱新技术的人,都提前拿到了“职场快车道”的门票。我在一线科技企业深耕12年,见过太多这样的案例:3年前主动学大模型的同事,如今要么成为团队技术负责人,要么薪资翻了2-3倍。
深知大模型学习中,“没人带、没方向、缺资源”是最大的拦路虎,我们联合行业专家整理出这套 《AI大模型突围资料包》,不管你是零基础小白,还是想转型的程序员,都能靠它少走90%的弯路:
- ✅ 小白友好的「从零到一学习路径图」(避开晦涩理论,先学能用的技能)
- ✅ 程序员必备的「大模型调优实战手册」(附医疗/金融大厂真实项目案例)
- ✅ 百度/阿里专家闭门录播课(拆解一线企业如何落地大模型)
- ✅ 2025最新大模型行业报告(看清各行业机会,避免盲目跟风)
- ✅ 大厂大模型面试真题(含答案解析,针对性准备offer)
- ✅ 2025大模型岗位需求图谱(明确不同岗位需要掌握的技能点)
所有资料已整理成包,想领《AI大模型入门+进阶学习资源包》的朋友,直接扫下方二维码获取~

① 全套AI大模型应用开发视频教程:从“听懂”到“会用”
不用啃复杂公式,直接学能落地的技术——不管你是想做AI应用,还是调优模型,这套视频都能覆盖:
- 小白入门:提示工程(让AI精准输出你要的结果)、RAG检索增强(解决AI“失忆”问题)
- 程序员进阶:LangChain框架实战(快速搭建AI应用)、Agent智能体开发(让AI自主完成复杂任务)
- 工程落地:模型微调与部署(把模型用到实际业务中)、DeepSeek模型实战(热门开源模型实操)
每个技术点都配“案例+代码演示”,跟着做就能上手!

课程精彩瞬间

② 大模型系统化学习路线:避免“学了就忘、越学越乱”
很多人学大模型走弯路,不是因为不努力,而是方向错了——比如小白一上来就啃深度学习理论,程序员跳过基础直接学微调,最后都卡在“用不起来”。
我们整理的这份「学习路线图」,按“基础→进阶→实战”分3个阶段,每个阶段都明确:
- 该学什么(比如基础阶段先学“AI基础概念+工具使用”)
- 不用学什么(比如小白初期不用深入研究Transformer底层数学原理)
- 学多久、用什么资料(精准匹配学习时间,避免拖延)
跟着路线走,零基础3个月能入门,有基础1个月能上手做项目!

③ 大模型学习书籍&文档:打好理论基础,走得更稳
想长期在大模型领域发展,理论基础不能少——但不用盲目买一堆书,我们精选了「小白能看懂、程序员能查漏」的核心资料:
- 入门书籍:《大模型实战指南》《AI提示工程入门》(用通俗语言讲清核心概念)
- 进阶文档:大模型调优技术白皮书、LangChain官方中文教程(附重点标注,节省阅读时间)
- 权威资料:斯坦福CS224N大模型课程笔记(整理成中文,避免语言障碍)
所有资料都是电子版,手机、电脑随时看,还能直接搜索重点!

④ AI大模型最新行业报告:看清机会,再动手
学技术的核心是“用对地方”——2025年哪些行业需要大模型人才?哪些应用场景最有前景?这份报告帮你理清:
- 行业趋势:医疗(AI辅助诊断)、金融(智能风控)、教育(个性化学习)等10大行业的大模型落地案例
- 岗位需求:大模型开发工程师、AI产品经理、提示工程师的职责差异与技能要求
- 风险提示:哪些领域目前落地难度大,避免浪费时间
不管你是想转行,还是想在现有岗位加技能,这份报告都能帮你精准定位!

⑤ 大模型大厂面试真题:针对性准备,拿offer更稳
学会技术后,如何把技能“变现”成offer?这份真题帮你避开面试坑:
- 基础题:“大模型的上下文窗口是什么?”“RAG的核心原理是什么?”(附标准答案框架)
- 实操题:“如何优化大模型的推理速度?”“用LangChain搭建一个多轮对话系统的步骤?”(含代码示例)
- 场景题:“如果大模型输出错误信息,该怎么解决?”(教你从技术+业务角度回答)
覆盖百度、阿里、腾讯、字节等大厂的最新面试题,帮你提前准备,面试时不慌!

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

为什么现在必须学大模型?不是焦虑,是事实
最近英特尔、微软等企业宣布裁员,但大模型相关岗位却在疯狂扩招:
- 大厂招聘:百度、阿里的大模型开发岗,3-5年经验薪资能到50K×20薪,比传统开发岗高40%;
- 中小公司:甚至很多传统企业(比如制造业、医疗公司)都在招“会用大模型的人”,要求不高但薪资可观;
- 门槛变化:不出1年,“有大模型项目经验”会成为很多技术岗、产品岗的简历门槛,现在学就是抢占先机。
风口不会等任何人——与其担心“被淘汰”,不如主动学技术,把“焦虑”变成“竞争力”!


最后:全套资料再领一次,别错过这次机会
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)