企业中对RAG的优化方案

news2024/11/26 8:49:30

企业中对RAG的优化方案

  • RAG优化:检索、语义和生成方面的提升
    • RAG流程
    • 一、数据处理优化
      • 数据清洗
      • 实际案例
    • 二、检索方面优化
      • 向量库检索
      • 倒排索引数据库检索
    • 三、生成方面优化
      • 调整Prompt
    • 四、架构优化
      • RAG+Agent架构
      • Self-RAG架构
      • Agentic RAG架构
    • 总结

RAG优化:检索、语义和生成方面的提升

在现代企业应用中,不同业务场景的需求多种多样,因此采用合适的检索模式和工具至关重要。本文将探讨RAG(Retrieval-Augmented Generation)在数据、检索、生成、架构四个方面的不同选择和优化。

RAG流程

在这里插入图片描述

一、数据处理优化

数据清洗

高性能RAG系统依赖于准确且清洁的原始知识数据。一方面为了保证数据的准确性,我们需要优化文档读取器和多模态模型。特别是处理如CSV表格等文件时,单纯的文本转换可能会丢失表格原有的结构。因此,我们需引入额外的机制以在文本中恢复表格结构,比如使用分号或其他符号来区分数据。另一方面我们也需要对知识文档做一些基本数据清洗其中可以包括:

a)基本文本清理:规范文本格式,去除特殊字符和不相关信息。除重复文档或冗余信息。

b)实体解析:消除实体和术语的歧义以实现一致的引用。例如,将“LLM”、“大语言模型”和“大模型”标准化为通用术语。

c)文档划分:合理地划分不同主题的文档,不同主题是集中在一处还是分散在多处?如果作为人类都不能轻松地判断出需要查阅哪个文档才能来回答常见的提问,那么检索系统也无法做到。

d)数据增强:使用同义词、释义甚至其他语言的翻译来增加语料库的多样性。

e)用户反馈循环:基于现实世界用户的反馈不断更新数据库,标记它们的真实性。

f)时间敏感数据:对于经常更新的主题,实施一种机制来使过时的文档失效或更新。

实际案例

在处理录音转文字的项目中,由于录音环境嘈杂、人员众多,导致转文字效果不理想,常出现语义歧义、停顿词和重复词等问题。为解决这一问题,我们采用了大模型对转换后的文字内容进行重新整理,确保文字语义清晰、一致,然后再进行后续处理。

二、检索方面优化

在实际项目中,常见的检索方案有两种:

向量库检索

向量库检索适用于将各种数据类型转换为向量进行查询。此方法通过将不同数据表示为高维向量,使得在复杂、多样化的数据中能更快速、准确地找到相关内容。

倒排索引数据库检索

倒排索引数据库适合处理大量纯文本数据。此方法通过预先建立文本索引,提高检索效率和准确性,特别是在处理大规模文本数据时效果显著。

三、生成方面优化

调整Prompt

优化生成内容的关键在于调整prompt。市面上有许多prompt调优的教程,但我认为最实用的是OpenAI官方指南(OpenAI Prompt Engineering),中文文档说明OpenAI官方的Prompt工程指南:你可以这么玩ChatGPT。许多教程都是基于此指南,因此熟悉官方指南是提升生成效果的基础。

客户需求:他们有大量文档(比如10万份),希望模型只基于这些文档进行知识检索。
解决方案:

  1. 直接将PDF和docx文件嵌入,准确率是45%。
  2. 经过20次调优迭代,解决细节小Bug - 准确率到65%
  3. 基于规则进行优化,譬如先判断问题属于什么领域(退一步思考),然后再回答,效果提升到85%
  4. 发现数据里有一些是结构化数据(如表格),为此定制提取解决,准确率提升到98%

四、架构优化

RAG+Agent架构

1.RAG的局限性
RAG最初是为简单问题和小型文档集设计的,它通常包括数据解析、索引检索和简单的问答。然而,它在处理更复杂的问题时存在局限性,例如总结整个年度报告、比较问题、结构化分析和语义搜索等。

2.Agent的引入
为了解决RAG的局限性,文档提出了引入Agent的概念。Agent是一种更高级的系统,它能够执行多轮对话、查询/任务规划、工具使用、反思和记忆维护等更复杂的功能。

3.从RAG到Agent的转变
提到了从RAG到Agent的转变,这涉及到增加以下几个层次的功能:

  • 多轮对话:与用户进行更深入的互动。

  • 查询/任务规划层:能够理解并规划复杂的查询和任务。

  • 工具接口:与外部环境进行交互,使用工具来辅助任务执行。

  • 反思:能够自我评估并改进执行过程。

  • 记忆:维护用户交互的历史,以提供个性化服务。

4.Agent的不同层次
从简单到高级Agent的不同层次,包括:

  • 简单Agent:成本较低,延迟较低,但功能有限。

  • 高级Agent:成本较高,延迟较高,但提供更复杂的功能,如动态规划和执行。

5.ReAct
ReAct(Reasoning + Acting with LLMs),这是一个结合了推理和行动的LLM系统,它利用查询规划、工具使用和记忆来执行更复杂的任务。

6.LLMCompiler
一个Agent编译器,用于并行多功能规划和执行,它通过生成步骤的有向无环图(DAG)来优化任务执行。

7.自我反思和可观察性
Agent能够通过自我反思和反馈来改进执行,同时提供可观察性,以便开发者能够追踪和理解Agent的行为。

8.多Agent系统
多Agent系统的概念,其中多个Agent可以同步或异步地交互,以执行更复杂的任务。

Self-RAG架构

在业务复杂或问题复杂的场景下,可以考虑引入Agent或使用Self-RAG架构。Self-RAG是一种引入反思机制的RAG,流程如下:
在这里插入图片描述

  1. 从知识库中检索出结果后,评估其与用户提问的相关性。
  2. 如果不相关,则改写查询并重复RAG流程,直到相关度评分达到要求。

实现Self-RAG需要以下两个组件:

  1. 基于Graph的任务编排系统。
  2. 在Graph内执行的必要算子。例如,在Self-RAG中,评分算子至关重要。可以通过训练一个打分模型来针对检索结果评分,或者采用LLM(Large Language Model)进行评分,以简化系统开发并减少对各类环节的依赖。

Self-RAG是相对初级的Agentic RAG,实践证明,Self-RAG对较复杂的多跳问答和多步推理可以明显提升性能。

Agentic RAG架构

它可以根据用户提问的不同意图采用对应的策略:
开放域问答:直接通过 LLM 产生答案而无需依赖 RAG 检索。
多跳问答:首先将多跳查询分解为更简单的单跳查询,重复访问 LLM 和 RAG 检索器来解决这些子查询,并合并它们的答案以形成完整答案。

自适应检索:适用于需要多步逻辑推理的复杂问题。复杂的问答往往需要从多个数据源综合信息并进行多步推理。自适应检索通过迭代地访问 RAG 检索器和 LLM,逐步构建起解决问题所需的信息链。

如下图所示,Adaptive-RAG 的工作流程与 Self-RAG 类似,只是在前面增加了一个查询分类器,就提供了更多种对话的策略选择。

在这里插入图片描述

总结

本文探讨了如何优化RAG系统在检索、语义和生成方面的性能。强调了数据清洗和增强的重要性,包括文本格式规范、实体解析、文档划分、数据多样性和用户反馈。检索优化包括向量库和倒排索引数据库两种方案。生成优化关键在于调整prompt,推荐使用OpenAI官方指南。针对客户需求,通过迭代调优和规则优化,提升了基于文档的知识检索准确率。介绍了RAG+Agent架构,Agent能执行复杂功能,如多轮对话和任务规划。Self-RAG架构引入反思机制,通过任务编排系统和必要算子提升性能。Agentic RAG架构根据不同意图采用策略,如开放域问答和自适应检索,以解决复杂问题。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Django】网上蛋糕项目商城-热销和新品

概念 本文将完成实现项目的热销和新品两个分类的商品列表进行分页展示。 热销和新品功能实现步骤 在head.html头部页面中点击这两个超链接向服务器发送请求。 在urls.py文件中定义该请求地址 path(goodsrecommend_list/,views.goodsrecommend_list) 在views.py文件中定义g…

mac配置hdc

首先需要找到 .zshrc 文件: 访达进入到user文件夹中,shiftcommand.键显示隐藏文件: 双击打开进行编辑,在最后添加 //HDC_HOME 指的是hdc的绝对路径,要替换成自己的路径 export HDC_HOME/Users/你的名字/Library/Huaw…

系统架构设计师 - 计算机网络(1)

计算机网络 计算机网络TCP/IP 协议簇TCP与UDP ★★★DHCP与DNS ★★★DNS 协议应用DHCP 协议应用 网络规划与设计逻辑设计与物理设计 ★★★★逻辑网络设计物理网路设计 层次化网络设计网络冗余设计 网络存储 ★★网络存储方式磁盘阵列 - Raid 大家好呀!我是小笙&am…

二刷算法训练营Day45 | 动态规划(7/17)

目录 详细布置: 1. 139. 单词拆分 2. 多重背包理论基础 3. 背包总结 3.1 背包递推公式 3.2 遍历顺序 01背包 完全背包 详细布置: 1. 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单…

北大西洋横断面(ANT)项目计划

North Atlantic Transect (ANT) program 简介 - **🗺️ 北大西洋横断面计划 (ANT) 概述** 北大西洋横断面计划 (ANT) 是一个由美国资助的 GEOTRACES 项目,旨在测量非洲海岸沿线的海洋化学参数。该计划收集了有关海水中的溶解氧、营养盐、碳酸盐离子、微…

STM32第八课:Su-03t语音识别模块

文章目录 需求一、SU03T语音识别模块二、模块配置流程1.固件烧录2.配置串口和传输引脚3.中断函数4.double类型转换5 数据发送6.接收处理 三、该模块完整代码总结 需求 基于上次完成空气质量传感器,利用SU03T语音识别模块,实现空气质量的语音问答播报。 …

240622_昇思学习打卡-Day4-ResNet50迁移学习

240622_昇思学习打卡-Day4-ResNet50迁移学习 我们对事物的认知都是一点一点积累出来的,往往借助已经认识过的东西,可以更好地理解和认识新的有关联的东西。比如一个人会骑自行车,我们让他去骑摩托车他也很快就能学会,比如已经学会…

STM32开发方式的演变与未来展望

一、STM32开发方式的演变 自2007年STM32微控制器首次亮相以来,其开发方式经历了从寄存器到标准库,再到HAL(硬件抽象层)的演变。 1.寄存器开发(2007年-2010年代初) 最初,由于初期缺乏足够的软…

Cyuyanzhong的内存函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、memcpy函数的使用与模拟实现二、memmove函数的使用和模拟实现三、memset函数与memcmp函数的使用(一)、memset函数(内存块…

Qt creator实现一个简单计算器

目录 1 界面设计 2 思路简介 3 代码 目录 1 界面设计 ​2 思路简介 3 代码 3.1 widget.h 3.2 widget.c 4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作,能实现简单的计算器功能。 1 界…

.NET使用CsvHelper快速读取和写入CSV文件

前言 在日常开发中使用CSV文件进行数据导入和导出、数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入。 CsvHelper类库介绍 CsvHelper是一个.NET开源、快速、灵活、高度可配置、易于使用的用于读取和写入C…

Spring Boot集成vavr快速入门demo

1.什么是vavr? 初闻vavr,感觉很奇怪,咋这个名字,后面看到它的官网我沉默了,怀疑初创团队付费资讯了UC震惊部如何取名字,好家伙,vavr就是java这四个字倒过来,真的是’颠覆’了java……

如何成为-10x工程师:反向教学大数据开发实际工作中应如何做

10x 工程师可能是神话,但 -10x 工程师确实存在。要成为 -10x 工程师,只需每周浪费 400 小时的工程时间。结合以下策略: 目录 如何使 10 名工程师的输出无效化改变需求大数据开发示例 创建 400 小时的繁忙工作任务示例大数据开发示例 创建 400…

心理辅导平台系统

摘 要 中文本论文基于Java Web技术设计与实现了一个心理辅导平台。通过对国内外心理辅导平台发展现状的调研,本文分析了心理辅导平台的背景与意义,并提出了论文研究内容与创新点。在相关技术介绍部分,对Java Web、SpringBoot、B/S架构、MVC模…

Unable to get expected results using BM25 or any search functions in Weaviate

题意:使用 Weaviate 中的 BM25 或任何搜索函数都无法获得预期结果 问题背景: I have created a collection in Weaviate, and ingested some documents into the Weaviate database using LlamaIndex. When I used the default search, I found that it…

高精度除法的实现

高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …

Chrome导出cookie的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

备份SQL Server数据库并还原到另一台服务器

我可以将SQL Server数据库备份到另一台服务器吗? 有时您可能希望将 SQL数据库从一台服务器复制到另一台服务器,或者将计算机复制到计算机。可能的场景包括测试、检查一致性、从崩溃的机器恢复数据库、在不同的机器上处理同一个项目等。 是的&#xff0c…

Vue+Proj4Leaflet实现地图瓦片(Nginx代理本地地图瓦片为网络url)加载并实现CRS投影转换(附资源下载)

场景 Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件): Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)_offline map maker-CSDN博客 Leaflet快速入门与加载OSM显示地图: Leaflet快速入门与…

等保测评练习卷14

等级保护初级测评师试题14 姓名: 成绩: 判断题(10110分) 1. 方案编制活动中测评对象确定、测评指…