第九节:RAG进阶和Advanced RAG简介

一. RAG进阶

1. RAG流程回顾

 加载文件 => 读取文本 => 文本分割 =>文本向量化 =>存入向量数据库 =>问句向量化 =>在文本向量中匹配出与问句向量最相似的 top k 个 =>匹配出的文本作为上下文和问题一起添加到 prompt 中 =>提交给 LLM 生成回答

2. RAG存在的问题

A. 文本向量构建索引的过程中:

  • 加载过程:输入原始文档 --> 文档分割 --> 向量处理存入数据库

  • 内容缺失:  原本的文本中就没有问题的答案

  • 文档加载准确性和效率 比如pdf文件的加载,如何提取其中的有用文字信息和图片信息等

  • 文档切分的粒度 文本切分的大小和位置会影响后面检索出来的上下文完整性和与大模型交互的token数量,怎么控制好文档切分的度,是个难题。

B. 检索增强回答的过程中

  • 查询过程: 用户提交问题 --> 查询重写器对问题进行重新表述 --> 检索器去数据库检索相关内容 --> 对检索的块进行重排生成列表 --> 合并整理列表中的块 --> 读取合并之后的块 --> 生成响应返回给用户

  • Missed Top Ranked: 错过排名靠前的文档,获取的并不是排名靠前的。

  • Not in Context: 提取上下文与答案无关

  • 格式错误:  例如需要Json,给了字符串

  • 答案不完整: 答案只回答了问题的一部分

  • 未提取到答案: 提取的上下文中有答案,但大模型没有提取出来

  • Incorrect Specificity: 答案不够具体或过于具体

3. RAG优化

(1) 内容缺失

 A. 增加响应的知识库

   B. 更好的prompt设计:大模型在找不到答案的情况下,输出“根据当前知识库,无法回答该问题”(不让他胡乱回答)等提示

(2) 文档加载的准确性和效率

   优化文档读取器,针对不同格式(html、word、pdf等),采用专门的读取器,比如:langchain中,读取网页,采用WebBaseLoader

(3) 文档切分粒度

   通常采用 langchain_text_splitters 进行递归分割,保持分割块间有一定的重叠量

(4) 错过排名靠前的文档

重排方案:首先检索出 topN 个知识块(N > K,过召回),然后再对这 topN 个知识块进行重排序,取重排序后的 K 个知识块当作上下文。重排是利用另一个排序模型或排序策略,对知识块和问题之间进行关系计算与排序

(5) LLM提取的上下文与答案无关

   内容缺失 或 错过排名靠前文档 的具体表现

(6) 格式错误

   优化prompt,让LLM返回正确的格式

(7) 答案不完整

   精简问题,一次只提一个,然后可以拆分成多个小问题进行提问

 

 

二. Advanced RAG简介

1.  说明

 Advanced RAG重点聚焦“检索增强”,即优化Retrieval阶段,增加了预检索(Pre-Retrieval) 后检索(Post-Retrieval) 阶段。

 

2.  预检索过程

   最常用的预检索方式,就是优化索引,通常有:摘要索引、父子索引、假设性问题索引、元数据索引、混合索引。

 

3.  后检索过程

   后检索过程主要是:重新排序和压缩上下文。

 

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2026-04-24 09:12  Yaopengfei  阅读(42)  评论(0)    收藏  举报