什么是 RAG?通俗易懂讲解 + 核心流程梳理

一、前言

现在我们在用大模型的时候,经常遇到两个痛点:

1、知识过时:大模型训练数据有截止时间,不知道最新新闻、最新技术

2、胡说八道(幻觉):模型凭空编造答案,看起来很真,其实是错的

3、不能用私有数据:自己的文档、代码、知识库,模型不知道

怎么解决?最主流、最简单、落地最快的方案就是------RAG(检索增强生成)

本文零基础看懂 RAG,不讲玄学,只讲原理 + 流程 + 通俗例子,还附极简可运行代码,新手也能一键跑通。

二、什么是 RAG?通俗易懂理解

1、一句话定义

RAG = 先查资料,再回答

普通大模型:肚子里有什么,就说什么(凭记忆回答)

RAG 大模型:先去你的知识库查资料,查到什么,照着资料回答

2、生活化举例

  • 普通大模型:闭卷考试,靠记忆力做题,不会就瞎编

  • RAG 大模型:开卷考试,给你一本参考书,照着书答题,不会瞎编、答案准确

3、专业解释

RAG(Retrieval-Augmented Generation)

  • Retrieval:检索(找资料)

  • Augmented:增强(补充信息)

  • Generation:生成(输出答案)

核心:不改变模型,不靠训练,靠外部知识库提升准确率

三、为什么要用 RAG?优势在哪里?

1、解决幻觉:基于真实文档生成,不瞎编

2、知识实时更新:新增文档不用重新训练模型

3、保护私有数据:本地知识库,数据不外泄

4、成本低:不用微调、不用训练,性价比最高

5、简单落地:程序员一周就能做一个私有问答机器人

四、RAG 完整核心流程(5步走,一目了然)

我给你拆成最简单的 5 个步骤,分为 离线预处理在线问答

第一部分:离线阶段(只做一次)

步骤1:文档加载 & 数据清洗

把你的资料导入进来:PDF、Word、txt、markdown、网页、代码

去水印、去空格、去无效内容,清洗干净

步骤2:文本分片(Chunk)

一篇长文章太长,模型读不完

把长文本切成一小块一小块(200~800字),叫分片

步骤3:向量化(变成向量)

机器看不懂文字,只能看懂数字

把每一段文字,转成一组数字(向量/embedding)

语义相似的文字,向量距离很近

步骤4:存入向量数据库

把向量 + 原文,存进向量数据库(Chroma、FAISS、Milvus)

建好索引,方便快速查找


第二部分:在线阶段(用户提问时)

步骤5:检索 + 生成答案

1、用户提问 → 问题转向量

2、向量数据库比对 → 找出最相似的几段原文

3、把原文 + 问题一起发给大模型

4、大模型根据原文,整理答案输出

流程图(文字版)

原始文档 → 清洗 → 分片 → 向量化 → 入库

用户提问 → 向量化 → 检索相似文本 → 拼接提示词 → LLM 生成答案

五、两种 RAG:基础 RAG vs 进阶 RAG

1、基础 RAG

最简单:分片 + 检索 + 生成

适合新手、简单场景

2、进阶 RAG

增加:重排序、问题改写、路由检索、摘要压缩

适合企业级项目,准确率更高

六、RAG 和微调有什么区别?很多人搞混

1、RAG

  • 不用训练

  • 速度快、成本低

  • 适合知识问答、知识库

2、微调(Fine-tune)

  • 需要数据、需要算力

  • 改变模型能力

  • 适合风格对齐、任务习惯

落地建议:优先 RAG,不够再微调

七、RAG 实战代码(15行,一键能运行)

下面是基于 langchain + Chroma 的极简 RAG 代码,不用复杂环境,安装依赖就能跑:

python 复制代码
# 安装依赖:pip install langchain langchain-community chromadb sentence-transformers
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

# 1. 加载本地文本(替换成你的文档路径)
loader = TextLoader("my_knowledge.txt", encoding="utf-8")
docs = loader.load()

# 2. 文本分片
text_splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=0)
splits = text_splitter.split_documents(docs)

# 3. 向量化 + 存入向量库
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vector_db = Chroma.from_documents(documents=splits, embedding=embeddings)

# 4. 检索相似内容(模拟用户提问)
query = "RAG的核心步骤有哪些?"
retrieved_docs = vector_db.similarity_search(query, k=2)

# 5. 输出检索结果(实际场景中拼接给大模型生成答案)
print("检索到的相关内容:")
for doc in retrieved_docs:
    print(f"- {doc.page_content}")

代码说明:

  1. 依赖安装:一行命令搞定所有依赖,新手无压力

  2. 核心逻辑:完整覆盖 RAG 离线+在线核心流程

  3. 环境要求:无需 GPU,普通电脑就能运行

  4. 自定义修改:只需把 my_knowledge.txt 换成你的知识库文档即可

八、常见落地场景

1、企业私有知识库问答(内部文档、规章制度)

2、代码助手(读取本地代码、答疑)

3、客服机器人(读取产品手册)

4、论文、资料智能问答

5、医疗、金融合规问答(不能瞎编)

九、总结(快速回顾)

1、RAG = 先检索、后生成,本质是给大模型"开卷考试"

2、核心价值:解决大模型幻觉、知识滞后、私有数据使用三大痛点

3、核心流程:加载 → 清洗分片 → 向量化 → 入库 → 检索生成

4、落地建议:优先用极简代码跑通基础RAG,再逐步优化成进阶版本

5、成本优势:无需训练/微调,是新手入门AI落地的首选方案

相关推荐
zhanghongbin011 小时前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
hhh3u3u3u1 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
AI应用实战 | RE1 小时前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain
IT_陈寒1 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端
Thomas.Sir1 小时前
AI 医疗之罕见病/疑难病辅助诊断系统从算法到实现【表型驱动与知识图谱推理】
人工智能·算法·ai·知识图谱
liliangcsdn2 小时前
MCP协议的深度分析与应用示例
人工智能·机器学习·全文检索
VBsemi-专注于MOSFET研发定制2 小时前
面向AI水泥厂储能系统的功率器件选型分析——以高可靠、高效率的能源转换与管理系统为例
人工智能·能源
好家伙VCC2 小时前
**发散创新:基于Python与ROS的机器人运动控制实战解析**在现代机器人系统开发中,**运动控制**是实现智能行为的核心
java·开发语言·python·机器人
2401_827499992 小时前
python项目实战09-AI智能伴侣(ai_partner_2-3)
开发语言·python
派葛穆2 小时前
汇川PLC-Python与汇川easy521plc进行Modbustcp通讯
开发语言·python