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


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

相关推荐
陈天伟教授3 小时前
人工智能应用-机器听觉:7. 统计合成法
人工智能·语音识别
曹牧3 小时前
AI编程助手
ai编程
笨蛋不要掉眼泪3 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
昨夜见军贴06163 小时前
IACheck AI审核技术赋能消费认证:为智能宠物喂食器TELEC报告构筑智能合规防线
人工智能·宠物
-孤存-3 小时前
MyBatis数据库配置与SQL操作全解析
数据库·mybatis
摘星编程3 小时前
OpenHarmony + RN:Calendar日期选择功能
python
DisonTangor3 小时前
阿里开源语音识别模型——Qwen3-ASR
人工智能·开源·语音识别
Yvonne爱编码3 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
一方_self3 小时前
了解和使用python的click命令行cli工具
开发语言·python
小芳矶4 小时前
Dify本地docker部署踩坑记录
python·docker·容器