RAG(Retrieval-Augmented Generation)优化

RAG流程

RAG是通过检索来增强生成模型的能力:将用户的查询与检索过程中获取的文档见解直接整合到prompt里,输入给语言模型。基本流程如下:

  1. 加载并解析文档
  2. 切割文档为文本片段
  3. 文本片段向量化(embeddings)
  4. embeddings存入数据库
  5. 用户Query -> 检索数据库 -> 带有检索结果信息的Prompt -> LLM -> 回复

https://mp.weixin.qq.com/s/HzxxH9_Ip9rFuzO20jN6WQ

输入接口:意图捕获的精密闸门

RAG系统的成败始于用户查询的精准捕获。原始输入需经历三重净化:

  1. 语义清洗:剥离口语化冗余(如“那个…呃…”),提取核心意图
  2. 上下文注入:自动关联用户历史(如客服场景中过往工单记录)
  3. 路由决策:根据意图分类选择检索策略(知识问答/代码生成/报告摘要)
    工业级实践:银行风控系统通过正则匹配器识别“转账”类查询,自动附加账户安全协议到上下文,使欺诈拦截率提升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,重构性价比公式。

后处理模块:输出优化的精密车床

此阶段执行四项关键操作:

  1. 幻觉过滤:通过NLI模型检测矛盾陈述
  2. 引用溯源:自动关联知识片段与来源页码
  3. 风格规整:企业术语库统一表述(如“营收”→“营业收入”)
  4. 安全合规:实时扫描敏感内容(GDPR/HIPAA)
    合规案例:制药企业RAG添加不良反应自动报告器,FDA审计通过率100%。

可观测体系:系统健康的CT扫描仪

生产环境需监控五大黄金指标:

  1. 检索召回率@K:Top3片段覆盖真值比例
  2. 幻觉密度:每百词虚构内容数量
  3. 上下文利用率:有效Token占比
  4. 决策时延分解:检索/生成分段耗时
  5. 衰减曲线:知识新鲜度随时间劣化
    调试真相:某电商系统通过时延分解发现90%延迟源于向量库IO瓶颈。

评估框架:持续进化的核心引擎

超越人工评估的自动化闭环:

  • 事实核查器:基于知识图谱的三元组验证(主体-谓词-客体)
  • 压力测试集:包含对抗样本(如矛盾文档注入)
  • 用户行为埋点:会话放弃率/点赞比实时反馈
    创新方案:采用LLM-as-Judge架构,GPT-4作为裁判评估自身输出,节省70%人工审核成本。

智能体集成:能力升维的虫洞

当RAG与智能体融合:

  • 多跳检索:串联跨知识库查询(先查税法再核案例)
  • 工具交响:检索结果触发API调用(股票数据→图表生成)
  • 记忆宫殿:将会话状态向量化存储
    革命性案例:AWS客服智能体通过RAG+Lambda函数,实现“故障诊断→资源调配→账单减免”全自动流程。

核心故障解剖台

90%生产事故根源分析:

42%
31%
18%
9%
响应错误
原因诊断
分块策略失效
检索噪声污染
提示误导
模型缺陷

血泪教训:某金融机构因未更新分块策略,新财报格式导致风险分析全面失效,损失$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

Embedding模型

检索后排序Rerank

问题:有时,最合适的答案不一定排在检索的最前面
优化:先检索召回一部分文本,再通过一个排序模型对 query 和 document 重新打分排序
在这里插入图片描述
Rerank 的 API 服务

混合检索(Hybrid Search)

问题:传统的关键字检索(稀疏表示)与向量检索(稠密表示)各有优劣。比如文档中包含很长的专有名词,关键字检索往往更精准而向量检索容易引入概念混淆。
优化:需要结合不同的检索算法,来达到比单一检索算法更优的效果。这就是混合检索。混合检索的核心是,综合文档在不同检索算法下的排序名次(rank),为其生成最终排序
在这里插入图片描述

RAG-Fusion

RAG-Fusion 就是利用了 RRF 的原理来提升检索的准确性
原始项目(一段非常简短的演示代码)在这里插入图片描述

### Retrieval-Augmented Generation (RAG) 介绍 检索增强生成(Retrieval-Augmented Generation, RAG)是一种用于优化大型语言模型输出的技术,使这些模型可以在生成响应前引用其训练数据源之外的权威知识库[^2]。 #### 原理 RAG 的核心原理是在生成文本的过程中引入外部信息。具体来说,在接收到一个问题或提示时,系统首先评估是否有必要执行检索操作。如果有,则会从预先定义的知识库中查找多个相关的文档片段。随后,这些文档被用来辅助生成更精确、更有依据的回答。此过程不仅限于简单的拼接已有的文字;相反,它涉及复杂的自然语言理解和生成机制,确保最终产出既忠实于原始资料又流畅自然[^3]。 #### 实现方式 实现 RAG 主要分为几个阶段: - **预处理**:准备高质量的知识库供后续检索使用。 - **检索模块**:当接收输入后,决定是否启动检索流程,并挑选出若干候选文件片断。 - **多文档理解与摘要提取**:并发解析所选中的各个文档部分,提炼有用信息。 - **排序选择最佳回应**:综合考虑上下文连贯性和准确性等因素,选出最适合的答案返回给用户。 此外,还有一种变体称为KG-RAG,即结合了知识图谱技术的版本,进一步增强了系统的语义理解和关联发现能力。 #### 应用场景 得益于能动态访问最新资讯的特点,RAG 特别适合应用于那些需要持续更新专业知识域的应用场合,比如医疗咨询、法律服务等领域。同时,在教育辅导方面也展现出巨大潜力——可以即时获取教科书级解释说明,帮助学习者更好地掌握知识点[^4]。 ```python def rag_process(query): """ 模拟一个简化版的RAG工作流 参数: query (str): 用户提出的查询请求 返回: str: 经过RAG处理后的回答 """ # 判断是否需要检索 need_retrieve = decide_if_need_retrieval(query) if not need_retrieve: return generate_answer_directly(query) documents = retrieve_documents(query) processed_docs = parallel_process(documents) best_response = select_best_response(processed_docs, query) return best_response def decide_if_need_retrieval(query): """模拟决策逻辑""" pass def retrieve_documents(query): """模拟文档检索功能""" pass def parallel_process(documents): """并行处理多个文档""" pass def select_best_response(candidates, original_query): """基于一定标准筛选最优答案""" pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

frostmelody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值