怎么样才能通俗易懂的理解什么是RAG?以及RAG的工作原理?

297 阅读4分钟

01 什么是“RAG”?

大模型很聪明,但也有“短板”

上下文长度有限

比如 deepseek-r1 满血版的上下文上限是 128K tokens不能无限输入文本,超过了它就处理不了。

图片

AI大模型全套学习资源【点击蓝字获取】

知识可能过时

如果模型是基于 2024 年前的数据训练的,你问它2025年发生的事,它可能会一本正经地胡说八道,即产生“模型幻觉”。

知识面不完整

很多垂直领域的专业知识或企业内部数据本就不公开,模型没见过,自然不会答。

微调很折腾

想让模型掌握新知识,一般得微调甚至重新训练,工程复杂又费力,普通人难搞定。

所以我们需要一种方式,让模型“临时查资料再回答问题”,也就是 RAG(检索增强生成)。

它的核心思路是

先“检索”一批相关资料,再把资料+问题一起交给大模型,生成答案。就像是:带着“小抄”去考试!

图片

02 RAG的工作原理

关键流程包括以下几步:

文本分块(Chunking)

原始文档太长,模型“吃不下”,所以要先切成较小的段落(chunk)。

常见切分方式: 按段落、句子数量或固定字数等,具体方式因文本结构而异。

向量化(Embedding)

每个 chunk 会通过 embedding 模型(如 OpenAl 的text-embedding-ada-002)转化为向量,用数字表达其语义。

语义越相近的 chunk,其向量距离越近。

构建索引(向量数据库)

将这些向量存入向量数据库(如 Qdrant、Chroma)以便后续快速检索。

检索(Retrieve)

用户的问题也通过 embedding 模型转为向量,并与数据库中的向量进行匹配,根据相关性选出 top-k个chunk。

图片

重排序(Reranking)

初步筛出的 chunk 可能质量不一,需用 rerank 模型重新排序,选择最贴近用户问题意图的几个 chunk。

构造提示词(Prompt 构造)

将这些精选出的 chunk 和用户问题拼成完整提示词,交给大模型生成答案。

03 什么是向量数据库?

传统数据库依赖关键词和字段匹配,适合精确查找。而向量数据库支持语义匹配: 它通过计算向量之间的相似度(如余弦相似度),快速找出“意思差不多”的文本。

为什么速度快?

搜索算法优化: 如使用 ANN(近似最近邻)搜索算法减少遍历范围。

索引结构加速: 借助 HNSW、IVF-PQ 等结构,有效组织和检索高维向量。

计算加速: 采用 SIMD 指令并行计算,提升相似度计算效率。

图片

常见向量数据库:

Chroma: 开源、易集成,适合小规模项目

Weaviate: 支持 REST API,内置 embedding 功能

Milvus: 高性能、分布式,适合处理海量数据

Qdrant: 开箱即用,支持payload(附加字段)检索

04 “RAG”有哪些问题?

Chunking 难度高

分块太短导致信息零散,太长又可能导致语义不集中,影响向量匹配准确性。分块方式不合理,还可能破坏上下文的语义完整性,导致指代混乱、逻辑断裂。

不适合需要“全局理解”的任务

比如你问: “这篇文档的核心观点是什么?”

但你把它拆成了100段,模型只看到了其中5段,它当然无法理解全貌。

Embedding 理解可能有偏差

像“我喜欢音乐”VS“我以前喜欢音乐”,对人类来说含义不同。但它们的向量可能很接近,检索时容易误判。

图片

05 “RAG”的应用场景

RAG 的适用范围很广,说几个典型场景

企业知识问答系统

将内部文档构建为知识库,员工提问时,模型先检索相关内容,再生成准确答案。

代码问答助手

把工程代码转成可检索的知识库,像 Cursor 就是这样做的,支持回答项目结构、函数逻辑等开发相关问题。

设备故障诊断

将设备手册、故障记录、维修案例等资料向量化建库,遇到问题时先检索相似案例,再生成诊断与维修建议,提高维修效率。

图片