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 实战教程"


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

相关推荐
论文复现现场4 分钟前
企业知识库 RAG 用什么模型便宜?GLM-5.3-Flash 长文本 API 实测
python·rag·企业知识库·大模型api·glm-5.3-flash
羊羊小栈5 分钟前
基于「YOLO目标检测 + 多模态AI分析」的水稻病害智能检测分析预警系统(LangChain框架)
人工智能·yolo·目标检测·毕业设计·创业创新·大作业
IT_陈寒7 分钟前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
lisw0511 分钟前
提升社会科学领域的计算可重复性
人工智能·数字时代
HyperAI超神经15 分钟前
HyperAI 入选 36氪「East Forward 2026 出海全球化拓新企业」
人工智能·深度学习·全球化企业
9呀17 分钟前
VS Code Codex 多窗口使用与补丁记录
人工智能
七仔啊20 分钟前
安防通行人脸抓拍识别
人工智能
梦在远山后26 分钟前
从手写 Loop 到可恢复 Runtime:用 LangGraph、PostgreSQL Checkpoint 与 AG-UI 跑通中断恢复
python·langchain·agent
颜进强40 分钟前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程
Yolanda_20221 小时前
8.tensorboard的使用
python