大模型再强大,也有它的盲区------它不知道你公司内部的文档、不了解你的私有数据库、更不了解昨天才上传的技术方案。
RAG(Retrieval-Augmented Generation,检索增强生成)就是解决这个问题的:让大模型在回答问题之前,先去外部知识库找资料,再结合资料生成答案。
这篇文章,我们从原理出发,完整讲清楚 RAG 是怎么工作的。
一、为什么需要 RAG?
大模型的局限性体现在三个方面:
- 知识截止日期:模型训练的数据有时间节点,之后的事它不知道
- 私有知识缺失:企业内部文档、用户私有数据,模型根本没学过
- 幻觉问题:模型会在「不知道」的时候胡编乱造
传统解法有两种:
- Fine-tuning(微调) :把知识注入模型权重,效果好但成本高、周期长、不灵活
- Prompt Engineering(提示词) :靠提示词引导,但上下文有限,且不够可靠
RAG 提供了第三条路:把知识放在外部,检索出来作为上下文,让模型基于真实资料回答
二、RAG 的完整工作流程
RAG 的核心流程分为两个阶段:索引阶段(Indexing) 和 检索生成阶段(Retrieval & Generation)
阶段一:索引阶段 ------ 构建知识库
scss
文档 → 分块(Chunk) → 向量化(Embedding) → 存入向量数据库
1. 查询向量化
用户提问同样经过 Embedding 模型,转换成向量。
2. 相似度检索
在向量数据库中,用余弦相似度或点积,找出与问题向量最相似的 Top-K 个文本块。
3. 上下文组装(Context Assembly)
将检索到的文本块拼接,组装成包含「背景知识 + 用户问题」的提示词。
4. 大模型生成
带着检索到的资料,让大模型生成最终答案。由于答案有据可查,幻觉问题大幅减少。
三、RAG 的关键技术细节
3.1 Embedding 模型的选择
Embedding 是 RAG 的地基。常见的 Embedding 模型:
| OpenAI text-embedding-ada-002 | 效果好,API 调用方便 |
|---|---|
| BGE (BAAI) | 开源,中文支持好 |
| M3E | 轻量,中文开源首选 |
| Jina Embeddings | 支持多语言,API 友好 |
3.2 混合检索策略
单一向量检索有时不够精准,业界常用混合检索:
- 向量检索(Semantic Search) :基于语义相似度
- 关键词检索(BM25 / TF-IDF) :精确匹配关键词
- 两者加权融合,兼顾语义理解和精确匹配
3.3 重排序(Reranking)
初步检索的结果,可能存在顺序不够理想的问题。用 Cross-Encoder 模型(如 BAAI/bge-reranker)对检索结果重新打分排序,把真正相关的内容排在最前面。
3.4 查询改写(Query Rewriting)
用户的问题不一定适合直接检索,比如口语化表达、缺少关键实体等问题。需要:
- Query Expansion:将一个问题扩展成多个角度的查询
- Query Decomposition:将复杂问题拆分为多个简单子问题
- HyDE:用大模型先生成一个「理想答案」,再以此检索
四、RAG 的常见问题与优化方向
问题一:检索不到相关内容
原因:知识库内容与用户问题不在同一语义空间。
优化:优化分块策略、提升 Embedding 模型质量、引入关键词混合检索。
问题二:生成答案与检索内容不符
原因:大模型没有很好地「听从」检索到的资料。
优化:在提示词中明确要求「仅基于以下资料回答」,或使用 Reference Prompt 将原文片段注入。
问题三:上下文长度限制
原因:Top-K 检索的文本块拼起来可能超过模型的上下文窗口。
优化:控制每块大小、限制 Top-K 数量、使用压缩技术(LLMLingua)压缩上下文。
五、RAG 在 Dify 中的实操流程
以一个实际开发情况为例,在 Dify 中构建一个 RAG 应用:
第一步:上传私有文档(PDF/Word/TXT),Dify 自动完成分块和向量化
第二步:配置 Embedding 模型(Dify 支持本地 Ollama 或 OpenAI API)
第三步:创建「应用」,接入知识库,配置检索参数(Top-K、相似度阈值)
第四步:编写提示词模板,定义「基于知识库内容回答」的行为约束
第五步:发布应用,通过 API 或前端页面访问
而整个过程不需要写代码,所以零基础也能快速搭建一个私有知识库问答系统。
、RAG vs Fine-tuning:什么时候用哪个?
| RAG | Fine-tuning | |
|---|---|---|
| 知识更新频率 | 高(实时更新知识库) | 低(需要重新训练) |
| 成本 | 低(只需维护向量数据库) | 高(GPU 训练成本) |
| 可解释性 | 高(答案可溯源到原文) | 低(知识融入权重黑箱) |
| 适用场景 | 私有知识、动态知识 | 风格学习、复杂推理模式 |
实际项目中,两者经常结合使用:RAG 保证知识准确性,Fine-tuning 提升特定任务的推理能力。
结语
RAG 不是银弹,但它解决了一个非常核心的问题:让大模型从「我知道」变成「我能查到」。
在企业落地场景中,RAG 几乎是必选项。结合 Dify 这样的低代码平台,搭建一套私有知识库问答系统的门槛,已经被拉到了地板上。
如果你还没动手试过,不妨从上传一份你手头的技术文档开始,体验一下 RAG 带来的改变。