04. RAG 食谱(RAG Recipes)
概述
本指南提供实用的 RAG(检索增强生成)模式和食谱,帮助您构建有效的检索增强系统。
核心概念
- 检索策略 - 如何有效地检索相关文档
- 增强方法 - 如何将检索结果整合到提示中
- 生成优化 - 在增强上下文中生成高质量输出
- 质量评估 - 评估RAG系统的性能
- 成本优化 - 平衡检索和生成的成本
RAG 基础架构
标准 RAG 流程
查询输入
↓
向量化查询
↓
检索相关文档
↓
排序和过滤
↓
组装增强提示
↓
生成响应
↓
输出返回常见 RAG 食谱
食谱 1: 基础RAG
适用场景: 简单的信息检索任务
python
1. 向量化用户查询
2. 在知识库中搜索相似文档
3. 选择top-k相关文档
4. 将文档插入提示中
5. 生成响应优点:
- 实现简单
- 响应快速
- 成本低
缺点:
- 不适合复杂查询
- 可能包含无关信息
食谱 2: 多步RAG
适用场景: 需要多次检索和推理的任务
python
步骤1: 初始查询检索
→ 获取初步相关文档
步骤2: 查询精化
→ 基于初始结果改进查询
步骤3: 二次检索
→ 使用精化查询再次检索
步骤4: 信息融合
→ 综合多轮检索结果
步骤5: 生成响应
→ 基于综合信息生成答案优点:
- 处理复杂查询
- 提高准确性
- 减少幻觉
缺点:
- 需要更多API调用
- 成本较高
- 延迟增加
食谱 3: 混合检索
适用场景: 需要结合语义和关键词搜索的任务
python
并行检索:
├─ 语义检索(向量相似度)
├─ 关键词检索(BM25)
└─ 其他元数据检索
结果融合:
├─ 去重
├─ 重排序
└─ 加权组合优点:
- 更全面的检索
- 提高召回率
- 减少遗漏
缺点:
- 实现复杂
- 计算成本增加
食谱 4: 情境化RAG
适用场景: 需要理解用户背景和意图的任务
python
1. 分析用户背景
2. 提取上下文信息
3. 根据背景调整查询
4. 执行定制化检索
5. 生成个性化响应应用例子:
- 个性化推荐
- 上下文敏感的答案
- 多轮对话系统
食谱 5: 层级化RAG
适用场景: 处理大规模知识库的任务
查询
↓
粗粒度检索(文档层面)
↓
细粒度检索(段落层面)
↓
超细粒度检索(句子层面)
↓
生成响应优点:
- 能处理大规模数据
- 精度更高
- 灵活性强
关键技术
1. 文档处理
原始文档
↓
清洁和规范化
↓
分割成块
↓
向量化
↓
存储在向量数据库2. 查询理解
- 意图识别 - 理解用户的真实意图
- 实体提取 - 识别关键实体
- 查询扩展 - 扩展查询以提高召回率
- 查询改写 - 改进查询的表述
3. 排序和重排
| 方法 | 描述 | 适用场景 |
|---|---|---|
| 相似度排序 | 按向量相似度排序 | 基础排序 |
| 相关性重排 | 使用学习排序模型 | 提高准确性 |
| 多维排序 | 考虑多个因素 | 复杂查询 |
| 动态排序 | 根据上下文调整 | 自适应系统 |
4. 结果融合
python
融合策略:
- 简单合并:直接组合所有结果
- 加权融合:使用权重组合结果
- 排名融合:基于排名融合
- 投票融合:基于多数投票评估指标
检索质量
- 召回率(Recall) - 检索到相关文档的比例
- 精准率(Precision) - 检索到的文档中相关的比例
- MRR(平均倒数排名) - 相关文档的排名位置
- NDCG(归一化折扣累积收益) - 考虑排名的综合指标
生成质量
- 答案准确性 - 答案是否正确
- 完整性 - 是否涵盖所有方面
- 相关性 - 与查询的相关程度
- 清晰度 - 表述是否清楚
系统性能
- 延迟 - 响应时间
- 成本 - API调用和存储成本
- 吞吐量 - 每秒处理的查询数
实现建议
选择合适的食谱
简单查询 → 基础RAG
复杂查询 → 多步RAG
需要完整性 → 混合检索
需要个性化 → 情境化RAG
大规模数据 → 层级化RAG优化策略
性能优化
- 使用批处理
- 缓存检索结果
- 异步处理
成本优化
- 优化块大小
- 减少不必要的检索
- 使用更便宜的模型
质量优化
- 精心设计检索查询
- 优化排序方法
- 迭代改进提示
常见陷阱
- ❌ 检索垃圾,输出垃圾(GIGO)
- ❌ 过度检索导致成本过高
- ❌ 忽视相关性评估
- ❌ 不处理信息冲突
- ❌ 忽视隐私和安全问题
最佳实践
- 清晰定义 - 明确定义检索的目标
- 质量评估 - 定期评估系统性能
- 持续改进 - 基于评估结果改进
- 成本监控 - 跟踪和优化成本
- 文档维护 - 保持知识库最新
高级话题
- 多模态RAG(文本、图像、代码)
- 动态知识库更新
- 多语言RAG
- 隐私保护的RAG
- 实时数据融合
下一步
- 学习
05_prompt_programs.md- 编程化的提示设计 - 探索
06_schema_design.md- 结构化设计 - 研究
07_recursive_patterns.md- 递归模式
相关资源
- RAG论文和研究
- 向量数据库工具
- 检索方法论文
- 大型语言模型微调指南