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


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

相关推荐
程序员miki2 小时前
Dramatiq安装及应用(一)
python·dramatiq
线束线缆组件品替网2 小时前
Cole Hersee重载环境下汽车线束布线与固定方案全解析
人工智能·汽车·电脑·硬件工程·材料工程
数据皮皮侠AI2 小时前
数字经济政策工具变量数据(2008-2023)
大数据·数据库·人工智能·笔记·1024程序员节
赫尔·普莱蒂科萨·帕塔2 小时前
从 “脑梗“ 到 “功夫高手“
数据库·人工智能·agi
雨大王5122 小时前
AI+工业元宇宙:如何彻底改变传统汽车制造业的运作模式?
人工智能
liulanba2 小时前
深入理解 Python 异步编程:async、await 与同步函数详解
服务器·网络·python
却道天凉_好个秋2 小时前
OpenCV(四十五):SURF特征检测
人工智能·opencv·计算机视觉
雷焰财经2 小时前
iBox探索文化产业数字化路径:标准筑基 生态赋能
大数据·人工智能
执笔论英雄2 小时前
【RL】ROLL critic与train actor 的关系。 critic需要warm up
人工智能