RAG的流程图看优化

- 核心优化方向:完整RAG流程包含多个可优化组件,每个节点都是潜在的优化方向
关键组件详解:
文档切块策略:设置不同切块大小($ Chunk \times Size $)会影响最终检索效果,需考虑重叠($Overlap$)处理
嵌入策略:模型选择直接影响系统表现,除传统E5/BERT外,国内BGE等新型嵌入模型表现优异
文档检索器:不同检索器实现方式会显著影响系统最终效果
上下文生成:提示词工程(Prompt)设计是重要优化点
大模型选择:不同供应商模型(如DeepSeek与OpenAI)在特定任务上表现差异显著
评估维度:系统通过多指标评估模型表现,典型评分示例:
- 生成响应得分:0.91
- 评估响应得分:0.75
- 最佳模型得分:0.74
评估指标体系:
- 传统指标:BLEU/METEOR
- 新兴指标:BERT Score/ROUGE Score
- 专有系统:ABACUS.AI评估框架
更详细的图进行展示

- 系统化优化框架:形成从文档加载到评估的完整知识图谱
- 全流程技术分解:
- 预处理阶段:文档加载→分块优化(语义分块/智能分块)→嵌入→索引构建→向量数据库选型
- 检索阶段:查询优化(扩展/分解/澄清)→路由策略(逻辑路由/语义路由)→多路检索
- 后处理阶段:结果重排(时序加权)→压缩校正→主动生成
- 评估体系:量化指标包括BLEU/METEOR/BERT Score/ROUGE等
- 方法论特点:不仅指出问题节点,更提供具体优化技术如:
- 分层索引机制(LA mer index/Raptor策略)
- 多模态处理能力
- 模块化RAG架构
- 优化实施要点:
- 知识图谱构建:建立组件-方法映射关系,如检索前处理对应查询路由技术
- 问题定位能力:根据项目特征判断核心优化点(如分层索引需求或结果重排需求)
- 技术选型原则:
- 逻辑路由:按问题类型分配至关系型/向量数据库
- 语义路由:动态选择提示词模板(#1/#2)
- 时序加权:对近期访问内容增加检索权重
从总图看到优化点,接下来从以下环节细节点进行详细说明
文档加载

- 加载器类型:
- Unstructured加载器:支持txt/excel/csv等基础文件格式
- Json/XML加载器:处理结构化数据格式
- PDF加载器:支持PyPDF/Unstructured/PyMuPDF等多种解析引擎
- 解析关键:
- 复杂文件(如PDF)需要特殊解析处理,避免丢失原有结构
- 不同文件类型(如markdown)需保留其特有格式特征
- 常见问题:
- 不当解析会导致有价值的结构化信息变为”数据垃圾”
- 建议通过项目实践积累不同文档类型的处理经验
文档分块

- 分块必要性:
- 便于向量数据库存储和检索
- 错误分块会导致信息割裂(如GDP表格的表头与数值分离)
- 分块策略:
- 按字符/段落分割:基础但可能破坏语义连贯性
- 语义分块:智能识别内容边界(如代码按类/函数分割)
- 重叠分块:保留前后200字等上下文信息
- 优化效果:
- 合理分块可提升检索准确率30%以上
- 保持内容完整性(如表格数据与表头不分离)
- 特殊场景需定制分块规则(如金融报告中的表格处理)
嵌入

- 稀疏嵌入:如TF-IDF、BM25等传统方法,特征向量中大部分元素为0(例如”sat”: [1,0,0,0,0,0,0,0,0]),适合精确匹配场景
- 密集嵌入:如embed-multilingual-v3.0等现代模型,生成连续稠密向量(例如”cat”: [0.25,-0.73,0.91,0.12]),能捕捉语义相似性
- 专用嵌入:通过Fine-Tuning在特定领域(如医疗、法律)优化的模型,示例显示不同模型对同一词生成的向量差异($cat^2$[0.8,0,0,0,3,0,0,0,0] vs $cat^4$ [0.25,-0.73,0.91,0.12])
索引

- 父子文档索引:分块时建立层级关系,大文档与小文档分别存储,便于分层检索
- 分层索引:为每个块生成摘要形成summary块,检索时先定位摘要再关联细节块
- 多表示索引:同一文档用不同embedding模型生成多种向量表示(如bge-large-en和text-embedding-3-small),利用不同模型优势提升检索全面性
- 多向量检索器:将单个文档拆分为多个向量表示,适用于需要多维度表征的场景
向量数据库

- 核心功能:存储数十亿级向量并支持高效最近邻搜索(如Faiss/chroma/Elasticsearch)
- 索引算法:
- 近似最近邻算法:HNSW/LSH
- 量化技术:PQ/OPQ
- 工业级方案:Milvus/Weaviate/Qdrant/Pinecone
- 选型关键:根据数据规模选择合适索引,百万级与十亿级数据需要不同优化策略
查询构建

- 检索前处理:
- 查询重写:优化模糊查询(如”黑神话悟空设定”)
- HYDE技术:先生成假设文档再检索(示例:通过假设文档比较提升相关性)
- 查询分解:将复杂问题拆解为子问题(如”孙悟空师傅的弟子关系”)
- 查询路由:
- 向量数据库:处理语义查询(如游戏设定分析)
- 关系数据库:处理结构化查询(如”九月份销量统计”)
- 图数据库:处理关系网络查询(如人物关系图谱)
- 跨库查询:
- Text-to-SQL:自然语言转关系查询(示例:$Text-to-SQL$转换)
- Text-to-Cypher:自然语言转图查询(示例:$Text-to-Cypher$实现)
- 元数据过滤:结合语义和结构化条件进行混合检索
检索有处理

- 核心功能: 位于检索之后,对检索结果进行优化处理
- 处理对象: 检索到的文档集合(可能达200-1000个)
- 必要性: 避免将所有文档直接输入给大模型生成回答
主要处理方法
- 重排(Reranking)
- 方法选择: 可采用多种方法组合使用
- 典型技术:
- $RRF$(Reciprocal Rank Fusion)
- $CrossEncoder$
- $ColBERT$
- $RankGPT$
- $RankLLM$
- 压缩(Compression)
- 压缩依据: 基于文档相关性和冗余度
- 实现目标: 将文档压缩成小量级同时保留主要信息
- 技术代表:$RAG-Fusion$
- 校正(Validation)
- CRAG机制: 通过大模型判断检索结果可靠性
- 工作流程:
- 将检索文档输入大模型评估
- 不靠谱结果触发重新检索
- 实现方式: 需使用$LangGraph$等强大agent设计模式
- 状态转换: 从状态b校正后返回状态a重新检索
生成

- 阶段定位: RAG流程的最终环节
- 核心任务: 由大语言模型生成最终回答
关键考虑因素
- 模型选择:
- 推荐使用强大模型(如OpenAI的$GPT-4o$系列)
- 阿里$32B$模型等替代方案
- 输出控制:
- 格式解析($Pydantic$解析器)
- $JSON$模式处理
- 工具调用($Function/Tool Calls$)
主动生成机制
- 质量反馈: 基于回答质量判断是否需要:
- 查询重写
- 重新检索
- 迭代过程: 可反复执行检索-生成循环直至质量达标
评估

1.评估的重要性
- 定制化需求: 评估是RAG系统的重要环节,但现有评估标准较少,需要根据自身数据和系统特点制定个性化的评估方案
- 主观性挑战: 现有开源框架(如ragas)提供的忠实度、扎实性、安全性等指标过于主观,主要依赖大语言模型的提示词判断
2.量化评估方法
- 关键词匹配: 通过检查生成答案中是否包含特定关键词来量化评估
- 文档链接验证: 确认答案是否正确链接到具体文档编号或文档块
- 评估标准: 建立100%匹配具体文档/文档块的量化标准
3.评估指标选择
- 精确率(Precision): 关注检索结果中相关文档的比例
- 召回率(Recall): 关注系统检索到所有相关文档的能力
- F1分数: 精确率和召回率的调和平均数
- MAP/MRR: 适用于排序质量的评估指标
- P@K: 前K个结果的精确率
4.生成评估指标
- BLEU/ROUGE/METEOR: 文本生成质量的自动评估指标
- 忠实度评估: 检查生成内容与检索结果的一致性
- 数据集构建: 需要建立包含标准答案的评估数据集
5.评估实践建议
- 指标侧重: 根据应用场景选择侧重精确率或召回率
- 评估流程: 从简单数据集开始逐步构建完整的评估体系
- 持续优化: 评估结果应反馈用于改进检索和生成模块
高级RAG

- 图RAG(Graph RAG): 通过知识图谱增强系统,但存在冗余信息多、成本高、token消耗大等问题。知识图谱的关联性界定是当前主要挑战,但其对系统的加持效果毋庸置疑。
- 模块化RAG(Modular RAG): 采用模块化设计思路,便于系统扩展和维护。
- 自主RAG(Agentic RAG): 与Agent技术结合是必然趋势,探讨Agent在执行任务时如何实现RAG功能。
- 多模态RAG(Multi-Modal RAG): 支持多种数据模态的检索增强生成。
- 发展现状:
- 领域进展快速,部分技术昙花一现,部分将成为长期解决方案
- 图RAG是长期发展方向,但需解决实际应用中的效率问题
- Agent与RAG的结合是最值得关注的重点方向
- 实践建议:
- 需要区分短期热点和长期价值技术
- 关注知识图谱优化方法以降低计算成本
- 探索Agent场景下的RAG实现方案