第 6 章
RAG 检索增强生成
检索增强生成(RAG)通过外部知识库和上下文注入,解决了大模型的知识更新、可解释性和成本问题,是企业应用的主流架构。
RAG 工作原理
RAG通过检索外部知识库,将相关信息注入到生成过程中,实现了知识增强的生成。
完整工作流程
1
查询理解:理解用户查询的意图和需求
2
向量化:将查询转换为向量表示(Embedding)
3
检索:在向量数据库中检索相似文档
4
上下文注入:将检索到的文档作为上下文注入到Prompt中
5
生成:基于增强的上下文生成回答
核心组件
- • 向量数据库:存储文档的向量表示(如Pinecone、Weaviate、Milvus)
- • 嵌入模型:将文本转换为向量(如OpenAI Embeddings、BGE)
- • 检索器:执行相似度搜索(向量检索、关键词检索、混合检索)
- • 生成模型:基于检索结果生成回答(如GPT-4、Claude)
RAG 的优势
RAG解决了大模型的关键问题,使其更适合企业应用。
知识更新
- • 实时更新:可以随时更新知识库,无需重新训练模型
- • 领域知识:可以注入特定领域的专业知识
- • 时效性:可以访问最新的信息
- • 灵活性:不同查询可以使用不同的知识库
可解释性
- • 来源追溯:可以追溯到答案的来源文档
- • 透明度:用户可以查看检索到的文档
- • 可信度:可以评估信息来源的可信度
- • 审计:便于审计和合规
成本效益
- • 无需微调:不需要针对每个领域微调模型
- • 知识库复用:同一个知识库可以服务多个应用
- • 成本控制:相比微调,成本更低
- • 快速部署:可以快速部署新应用
减少幻觉
- • 事实基础:基于检索到的文档生成,减少编造
- • 准确性:提高答案的准确性
- • 可靠性:更适合需要准确信息的场景
- • 质量控制:可以通过知识库质量控制答案质量
RAG 的挑战
RAG虽然强大,但也面临一些挑战需要解决。
检索质量依赖
RAG的效果高度依赖检索质量:
- • 检索准确性:检索不到相关文档会导致错误答案
- • 检索相关性:检索到不相关文档会影响生成质量
- • 文档质量:知识库的质量直接影响RAG效果
- • 优化方向:改进检索算法、优化文档分块、使用混合检索
延迟问题
- • 检索延迟:向量检索需要时间
- • 生成延迟:生成模型需要处理更长的上下文
- • 总体延迟:RAG的总体延迟高于直接生成
- • 优化:缓存、异步检索、优化检索算法
上下文限制
- • 上下文窗口:模型有上下文长度限制
- • 文档选择:需要从大量检索结果中选择最相关的
- • 信息压缩:可能需要压缩或摘要检索到的文档
- • 解决方案:重排序、文档摘要、分层检索
RAG 最佳实践
构建高质量RAG系统的关键实践。
向量数据库选择
Pinecone
托管服务,易于使用,适合快速原型
Weaviate
开源,功能丰富,支持混合检索
Milvus
高性能,适合大规模部署
Chroma
轻量级,易于集成
检索策略
- • 向量检索:基于语义相似度,适合语义查询
- • 关键词检索:基于关键词匹配,适合精确匹配
- • 混合检索:结合向量检索和关键词检索,效果更好
- • 重排序:使用重排序模型优化检索结果
文档处理
- • 分块策略:合理分块,保持语义完整性
- • 元数据:添加元数据(来源、时间、类型等)
- • 预处理:清理、标准化、去重
- • 更新机制:建立文档更新和版本管理机制
Prompt 工程
- • 上下文组织:合理组织检索到的文档
- • 指令清晰:明确指示模型如何使用检索到的信息
- • 引用要求:要求模型引用来源
- • 质量控制:添加质量控制指令(如"如果信息不足,请说明")
RAG vs 微调:如何选择?
理解RAG和微调的适用场景,做出正确的选择。
选择 RAG 的场景
- • 知识更新频繁:需要频繁更新知识
- • 多领域应用:需要处理多个领域
- • 可解释性要求:需要追溯答案来源
- • 快速部署:需要快速部署新应用
- • 成本控制:需要控制成本
选择微调的场景
- • 任务特定:需要学习特定的任务模式
- • 风格适应:需要适应特定的输出风格
- • 性能优化:需要在特定任务上优化性能
- • 知识固化:知识相对稳定,不需要频繁更新
- • 延迟敏感:对延迟要求极高
混合方案
实际应用中,RAG和微调可以结合使用:使用微调优化基础能力,使用RAG注入领域知识。
学习成果
完成本章后,你将:
- 1理解RAG的完整工作流程(检索→增强→生成)和核心组件
- 2掌握RAG的优势(知识更新、可解释性、成本效益)和挑战(检索质量、延迟、上下文限制)
- 3了解RAG的最佳实践(向量数据库选择、检索策略、文档处理、Prompt工程)
- 4能够评估RAG vs 微调的选择,根据场景做出正确的架构决策