在线工具集

RAG 检索增强生成:让 AI 用上你的私有数据

深入讲解 RAG 工作流程(向量化→检索 Top-K→拼 Prompt)、Embedding 模型选择(OpenAI text-embedding-3/BGE 中文)、向量数据库(Pinecone/Qdrant/Milvus/Chroma)、分块策略(语义/固定/递归)、混合检索(向量+关键字)、Re-ranker、评估指标、企业知识库实战。

发布于 2026-04-28 · 约 13 分钟阅读

ChatGPT 和 Claude 的知识库是在训练时冻结的,无法访问你的私有数据。如果你想让 AI 理解你的企业知识库、内部文档、用户反馈,标准的 LLM API 无能为力。这就是 RAG(检索增强生成)存在的原因。RAG 通过在 AI 生成答案前,先从你的数据库中检索相关信息,从而让模型"看到"你的私有数据。本文将深入讲解 RAG 的完整工作流程、核心技术、各种向量数据库的选型、以及企业级部署的最佳实践。

1. RAG 的工作流程

RAG 系统的核心思想很简单:先检索,再生成。完整流程分为离线和在线两个阶段。离线阶段构建知识库:1) 文档收集(从各种来源收集原始文档);2) 预处理(清理文本、去除 HTML、特殊符号、重复内容);3) 分块(把长文档切分成较小的片段,通常 256-512 字符);4) Embedding(用向量化模型把每个片段转换为向量,如 1536 维);5) 存储(把向量和对应的文本存入向量数据库,建立索引)。在线阶段处理用户查询:1) 查询向量化(用相同的 Embedding 模型把问题转换为向量);2) 检索(在向量数据库中用相似度搜索,找到最相近的 Top-K 文本片段);3) Re-ranking(可选,用专用模型重新排序);4) Prompt 拼接(把检索到的文本插入 LLM 的 Prompt 中,作为上下文);5) 生成(LLM 基于上下文和用户问题生成最终回答)。核心价值:让 LLM 有了"记忆",可以准确引用你的数据,而不是基于训练数据的模糊印象。

2. Embedding 模型的选择

Embedding 模型是 RAG 的心脏,直接决定检索质量。OpenAI text-embedding-3-large:业界标杆,向量维度 3072,性能最强,支持 100+ 语言。成本 0.13 元/百万 Token。缺点是需要 API 调用(隐私风险),较贵。OpenAI text-embedding-3-small:轻量版,向量维度 512,速度快,成本低(0.02 元/百万 Token),性能仍接近 large,大多数企业的首选。BGE(阿里):开源,维度 768,中文效果特别强,可本地部署,完全免费。缺点是英文性能比 OpenAI 略低。Voyage AI embedding-2:维度 1024,性能接近 OpenAI,成本接近(0.1 元),RAG 专用优化。BERT 与开源模型:完全开源,可本地运行,维度通常 384-768。缺点是性能略低,需要自己管理服务器。选型建议:快速验证(1-2 周)用 text-embedding-3-small + Pinecone;中文场景用 BGE + 本地向量库;高精度要求用 text-embedding-3-large + 优化的 Re-ranker;成本最优用 BGE + Chroma;平衡方案用 text-embedding-3-small + Qdrant。

3. 向量数据库对比

向量数据库是存储和快速检索向量的专用系统,不能用普通关系数据库代替。Pinecone:完全托管的 SaaS,无需运维,API 简洁,支持元数据过滤。成本按存储和查询量付费,0.25 元/百万 queries。优点是最易使用。缺点是最贵,数据存在云端(隐私风险),lock-in 风险。适用于快速 MVP、初创公司。Qdrant:高性能的开源向量库,可自建或用官方云服务,API 完整,支持过滤、更新、批量操作。自建无成本,云服务约 0.05 元/百万 queries。优点是性能好(毫秒级),支持本地部署,社区活跃。缺点是自建需要运维,学习曲线陡。适用于中等规模(1-100GB)、有技术团队的企业。Milvus:功能最完整的开源向量库,支持分布式、故障转移、多副本。开源免费,企业版有技术支持费。优点是企业级可靠性,支持大规模(100GB+)。缺点是复杂度高,需要专业知识。适用于大企业、大规模数据、专业 DevOps 团队。Chroma:轻量级向量库,可嵌入 Python 应用,也支持客户端-服务器模式。完全开源免费。优点是最容易上手(3 行代码即可运行)。缺点是性能和可扩展性不如其他选项,数据规模 ≤10GB 最佳。适用于学习、原型、小型项目、没有运维经验的团队。

4. 分块策略(Chunking)

如何把长文档切分成向量化的片段,是影响 RAG 质量的关键超参数。固定大小分块:按字符数或词数切分,如每 512 字为一块,可设置重叠(如 20% 重叠)。优点是实现简单,计算快。缺点是可能在语句中间切断,破坏上下文。语义分块:用 Embedding 模型计算相邻句子的相似度,当相似度低于阈值时切分。这样可以保证每块都是语义完整的单元。优点是保留语义完整性,检索效果最好。缺点是需要多次调用 Embedding 模型,计算成本高。递归分块:先按段落、标题等自然边界切分,再按大小调整。例如先按换行切分成段落,超大段落再细分。优点是保留文档结构,兼顾效率和质量。缺点是需要对文档格式有了解。最佳实践:推荐的超参数,中文文档块大小 256-512 字,重叠 10-20% 字符数;英文文档块大小 512-1024 字;代码文档块大小 300-800 字。实施步骤:第 1 阶段用固定分块快速验证效果(1 天);第 2 阶段根据检索失败案例调整块大小(1 周);第 3 阶段如果仍有问题,升级到语义分块。

5. 混合检索:向量 + 关键字

纯向量搜索对语义相似性很好,但对"精确词汇匹配"不敏感。例如搜索"Python 版本 3.10",向量搜索可能返回关于版本管理的模糊内容,而错过包含"3.10"关键词的精确文档。混合检索结合两者的优势。工作流程:1) 并行执行两种检索,用向量搜索和关键字搜索(BM25)各找 Top-K 候选;2) 归一化和融合,把两种搜索结果的相关度分数归一化(都转为 0-1),然后按权重融合(如 0.7 × 向量分 + 0.3 × 关键字分);3) 去重和排序,移除重复文档,按融合分数排序返回最终 Top-K。何时使用:强烈推荐用于企业知识库有很多域特定术语或专有名词、用户查询通常包含具体的数字或日期、对召回率要求高的场景。可选用于文档已经充分向量化且效果不错、用户查询多为自然语言的场景。大多数生产 RAG 系统都使用混合检索,因为它的边际收益很高(通常可以提升 10-20% 的检索准确率),代码实现也不复杂。

6. Re-ranker:精准排序

检索回来的 Top-K 文档中,不是所有都真的相关。Re-ranker 是一个独立的模型,用更精细的语义理解重新排序这些候选,确保最相关的文档排在最前面。原理:Embedding 模型快但粗糙(用向量距离衡量相关性)。Re-ranker 是一个更大、更精细的模型(通常基于 BERT),它一次看 1 个查询 + 1 个文档对,输出一个 0-1 的相关度分数。虽然慢,但准确度高。工作流程:1) 用向量搜索快速找到 Top-50 候选(很快);2) 用 Re-ranker 对这 50 个候选逐个评分(较慢但可接受);3) 按 Re-ranker 分数重新排序,返回 Top-K 给 LLM。常见 Re-ranker 模型:Cohere Rerank(商业 API,精度最高,多语言支持,0.00001 元/次);BGE Reranker(开源,免费,中文优化);Jina Reranker(开源,较新,混合检索优化)。何时使用:强烈推荐用于对精度敏感的应用(聊天机器人)、低容错场景(医疗、法律)。可选用于对成本敏感的应用、高吞吐场景。经验值:Re-ranker 通常可以把"错误率"从 20% 降至 5-10%,值得投资。

7. 评估指标与质量控制

如何评估 RAG 系统的质量是一个系统工程。不能凭感觉判断,必须有客观指标。检索阶段的指标:Recall@K 是在 Top-K 结果中,有多少比例的相关文档被召回,目标 ≥80%。Precision@K 是 Top-K 结果中,有多少比例是真正相关的,目标 ≥70%。NDCG@K 综合考虑相关度和排序位置,目标 ≥0.75。生成阶段的指标:BLEU 分数比较生成回答和参考回答的 n-gram 重叠,范围 0-1。ROUGE 分数与 BLEU 类似,但更关注召回。BERTScore 用 BERT Embedding 计算语义相似度,对意思相同但表述不同的回答更宽容。端到端的指标:人工评估建立小规模测试集(100-500 问),让人类评分回答的正确性(0-5 分)。任务特定指标如问答系统的准确率、信息检索的相关度排序、摘要生成的覆盖率。建立评估流程:步骤 1 准备评估数据集,收集真实查询和标准答案,至少 50-100 个样本;步骤 2 基线测试,用当前系统运行一遍,记录所有指标;步骤 3 改进与迭代,调整参数,比较指标变化;步骤 4 持续监控,定期在测试集上运行评估。

8. 企业知识库实战

理论容易,实战有坑。典型场景:某 SaaS 公司有 5000 份 FAQ 文档,想要一个自动回答客户问题的助手。架构设计:1) 文档收集:从知识库系统导出所有 FAQ(Confluence/Notion API);2) 预处理:去 HTML,合并重复问题,标记分类标签;3) 分块:每个 FAQ 是一个自然单元,太长(>1000 字)再细分;4) Embedding:用 text-embedding-3-small(成本低,效果足够);5) 存储:用 Qdrant(可自建,性能好);6) 检索:混合检索(向量 + 关键字),Re-ranker 可选;7) LLM:Claude(长上下文优势),Prompt 约束输出 200 字。常见的部署坑:坑 1 更新延迟(新增/修改文档后,系统可能需要几小时才能反映,解决方案是小文档实时更新、大批量更新定时任务);坑 2 幻觉(LLM 编造信息,防御是在 Prompt 中明确说"只基于检索的文档回答"、要求引用文档、人工审核关键回答);坑 3 冷启动(系统刚上线时,Embedding 模型对领域特定内容的理解有限,解决是先用小批测试、如果不满意考虑微调或换模型、建立用户反馈机制);坑 4 成本爆炸(大规模 embedding 和 LLM 调用成本很高,优化方案是用更便宜的模型、限制检索结果的文本长度、缓存常见问题的回答)。部署检查清单包括评估数据集已准备、基线指标已建立、成本预算已评估、数据隐私合规已审查、监控和日志已配置、用户反馈机制已集成、降级方案已准备。

常见问题

RAG 和微调有什么区别,我该用哪个

微调通过重新训练模型来学习新知识,需要大量数据和计算资源,投入大但长期适用。RAG 通过检索知识库来增强生成,不需要重新训练,快速部署但每次查询都需要检索。选择标准:知识库频繁变化用 RAG;知识固定但需要模型深度学习用微调;两者结合先 RAG 快速上线,后期根据反馈数据微调。

向量维度越高越好吗

不是。高维向量能表达更多信息,但会增加计算和存储成本。实践表明 768-1536 维在大多数任务上已经足够。关键是 Embedding 模型的质量,不是维度的高度。建议选择任务相关的优质模型(如 BGE 中文、OpenAI text-embedding-3),而不盲目追求高维。

多语言文档如何处理

选择多语言 Embedding 模型。OpenAI text-embedding-3 支持 100+ 语言;BGE-multilingual 优化中文;mBERT 支持 104 语言。避免只支持英文的模型。对于中英混合文档,推荐用 BGE-multilingual 或分别用单语言模型再融合。

RAG 会泄露私密信息吗

取决于 Embedding 服务商。用公网 API(如 OpenAI)会把文本上传到服务器,有隐私风险。企业敏感数据应该:1) 自建向量库 + 本地 Embedding 模型;2) 用开源模型(BGE)本地部署;3) 对数据脱敏后再 Embedding。RAG 系统本身不会泄露信息,但必须注意 Embedding 服务商的隐私政策。

检索回来的文档有矛盾怎么办

这是常见问题,原因通常是文档质量低或版本不一致。解决方案:1) 在 Prompt 中标注文档的时间戳或版本,让 LLM 优先使用最新的;2) 在文档本身加入元数据标签(如"已废弃""v2.0");3) 定期清理重复和过时的文档;4) 若矛盾严重,用 Re-ranker 过滤低质结果。