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


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

相关推荐
ISACA中国4 分钟前
2026年网络安全与AI趋势预测
人工智能·安全·web安全
lambo mercy13 分钟前
自回归生成任务
人工智能·数据挖掘·回归
5Gcamera20 分钟前
边缘计算视频分析智能AI盒子使用说明
人工智能·音视频·边缘计算
hg011822 分钟前
埃及:在变局中重塑发展韧性
大数据·人工智能·物联网
线束线缆组件品替网30 分钟前
IO Audio Technologies 音频线缆抗干扰与带宽设计要点
网络·人工智能·汽车·电脑·音视频·材料工程
nimadan1239 分钟前
**手机小说扫榜工具2025推荐,精准追踪榜单动态与题材风向
python·智能手机
编程武士41 分钟前
Python 各版本主要变化速览
开发语言·python
Hcoco_me1 小时前
大模型面试题63:介绍一下RLHF
人工智能·深度学习·机器学习·chatgpt·机器人
傻啦嘿哟1 小时前
Python中的@property:优雅控制类成员访问的魔法
前端·数据库·python
hkNaruto1 小时前
【AI】AI学习笔记:LangGraph入门 三大典型应用场景与代码示例及MCP、A2A与LangGraph核心对比
人工智能·笔记·学习