AI大模型应用之-RAG 全流程

给新手看的 RAG(检索增强生成)完整入门指南

看得懂流程、记得住原理、能在本地跑起来一个知识库问答系统。

一、什么是 RAG?(一句话)

RAG = 先"查资料",再"让大模型回答"

📌 核心作用:

👉 减少幻觉、提升准确率、让回答有依据


二、RAG 全流程(新手必背)

📌 一条完整流水线

text 复制代码
文档加载
 → 切分
 → 向量化
 → 存储
 → 检索
 → 重排序
 → 生成回答

📌 记忆口诀(强烈推荐)

读 → 切 → 算 → 存 → 找 → 排 → 说


三、RAG 每一步在干什么?(通俗版)


1️⃣ 文档加载(Load)

📌 干什么?

把 PDF / txt / md 读进来

🌰 类比:

把书搬进图书馆

常见工具(LangChain 已封装):

  • TextLoader
  • PyPDFLoader

2️⃣ 文档切分(Split)【非常重要】

📌 干什么?

把长文档切成"小块"

❓ 为什么要切?

  • 模型有上下文长度限制
  • 检索时更精准

📌 常用策略

  • 每块 300~500 字
  • 有重叠(Overlap)

🌰 类比:

把一本书拆成一页一页


3️⃣ 向量化(Embedding)

📌 干什么?

把文本 → 数字向量

text 复制代码
"Redis 是内存数据库"
→ [0.12, 0.88, 0.01, ...]

📌 作用:

  • 为"相似度搜索"做准备

🌰 类比:

给每段话一个"坐标"


4️⃣ 向量存储(Store)

📌 干什么?

把向量存进向量数据库

新手推荐:

  • Chroma(最简单)
  • FAISS(更底层)

🌰 类比:

把坐标放进地图系统


5️⃣ 检索(Retrieve)

📌 干什么?

根据问题,找"最相关的文本块"

常见方式:

  • 向量相似度(Top K)
  • BM25(关键词)

6️⃣ 重排序(Rerank)

📌 干什么?

把"看起来相关的",再排一次名

👉 解决:

  • 向量检索"语义对但答案不对"
  • 提升 Top 1 准确率

7️⃣ 生成(Generate)

📌 干什么?

把"检索到的内容 + 问题"喂给 LLM

📌 关键点:

模型只能基于"给它的内容"回答


四、BM25 + 向量混合检索(很重要)


1️⃣ 为什么只用向量不够?

问题 向量检索
专有名词 ❌ 容易漏
数字 / ID ❌ 不敏感
代码 / 表格 ❌ 表现差

2️⃣ BM25 是什么?(一句话)

BM25 = 高级关键词匹配

📌 擅长:

  • 精确词
  • 专有名词
  • 技术文档

3️⃣ 混合检索怎么理解?

先"按意思找",再"按关键词补充"

text 复制代码
向量检索 Top 20
BM25 检索 Top 20
→ 合并 → 重排序 → Top 5

📌 口诀:

语义 + 关键词,效果才稳定


五、RAG 幻觉问题 & 解决方案(重点)


1️⃣ RAG 幻觉从哪来?

原因 解释
检索不到 模型开始"编"
检索不准 给错资料
提示词太松 模型自由发挥

2️⃣ 新手可落地的 6 个解决方法

✅ 方法 1:强约束 Prompt

text 复制代码
只能根据提供的文档回答,
如果文档中没有答案,请回答"未找到相关信息"。

✅ 方法 2:Top-K 不要太小

  • 推荐:k = 3~5
  • 太小 → 容易漏
  • 太大 → 噪声多

✅ 方法 3:重排序(非常关键)

向量检索 ≠ 最终答案


✅ 方法 4:答案必须引用来源

(哪一段文档)


✅ 方法 5:问题改写(Query Rewrite)

  • 原问题 → 多种问法
  • 提升召回率

✅ 方法 6:没资料就拒答

比瞎编好一万倍


六、常见检索重排序算法(认识即可)

算法 用途
Cross-Encoder 语义最强,慢
Cohere Rerank 商用常见
LLM Rerank 用大模型打分
TF-IDF 关键词

📌 新手建议:

先理解"为什么要重排",再管算法


七、实战:本地知识库问答(LangChain + Chroma)

🎯 目标

用本地文档,回答问题(不联网)


1️⃣ 安装依赖

bash 复制代码
pip install langchain chromadb sentence-transformers

2️⃣ 准备文档

text 复制代码
data/
 └─ docs.txt

3️⃣ 核心代码(最小可用)

python 复制代码
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA

# 1. 加载文档
loader = TextLoader("data/docs.txt", encoding="utf-8")
docs = loader.load()

# 2. 切分
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
docs = splitter.split_documents(docs)

# 3. 向量化
embeddings = HuggingFaceEmbeddings()

# 4. 存储
vectorstore = Chroma.from_documents(docs, embeddings)

# 5. 检索 + 生成
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)

# 6. 提问
result = qa.run("什么是 Redis?")
print(result)

📌 你已经完成一个完整 RAG 系统


八、新手常见误区

❌ 文档不切

❌ 只用向量,不重排

❌ Prompt 不约束

❌ 查不到也硬答


九、终极 RAG 记忆口诀(一定要背)

先查再说,
查准再说,
没资料就不说。

十、参考文档

LangChain 官方文档

B 站 "RAG 实战教程"


有任何问题欢迎在评论区交流。

相关推荐
chaors2 小时前
DeepResearchSystem 0x08:KB 知识记忆
langchain·agent·ai编程
程序员黑豆4 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
金伟API10245 小时前
如何从零打造一个极简的DeepSeek-R1大模型
人工智能·ai
江畔柳前堤5 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Shockang5 小时前
智能体环路工程实战
人工智能
美摄科技5 小时前
美摄美颜特效SDK Skill:以AI赋能智能视音频新视界
人工智能
飞哥数智坊6 小时前
实测7套 Code Agent组合:最终效果,真不只取决于模型
ai编程
Web3_Daisy6 小时前
Pump.fun 与 FOMO 竞争背后的 Meme 市场变局
大数据·人工智能·金融·web3·区块链
AI创界者6 小时前
MiniMax-H3 本地一键部署整合包:8G 显存玩转文图生视频、视频参考、角色替换与超分补帧全流程
人工智能·深度学习
江畔柳前堤6 小时前
HBM:大语言模型时代的「算力血液」——从内存墙到带宽革命的深度拆解
服务器·人工智能·windows·目标检测·语言模型·自然语言处理·软件工程