企业中对RAG的优化方案

企业中对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.mzph.cn/pingmian/37156.shtml

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

相关文章

Vue-cli搭建一个项目

目录 vue-cli搭建项目 主要的功能 需要的环境 用 HbuilderX 搭建 vue-cli 项目 1、创建一个vue项目(2.6.10) 2、组件路由 首先:安装 其次: 1.在src文件夹下创建router目录,创建index.js 2.使用路由——在App.vue中添加路由视图 3.在main.js 中…

WavRx:新型语音健康诊断模型

近年来,语音作为一种有前景的疾病诊断和远程健康监测手段已经出现。语音健康诊断通常基于这样一个假设:即影响发音和/或呼吸系统的疾病会导致人类语音信号中出现非典型模式。这种异常可能由多种原因造成,例如神经肌肉控制受损或声道和肺部发炎…

【Android面试八股文】Framework面试:Handler怎么进行线程通信的?原理是什么?

文章目录 Handler整体思想Handler工作流程Handler工作流程图总结Handler整体思想 在多线程的应用场景中,将工作线程中需更新 UI 的操作信息 传递到 UI 主线程,从而实现 工作线程对 UI 的更新处理,最终实现异步消息的处理。 Handler工作流程 Handler 机制的工作流程主要包括…

【云服务器介绍】选择指南 腾讯云 阿里云全配置对比 搭建web 个人开发 app 游戏服务器

​省流目录:适用于博客建站(2-4G)、个人开发/小型游戏[传奇/我的世界/饥荒](4-8G)、数据分析/大型游戏[幻兽帕鲁/雾锁王国]服务器(16-64G) 1.京东云-618专属活动 官方采购季专属活动地址&#x…

Ubuntu多显示器设置不同缩放比例

Ubuntu多显示器设置不同缩放比例 设备问题解决方案 设备 笔记本屏幕分辨率为2560 \times 1600,外接显示器的分辨率为3840 \times 2160。 问题 Ubuntu默认的显示器设置中,缩放仅能选择100%,200%,300%,400%。假…

页分裂和页合并——Java全栈知识(33)

上篇文章我们讲到了 MySQL 的数据页,我们说到了 InnoDB 的索引是以 B树的形式构建的,而且 B树的节点都是一个数据页。 但是 B树在使用过程中难免会有节点分裂和节点合并的过程。 因为我们是以数据页为基本单位构造的 B树,那么 B树的节点分裂和…

真正的IDEA在线版有多好用

前言 在上一篇文章使用过TitanIDE的VS Code在线版以后,尝到了不少甜头,紧接着又去使用了他的在线版IntelliJ IDEA,同样非常惊艳,不需要任何时间去适应这款云原生开发工具,事不宜迟,马上开整 这才是真正的VS Code在线版…

Qt | windows Qt6.5.3安卓环境搭建成功版(保姆级教程)

01、第一章 Qt6.5.3安装 资源 Qt 国内下载地址清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/Qt 阿里云盘下载Qt 安卓开发https://www.alipan.com/s/kNaues6CHaG点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极…

锂电池的串并联特性

1节锂电池电芯的规格是10000mah,4v(总能量10000*4) 那么3节电芯串联电池的规格是10000mah,12v(总能量10000*12)注意,这里电池的规格不是30000mah 3节电芯并联的规格是30000mah,4v …

【Linux进阶】windows和linux文件互传的两种方式

前言 我们在windows电脑上使用ssh工具(比如Xshell)来远程登录并使用linux云服务器的时候,难免要将我们的文件传输到linux服务器上,或者将linux服务器的文件传输到我们的windows电脑里,那么,我们要怎么来实…

Springboot Mybatis 多数据源配置以及使用

在Spring Boot中配置MyBatis的多数据源是一个常见需求,尤其是在需要连接多个数据库时,下面是详细的步骤指南。 引入依赖 首先,在你的pom.xml文件中添加Spring Boot、MyBatis和数据库连接的相关依赖。例如,如果你使用的是MySQL数…

Java集合实例

一、什么是Java集合实例: 指的是在 Java 程序中创建和使用的集合对象,这些对象用于存储和操作数据。Java 集合框架提供了一系列的接口和实现类,用于管理不同类型的数据集合。 二、Java集合的主要实例类型: 1. List(列…

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展,激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率,还为相关行业带来了革命性的变革。在这篇博客中,我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…

蒙特卡洛法求定积分方

对于连续函数密度函数,求某一个区间的概率时,理论上通过积分获取, 以求曲线围成的面积为例 当我们在[a,b]之间随机取一点x时,它对应的函数值就是f(x)。接下来我们就可以用f(x)*(b-a)来粗略估计曲线下方的面积,也就是我…

Logback-打印方法名及代码行号

背景 公司产品使用了logback作为日志输出框架,日志输出的pattern里配置了打印调用方法名及代码行号的配置,但是实际输出的日志方法名总是显示? 在强迫症的驱使下,开启了探秘之旅 Logback版本 1.2.3 项目中Logging.pattern配置如下&#xff1…

Flutter循序渐进==>与基金mysql数据库交互

导言 债基基金的注意事项,别看收益不高,注意事项可真不少。最近买了CS一支基金,三周时间就亏掉两三个点(水平全网最差、赎回费和管理费全网最高)。就是冲着它的历史成绩去的,突然发现已经换了基金经理&…

【PHP项目实战训练】——后台-RBAC权限管理原理

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

awk的用法

目录 awk简述 awk的用法 选项 内置变量 命令格式 打印行号 打印指定行 打印奇偶行 按行取列 BEGIN打印模式 乘法计算 awk -v 变量赋值 awk的条件判断 面试题awk的三元表达式 awk的精确筛选 逻辑且、或关系 awk做小数运算 curl 练习 1.获取其中的所有子域名…

vivo 互联网自研代码评审 VCR 落地实践

作者:vivo 互联网效能平台团队- Chi Wei 本文介绍了vivo工程效能团队基于 Gitlab、Gerrit等开源工具搭建的VCR平台,代码评审idea插件开发及开发过程中遇到的挑战、困难,并分享了相应的应对策略和优化方案。 代码评审是软件质量保证一种活动&…

墨刀原型--多tab切换显示对应页面场景交互步骤

一般我们画原型页面,PC端或者APP端或小程序端,都会有页面会切换多个tab或状态,同时对应页面显示对应的页面数据。 设计思路如下: 以订单列表页面为例: 可以将订单列表页面分为3部分,固定的头部、状态栏、…