RAG流程
RAG是通过检索来增强生成模型的能力:将用户的查询与检索过程中获取的文档见解直接整合到prompt里,输入给语言模型。基本流程如下:
- 加载并解析文档
- 切割文档为文本片段
- 文本片段向量化(embeddings)
- embeddings存入数据库
- 用户Query -> 检索数据库 -> 带有检索结果信息的Prompt -> LLM -> 回复
https://mp.weixin.qq.com/s/HzxxH9_Ip9rFuzO20jN6WQ
输入接口:意图捕获的精密闸门
RAG系统的成败始于用户查询的精准捕获。原始输入需经历三重净化:
- 语义清洗:剥离口语化冗余(如“那个…呃…”),提取核心意图
- 上下文注入:自动关联用户历史(如客服场景中过往工单记录)
- 路由决策:根据意图分类选择检索策略(知识问答/代码生成/报告摘要)
工业级实践:银行风控系统通过正则匹配器识别“转账”类查询,自动附加账户安全协议到上下文,使欺诈拦截率提升40%。
检索器:知识定位的核心引擎
检索器本质是相关性匹配的时空穿越机:
- 向量化映射:将查询嵌入高维语义空间(如768维BERT向量)
- 近邻探索:通过HNSW算法在亿级向量中毫秒级定位Top-K片段
- 混合检索:融合关键词匹配(BM25)与语义搜索突破单一局限
性能拐点案例:某医疗RAG引入HyDE技术(假设性文档嵌入),先生成伪相关文档再检索,使罕见病诊断召回率从54%跃至89%。
向量数据库:动态记忆的立体仓库
核心挑战在于平衡存储密度与检索效率:
数据库类型 | 适用场景 | 性能瓶颈 |
---|---|---|
磁盘型 | 亿级知识库 | IO延迟(>50ms) |
内存型 | 高频交互场景 | 成本($/GB) |
混合架构 | 企业级应用 | 冷热数据调度 |
突破性设计:Pinecone的Serverless架构实现自动扩缩容,处理突发流量时延迟波动小于±7%。 |
分块策略:信息解构的艺术
劣质分块是RAG系统的隐形杀手,优化需遵循:
- 语义边界原则:按章节/段落切分而非固定长度
- 动态重叠机制:关键段落设置10-15%内容重叠(防上下文割裂)
- 元数据锚点:添加文档位置标识(如“##Chapter3.2.1”)
实证效果:法律合同解析系统采用递归分块法(先按条款再按句子),使关键条款检索精度达98%。
提示工程:认知对齐的翻译器
此环节是将机器可读数据转化为模型可理解的认知场景:
# 工业级提示模板示例
prompt = f"""
[角色设定] 资深金融分析师
[任务指令] 根据年报片段分析企业风险
[输入格式]
<年报>{context}</年报>
<查询>{query}</查询>
[输出要求] 按风险等级降序排列
"""
关键发现:添加XML式标签使模型理解效率提升32%,错误率降低64%。
LLM推理:生成质量的三维博弈
生成环节需在质量-成本-延迟三角中寻找最优解:
- 质量优先:GPT-4处理复杂推理(医疗/法律场景)
- 成本敏感:Mixtral-8x7B实现GPT-4的90%能力成本仅1/5
- 延迟敏感:Phi-2满足<800ms响应的实时系统
硬件革命:Groq LPU芯片使LLaMA3推理速度突破500token/s,重构性价比公式。
后处理模块:输出优化的精密车床
此阶段执行四项关键操作:
- 幻觉过滤:通过NLI模型检测矛盾陈述
- 引用溯源:自动关联知识片段与来源页码
- 风格规整:企业术语库统一表述(如“营收”→“营业收入”)
- 安全合规:实时扫描敏感内容(GDPR/HIPAA)
合规案例:制药企业RAG添加不良反应自动报告器,FDA审计通过率100%。
可观测体系:系统健康的CT扫描仪
生产环境需监控五大黄金指标:
- 检索召回率@K:Top3片段覆盖真值比例
- 幻觉密度:每百词虚构内容数量
- 上下文利用率:有效Token占比
- 决策时延分解:检索/生成分段耗时
- 衰减曲线:知识新鲜度随时间劣化
调试真相:某电商系统通过时延分解发现90%延迟源于向量库IO瓶颈。
评估框架:持续进化的核心引擎
超越人工评估的自动化闭环:
- 事实核查器:基于知识图谱的三元组验证(主体-谓词-客体)
- 压力测试集:包含对抗样本(如矛盾文档注入)
- 用户行为埋点:会话放弃率/点赞比实时反馈
创新方案:采用LLM-as-Judge架构,GPT-4作为裁判评估自身输出,节省70%人工审核成本。
智能体集成:能力升维的虫洞
当RAG与智能体融合:
- 多跳检索:串联跨知识库查询(先查税法再核案例)
- 工具交响:检索结果触发API调用(股票数据→图表生成)
- 记忆宫殿:将会话状态向量化存储
革命性案例:AWS客服智能体通过RAG+Lambda函数,实现“故障诊断→资源调配→账单减免”全自动流程。
核心故障解剖台
90%生产事故根源分析:
血泪教训:某金融机构因未更新分块策略,新财报格式导致风险分析全面失效,损失$2.3M。
工业级架构图
成熟RAG系统的协同范式:
用户输入 → 意图解析 → 混合检索 → 知识片段 → 动态提示 → LLM生成
↑ | ↓
向量库实时更新 ← 评估反馈 ← 可观测中枢
终极形态:NVIDIA的RAGAS框架实现GPU加速全链路,吞吐量达传统方案17倍。
结论:从组件到生命体
当十大组件深度协同,RAG系统将进化为具有代谢能力的知识生命体:
- 认知循环:每次交互沉淀为向量记忆
- 免疫系统:实时检测数据漂移与概念迁移
- 神经可塑:根据反馈动态重构分块策略
这标志AI工程从机械组装跃入有机进化时代,正如LangChain创始人强调:“未来三年,RAG系统的智能10%源于模型,90%生于架构”。
RAG需要注意的点
- 文档的读取和处理 (PDF PPT EXCEL等各种格式的文档)
- 如何把文档合理的分割成不同的 chunks 段落
- 如何合理的 embedding 向量化 ,使用什么样的向量数据库
- 对问题做一个扩充或重新改写(用户问题比较简段或与上下文无关)
- 检索的效率、命中率(用传统的搜索引擎技术)极大的影响后续 LLM 判断 粗排
- Ranking 精排
- prompt=问题+检索 Ranking 的整合 好的 prompt 能激发大模型更多的潜能
- 使用通用大模型还是开源大模型进行微调
- response 加入检查机制 是直接返回用户还是返回到某个阶段进行二次处理(违背了一些规范和要求)
- 可以使用 LlamaIndex 的 检索评估 模块迅速确定嵌入模型和重排器模型的最佳组合
检索评估中的指标
- 命中率:计算在查询中正确答案出现在检索到的前k个文档中的比例。简单来说,它关乎我们的系统在前几个猜测中正确答案出现的频率。
- 平均倒数排名(MRR):对于每个查询,MRR通过查看最相关文档的最高排名来评估系统的准确性。具体来说,它是所有查询中这些排名倒数的平均值。因此,如果第一个相关文档是顶部结果,倒数排名就是1;如果是第二个,倒数排名就是1/2,以此类推。
嵌入模型的性能
- OpenAI:展示了一流的性能,尤其是与CohereRerank 结合使用时(命中率0.926966,MRR 0.86573)和bge-reranker-large 结合使用时(命中率0.910112,MRR 0.855805),表明与重排工具的兼容性很强。
- bge-large:在使用重排器时体验到显著的性能提升,最佳结果来自 CohereRerank(命中率0.876404,MRR 0.822753)。
- llm-embedder:从重排中获益匪浅,尤其是与 CohereRerank 结合使用时(命中率0.882022,MRR 0.830243),这提供了显著的性能提升。
- Cohere:Cohere的最新v3.0嵌入性能优于v2.0,并且与原生CohereRerank集成后,显著提高了其指标,拥有0.88764的命中率和0.836049的MRR。
- Voyage:具有强大的初始性能,通过 CohereRerank 进一步增强(命中率0.91573,MRR 0.851217),表明对重排有很高的响应性。
- JinaAI:性能非常强,在使用 bge-reranker-large(命中率0.938202,MRR 0.868539)和 CohereRerank(命中率0.932584,MRR 0.873689)时看到了显著的增益,表明重排显著提升了其性能。
- Google-PaLM:该模型展示了强大的性能,在使用CohereRerank时有可衡量的增益(命中率0.910112,MRR 0.855712)。这表明重排为其整体结果提供了明确的提升。
重排器的影响 - 无重排器:这为每种嵌入模型提供了基线性能。
- bge-reranker-base:普遍提高了所有嵌入模型的命中率和MRR。
- bge-reranker-large:这个重排器经常为嵌入模型提供最高或接近最高的MRR。对于几种嵌入,它的性能与CohereRerank相媲美或超越了它。
- CohereRerank:在所有嵌入模型中一致性地增强了性能,通常提供了最佳或接近最佳的结果。
这些结果为这个特定数据集和任务提供了深入的性能洞察。然而,实际结果可能会因数据特性、数据集大小以及其他变量如chunk_size、similarity_top_k而有所不同。数据清楚地表明了重排器在优化搜索结果中的重要性。几乎所有嵌入模型都从重排中受益,显示出提高的命中率和MRR值。特别是CohereRerank
当考虑到命中率和MRR时,penAI + CohereRerank 和 JinaAI-Base + bge-reranker-large/CohereRerank 的组合作为顶级竞争者脱颖而出
RAG流程优化
文档解析
一些面向 RAG 的文档解析辅助工具
- PyMuPDF: PDF 文件处理基础库,带有基于规则的表格与图像抽取(不准)
- RAGFlow: 一款基于深度文档理解构建的开源 RAG 引擎,支持多种文档格式
- Unstructured.io: 一个开源+SaaS形式的文档解析库,支持多种文档格式
- LlamaParse:付费 API 服务,由 LlamaIndex 官方提供,解析不保证100%准确,实测偶有文字丢失或错位发生
- Mathpix:付费 API 服务,效果较好,可解析段落结构、表格、公式等,贵!
文本分割的粒度
问题:粒度太大可能导致检索不精准,粒度太小可能导致信息不全面
优化:按一定粒度,部分重叠式的切割文本,使上下文更完整
from nltk.tokenize import sent_tokenize
import json
def split_text(paragraphs, chunk_size=300, overlap_size=100):
'''按指定 chunk_size 和 overlap_size 交叠割文本'''
sentences = [s.strip() for p in paragraphs for s in sent_tokenize(p)]
chunks = []
i = 0
while i < len(sentences):
chunk = sentences[i]
overlap = ''
prev_len = 0
prev = i - 1
# 向前计算重叠部分
while prev >= 0 and len(sentences[prev])+len(overlap) <= overlap_size:
overlap = sentences[prev] + ' ' + overlap
prev -= 1
chunk = overlap+chunk
next = i + 1
# 向后计算当前chunk
while next < len(sentences) and len(sentences[next])+len(chunk) <= chunk_size:
chunk = chunk + ' ' + sentences[next]
next += 1
chunks.append(chunk)
i = next
return chunks
检索后排序Rerank
问题:有时,最合适的答案不一定排在检索的最前面
优化:先检索召回一部分文本,再通过一个排序模型对 query 和 document 重新打分排序
Rerank 的 API 服务
混合检索(Hybrid Search)
问题:传统的关键字检索(稀疏表示)与向量检索(稠密表示)各有优劣。比如文档中包含很长的专有名词,关键字检索往往更精准而向量检索容易引入概念混淆。
优化:需要结合不同的检索算法,来达到比单一检索算法更优的效果。这就是混合检索。混合检索的核心是,综合文档在不同检索算法下的排序名次(rank),为其生成最终排序。
RAG-Fusion
RAG-Fusion 就是利用了 RRF 的原理来提升检索的准确性
原始项目(一段非常简短的演示代码)