RAG的缺陷介绍

news/2025/3/12 12:10:55/文章来源:https://www.cnblogs.com/michael1102/p/18767171

RAG痛点问题分析论文

论文:《Seven Failure Points When Engineering a Retrieval Augmented Generation System》

地址:
https://arxiv.org/pdf/2401.05856
https://www.163.com/dy/article/JFONA200511D3QS.html

具体痛点问题总结

Index Process (文本向量化构建索引的过程):

  • Missing Content(内容缺失): 原本文本中就没有问题的答案
  • 文档加载准确性和效率:比如pdf文件的加载,如何提取其中的有用文字信息和图片信息等
  • 文档切分的粒度:文本切分的大小和位置会影响后面检索出来的上下文完整性和与大模型交互的token数量,怎么控制好文档切分的度,是个难题。

Query Process (检索增强回答的过程中):

  • Missed Top Ranked: 错过排名靠前的文档
  • Not in Context: 提取上下文与答案无关
  • Wrong Format (格式错误): 例如需要json,给了字符串
  • Incomplete(答案不完整): 答案只回答了问题的一部分
  • Not Extracted(未提取到答案): 提取的上下文中有答案,但大模型没有提取出来
  • Incorrect Specificity: 答案不够具体或过于具体

痛点问题策略分析

1.文档加载准确性和效率

优化文档读取器

一般知识库中的文档格式都不尽相同,HTML、PDF、Markdown、TXT、CSV等。每种格式文档都有其都有
的数据组织方式。怎么在读取这些数据时将干扰项去除(如一些特殊符号等),同时还保留原文本之间的关联关系
(如csv文件保留其原有的表格结构),是主要的优化方向。

目前针对这方面的探索为:针对每一类文档,涉及一个专门的读取器。如LangChain中提供的
WebBaseLoader专门用来加载HTML文本等。

网址:https://python.langchain.com/v0.1/docs/modules/data_connection/document_loaders/

2.数据清洗与增强

输入垃圾,那也必定输出垃圾。如果你的源数据质量低劣,比如包含互相冲突的信息,那不管你的RAG工作构建得多么好,它都不可能用你输入的垃圾神奇地输出高质量结果。这个解决方案不仅适用于这个痛点,任何RAG工作流程想要获得优良表现,都必须先清洁数据。

3.文档切分的粒度

粒度太大可能导致检索到的文本包含太多不相关的信息,降低检索准确性,粒度太小可能导致信息不全面,导致答案的片面性。问题的答案可能跨越两个甚至多个片段。

固定长度的分块
直接设定块中的字数,每个文本块有多少字。

内容重叠分块
在固定大小分块的基础上,为了保持文本块之间语义上下文的连贯性,在分块时,保持文本块之间有一定的内容重叠。

基于结构的分块
基于结构的分块方法利用文档的固有结构,如HTML或Markdown中的标题和段落,以保持内容的逻辑性和完整性。

基于递归的分块

重复的利用分块规则不断细分文本块。在langchain中会先通过段落换行符(\n\n)进行分割。然后,检查这些块的大小。如果大小不超过一定阈值,则该块被保留。对于大小超过标准的块,使用单换行符(\n)再次分割。以此类推,不断根据块大小更新更小的分块规则(如空格,句号)。

分块大小的选择

(1)不同的嵌入模型有其最佳输入大小。比如Openai的text-embedding-ada-002的模型在256或512大小的块上效果更好。

(2)文档的类型和用户查询的长度及复杂性也是决定分块大小的重要因素。处理长篇文章或书籍时,较大的分块有助于保留更多的上下文和主题连贯性;而对于社交媒体帖子,较小的分块可能更适合捕捉每个帖子的精确语义。如果用户的查询通常是简短和具体的,较小的分块可能更为合适;相反,如果查询较为复杂,可能需要更大的分块。

4.内容缺失

准备的外挂文本中没有回答问题所需的知识。这时候,RAG可能会提供一个自己编造的答案。

增加相应知识库

将相应的知识文本加入到向量知识库中。

数据清洗与增强

输入垃圾,那也必定输出垃圾。如果你的源数据质量低劣,比如包含互相冲突的信息,那不管你的RAG工作构建得多么好,它都不可能用你输入的垃圾神奇地输出高质量结果。这个解决方案不仅适用于这个痛点,任何RAG工作流程想要获得优良表现,都必须先清洁数据。

更好的Prompt设计

通过Prompts,让大模型在找不到答案的情况下,输出“根据当前知识库,无法回答该问题”等提示。这样的提示,就能鼓励模型承认自己的局限,并更透明地向用户传达它的不确定。虽然不能保证100%准确度,但在清洁数据之后,精心设计prompt是最好的做法之一。

5.错过排名靠前的文档

外挂知识库中存在回答问题所需的知识,但是可能这个知识块与问题的向量相似度排名并不是靠前的,导致无法召回该知识块传给大模型,导致大模型始终无法得到正确的答案。

增加召回数量
增加召回的topK数量,也就是说,例如原来召回前3个知识块,修改为召回前5个知识块。不推荐此种方法,因为知识块多了,不光会增加token消耗,也会增加大模型回答问题的干扰。

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

6.提取上下文与答案无关

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

7.格式错误

Prompt调优
优化Prompt逐渐让大模型返回正确的格式。

8.答案不完整

将问题分开提问:一方面引导用户精简问题,一次只提问一个问题。另一方面,针对用户的问题进行内部拆分处理,拆分成数个子问题,等子问题答案都找到后,再总结起来回复给用户

9.未提取到答案

提示压缩技术:网址:https://mp.weixin.qq.com/s/61LZgc1a5yRP2J7MTiVZ4Q

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897634.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.12 数字逻辑电路

1.时序逻辑电路 1.1 与组合逻辑电路(比如译码器,多路选择器,全加法器)的区别:时许逻辑电路可以存储信息 1.2 基本存储元件 1.2.1 RS锁存器(存储一个byte位的信息)(低电频使能) R:reset复位;S:set置位 R和S是两个输入端,A和B希望是两个取反状态 当S=0,表示要置位(低…

day:19 html实战

一、认识标签 1、标题标题 h1--h6 格式: <!doctype html>认识标签第一大标题 第二大标题 第三大标题 第四大标题 第五大标题 第六大标题 </body>2、常用标签 代码:常用标签段落标签,也叫p标签 斜体标签,也叫em标签 b标签,也是加粗 斜体标签 加粗标签 下划线 删…

Properties-读取配置文件中的内容

读取配置文件中的内容Properties-读取配置文件中的内容 新建子项目properties 修改POM 父POM中加上子项目module。子项目依赖父项目,打包方式jar。引入spring-boot-configuration-processor和lombok(Lombok 的安装与使用)spring-boot-configuration-processor的作用是生成配置…

matlab实现Arduino的PIL硬件仿真

使用 Arduino 硬件上的 PIL 进行代码验证和验证1. 尝试arduino的PIL程序例程-arduino_pil_bolck 1.1 准备安装包 安装arduino 硬件支持包安装编辑器MinG-w64 1.2实现步骤https: //ww2.mathworks.cn/help/simulink/supportpkg/arduino_ref/code-verification-and-validation-wit…

【设计模式】责任链模式教你如何优雅地分发任务

概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必…

macOS Sequoia 15.3.2 (24D81 | 24D2082) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.3.2 (24D81 | 24D2082) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.3.2 (24D81 | 24D2082) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org…

macOS Sequoia 15.3.2 (24D81) Boot ISO 原版可引导镜像下载

macOS Sequoia 15.3.2 (24D81) Boot ISO 原版可引导镜像下载macOS Sequoia 15.3.2 (24D81) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoi…

sublime 中文件夹名字不显示中文的配置

菜单栏:首选项 ---> 设置 用户 文件内容如下:{"auto_complete_triggers":[{"characters": " ","selector": "text.html"}],"color_scheme": "Packages/User/Monokai (SL).tmTheme","default_…

Apple Safari 18.3.1 发布 - macOS 专属浏览器 (独立安装包下载)

Apple Safari 18.3.1 发布 - macOS 专属浏览器 (独立安装包下载)Apple Safari 18.3.1 发布 - macOS 专属浏览器 (独立安装包下载) 适用于 macOS Sonoma 和 macOS Ventura 的 Safari 浏览器 18 请访问原文链接:https://sysin.org/blog/apple-safari-18/ 查看最新版。原创作品,…

带大家做了个 AI 项目,没想到这么简单!

现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来。大家好,我是程序员鱼皮,现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来。前几天我一时兴起,直播用 2 多个小时的时间,从需求分析开始,带大家做了一个 AI 海龟汤游戏项目…

No.57 Vue---模板语法

一、模板语法有了模板语法,页面的每个元素都可以动态处理了。 网址:https://cn.vuejs.org/src下面的文件:1.assets :存放静态资源 2.components:存放组件 3.App.vue:根组件,组件入口。 4.main.js :主入口文件。我们在HelloWorld.vue 文件中编写代码。可以把原来不需要的内…

阿里FPGA XCKU3P开箱

背景 淘了一个好玩的阿里FPGA加速卡,PCIe Gen3x8, SFP *2 最大25G,官方用来加速网络应用的,我拿到主要想用SFP 功能,来做一下CXP OVER FIVER 10G/25G的验证工作实验 连接JTAG,板子丝印有JTAG 线序名称,根据线序 连接即可,正常连接后就能看到FPGA XCKU3P,这是卡里面原有…