📚 什么是 RAG?
RAG(Retrieval-Augmented Generation)检索增强生成
是一种结合了"检索"和"生成"的AI技术架构,让大模型能够基于外部知识库回答问题,解决了大模型"知识过时"和"幻觉"的问题。
🎯 核心价值
- 知识时效性:大模型训练后的新知识可以通过更新知识库获取
- 减少幻觉:基于真实文档回答,可追溯来源
- 数据隐私:企业数据不需要上传到模型训练
- 成本可控:不需要每次都微调模型
💡 为什么RAG这么火?
🔥 2024-2025 RAG爆发原因
- 企业需求:企业有大量私有数据,希望AI能用起来
- 合规要求:数据不能出域,RAG是最好的解决方案
- 技术成熟:向量数据库、Embedding模型生态完善
- 成本优势:比微调模型便宜得多
📊 RAG vs 微调 vs 提示工程
| 维度 |
RAG |
微调(Fine-tuning) |
提示工程 |
| 成本 |
中等 |
高 |
低 |
| 知识更新 |
实时(更新知识库) |
慢(需要重新微调) |
不适用 |
| 数据隐私 |
好(数据本地存储) |
差(需要上传训练) |
一般 |
| 适用场景 |
知识密集型问答 |
特定任务、风格 |
简单任务 |
| 可解释性 |
高(有来源) |
低 |
中 |
⚙️ RAG 核心流程
📄 文档
→
✂️ 分块
→
🔢 向量化
→
💾 存储
→
🔍 检索
→
🤖 生成
1️⃣ 文档处理(Chunking)
为什么需要分块?
大模型有上下文长度限制,一篇长文档不可能全部塞进去。分块是把长文档切成小块,检索时只取相关的几块。
- 固定长度分块:按字符数切分,如500字符一块
- 语义分块:按段落、章节切分,保留语义完整性
- 滑动窗口:块之间有重叠,避免关键信息被切断
⚠️ 分块太小:信息不完整
⚠️ 分块太大:检索精度下降,上下文浪费
2️⃣ 向量化(Embedding)
Embedding是什么?
把文本转换成数字向量(如 [0.1, -0.3, 0.8, ...]),语义相似的文本向量也相似。这样就能用数学方法计算文本相似度。
常用Embedding模型:
- OpenAI:text-embedding-3-small/large(付费,效果好)
- BGE:BAAI/bge-large-zh-v1.5(开源,中文效果好)
- M3E:m3e-base(开源,中文通用)
3️⃣ 向量存储(Vector Store)
主流向量数据库:
- Pinecone:云服务,简单易用,企业级
- Milvus:开源,高性能,支持海量数据
- Chroma:轻量级,适合快速原型
- Weaviate:开源,支持混合检索
- PGVector:PostgreSQL扩展,适合已有PG的项目
4️⃣ 检索(Retrieval)
🔍 检索方式对比
- 向量检索:语义相似度,理解"同义词"
- 关键词检索:精确匹配,BM25算法
- 混合检索:向量+关键词结合,效果最好
- 重排序(Rerank):对检索结果二次排序,提升精度
5️⃣ 生成(Generation)
将检索到的文档作为上下文,加上用户问题,一起发给大模型生成答案。
回答 = LLM(问题 + 检索到的文档 + Prompt模板)
🛠️ 关键技术详解
📊 Embedding 模型选型
| 模型 |
维度 |
语言 |
特点 |
| text-embedding-3-small |
1536 |
多语言 |
OpenAI,性价比高 |
| text-embedding-3-large |
3072 |
多语言 |
OpenAI,效果最好 |
| bge-large-zh-v1.5 |
1024 |
中文 |
开源免费,中文效果优 |
| m3e-base |
768 |
中文 |
开源,轻量级 |
⚡ Rerank 重排序
为什么需要Rerank?
向量检索只是"初步筛选",可能漏掉一些相关但不相似的文档。Rerank用更精确的模型对结果重新排序,大幅提升检索质量。
- Cohere Rerank:云端API,效果好,支持多语言
- BGE Reranker:开源,本地运行,中文效果好
🔀 混合检索(Hybrid Search)
最佳实践
向量检索(60%权重)+ 关键词检索(40%权重)
先各自检索Top 20,再合并去重,最后Rerank取Top 5
📝 Prompt 设计
好的Prompt是RAG成功的关键!
优秀Prompt示例:
你是一个专业的问答助手。请根据背景信息回答问题。
【规则】
1. 只使用背景信息中的内容,不要添加背景中没有的信息
2. 如果背景信息不足,请明确说"根据现有资料无法回答"
3. 在回答中标注引用来源,格式:[文档名]
4. 回答要简洁、准确、有条理
【背景信息】
{context}
【问题】
{question}
【回答】
💼 产品经理视角
🎯 RAG产品如何评估效果?
准确率
召回率
响应时间
用户满意度
答案完整性
引用准确率
RAGAS 评估框架(面试必问!)
| 指标 |
含义 |
如何计算 |
| Faithfulness |
忠实度 |
答案是否基于检索内容 |
| Answer Relevancy |
答案相关性 |
答案是否回答了问题 |
| Context Precision |
上下文精确度 |
检索内容是否相关 |
| Context Recall |
上下文召回率 |
相关内容是否被检索到 |
💰 成本分析
RAG成本构成:
- Embedding API 调用费用
- LLM API 调用费用
- 向量数据库存储费用
- 服务器/云服务费用
成本优化策略:
- 使用开源Embedding模型(BGE)替代OpenAI
- 缓存热门问题的Embedding和答案
- 批量处理减少API调用次数
- 选择合适的向量维度(768 vs 1536)
🔒 安全与合规
- 访问控制:不同用户能访问不同文档
- 数据脱敏:敏感信息(手机号、身份证)过滤
- 审计日志:记录所有查询和访问
- 数据隔离:多租户场景下的数据隔离
📈 产品迭代方法
持续优化闭环
- 收集反馈:用户点赞/点踩、正确/错误标记
- 分析badcase:找出系统薄弱点
- 优化文档:补充缺失知识,优化分块
- 调优参数:调整检索数量、相似度阈值
- Prompt优化:根据badcase调整Prompt
🎤 面试高频问答
Q1: RAG和微调有什么区别?什么场景用RAG?
区别:
- RAG:检索外部知识,知识可实时更新,成本低
- 微调:改变模型参数,适应特定任务/风格,成本高
用RAG的场景:
- 知识需要频繁更新(如企业知识库、客服)
- 有大量私有数据不能上传训练
- 需要引用来源,可解释性强
- 预算有限,不能承担微调成本
💡 一句话总结:知识型问题用RAG,风格/能力型问题用微调
Q2: RAG系统回答不准确,你怎么排查?
排查步骤:
1. 文档问题:知识库是否有正确答案?文档质量如何?
2. 分块问题:关键信息是否被切断了?分块是否合理?
3. 检索问题:是否检索到了相关文档?(检查相似度分数)
4. 生成问题:检索到了但答案不对?可能是Prompt问题
常见问题:
- 分块太大/太小 → 调整分块参数
- 检索召回率低 → 增加Top-K、使用混合检索
- 生成有幻觉 → 优化Prompt,强调"只使用背景信息"
Q3: 如何评估RAG系统效果?
量化指标:
- RAGAS框架:Faithfulness、Answer Relevancy、Context Precision/Recall
- 自定义测试集:准备100个问题+标准答案,计算准确率
定性评估:
- 人工抽检:每天随机抽查20个问答
- 用户反馈:点赞率、投诉率
- Badcase分析:收集错误案例,分类改进
Q4: 什么是Rerank?为什么需要?
定义:Rerank是对检索结果进行二次排序的技术。
为什么需要:
- 向量检索是"语义相似",不是"精确相关"
- 检索可能返回语义相似但不相关的文档
- Rerank用更强大的模型重新打分,提升精度
方案:Cohere Rerank(云端)、BGE Reranker(开源)
💡 类比:向量检索是"海选",Rerank是"决赛"
Q5: Embedding模型怎么选?
考虑因素:
- 语言:中文选BGE/M3E,英文/多语言选OpenAI
- 成本:有预算用OpenAI,没预算用开源
- 部署:云服务用API,本地部署用开源模型
- 维度:维度越高效果越好,但存储和计算成本也越高
推荐:
- 企业级、有预算:OpenAI text-embedding-3-large
- 中文场景、预算有限:BAAI/bge-large-zh-v1.5
Q6: 如何处理用户敏感问题/数据安全?
技术方案:
- 访问控制:按角色/部门过滤可访问的文档
- 数据脱敏:自动识别并脱敏手机号、身份证等
- 本地部署:数据和模型都在内网
- 日志审计:记录所有查询,支持追溯
产品方案:
- 用户协议:明确数据使用范围
- 权限管理:管理员可配置访问权限
Q7: RAG如何处理长文档?
方案:
1. 分块:切成小块,每块单独向量化
2. 摘要:对长文档生成摘要,摘要和原文都存储
3. 层次化索引:文档摘要→段落→具体内容,逐层检索
4. 上下文窗口:检索到某块后,自动带上前后块
分块策略:
- 固定长度 + 重叠(如500字符,重叠50字符)
- 按段落/章节分块(保留语义完整性)
Q8: RAG响应速度慢怎么办?
优化方向:
- 缓存:热门问题的Embedding和答案缓存
- 异步:检索和生成并行处理
- 减少Token:压缩Prompt,减少检索文档数量
- 模型优化:用更快的模型(如GPT-3.5代替GPT-4)
- 向量库优化:索引优化、硬件加速
目标:首次响应 < 3秒
🚀 进阶话题(加分项)
🧠 Advanced RAG 技术
1. Query Rewriting(查询改写)
用户的问题可能表述不清晰,用LLM改写成更易于检索的形式。
例如:"怎么报销" → "公司报销流程和所需材料"
2. Multi-Query(多查询)
把一个问题改写成多个变体,分别检索,合并结果。
例如:"年假" → ["年假天数", "年假申请流程", "年假过期规则"]
3. HyDE(Hypothetical Document Embeddings)
先让LLM生成一个"假设答案",用假设答案的向量去检索,效果可能更好。
4. Self-RAG
模型自己判断是否需要检索、检索结果是否相关、答案是否需要修正。
5. GraphRAG
微软提出的方法,先从文档中抽取实体关系图,检索时沿着图谱查找相关信息。适合需要推理的场景。
📊 RAG 技术栈
LangChain
LlamaIndex
Haystack
Pinecone
Milvus
Chroma
Weaviate
OpenAI
Claude
Ollama
🎯 产品化思考
面试加分:展示产品思维
- MVP思路:先用最简单的方案上线,快速验证需求
- 数据驱动:建立评估指标,持续优化
- 用户反馈:设计反馈机制,收集badcase
- 成本意识:权衡效果和成本,选择性价比方案
- 扩展性:架构设计考虑未来扩展
📋 面试准备清单
- 能清晰解释RAG是什么、为什么需要
- 熟悉RAG核心流程:Chunking → Embedding → Retrieval → Generation
- 了解主流Embedding模型和向量数据库
- 知道如何评估RAG效果(RAGAS)
- 能分析RAG系统问题和优化方向
- 了解Rerank、混合检索等优化技术
- 有成本意识,知道如何权衡效果和成本
- 了解数据安全和合规要求
- 能从产品角度谈RAG的落地和迭代
RAG 质量 = 文档质量 × 检索精度 × Prompt 设计