RAG:让大语言模型拥有特定的专属知识

作为一个在Chatbot领域摸爬滚打了7年的从业者,笔者可以诚实地说,在大语言模型的推动下,检索增强生成(Retrieval Augmented Generation,RAG)技术正在快速崛起。
RAG的搜索请求和生成式AI技术,为搜索请求和信息检索领域带来了革命性的改变。RAG能够帮助大语言模型根据可靠的数据直接给出答案。

本文就来介绍一下RAG的技术原理,并和Fine-tuning(微调)进行对比,同时介绍RAG的周边要素——向量数据库。

值得一提的是,RAG原本属于Chatbot系统搭建中的重要一环,笔者把RAG提前到生命周期部分中来讲述的原因是在数据处理和Prompt撰写的过程中,需要对 RAG 有基础的了解。

为什么有了大语言模型还需要RAG

ChatGPT的出现,使越来越多的开发者开始深入探索大语言模型在实际生产中的应用效果,尤其关注如何搭建一个拥有专属知识的大语言模型应用。

在开始RAG的介绍前,笔者先介绍大语言模型在当下的能力边界。

  1. 大语言模型的能力

(2)逻辑推理的能力:大语言模型具有一定的逻辑推理能力,无须额外增加任何特殊提示词,就能做出简单的推理,并挖掘出问题的深层内容。在补充了一定的提示词后,大语言模型能展现更强的推理能力。

(3)尝试回答所有问题的能力:特别是对话类型的大语言模型,如GPT-3.5、GPT-4,会尝试以对话形式回答用户的所有问题。大语言模型面对无法准确回答的问题,就算回答“我不能回答这个信息”,也会努力给出答案。

(4)通用知识的能力:大语言模型本身拥有海量的通用知识,这些通用知识的准确度较高,覆盖范围广泛。

(5)多轮对话的能力:大语言模型可以根据设定好的角色,理解不同角色之间的多次对话的含义,这意味着可以在对话中采用追问的形式,而不是每一次对话都要把之前所有的关键信息重复一遍。

  1. 大语言模型的限制

(1)被动触发:大语言模型是被动触发的,即需要用户输入或给出一段内容,大语言模型才会回应。大语言模型无法主动发起交互。

(2)知识过期:特指GPT-3.5和GPT-4,二者的训练数据都截至2021年9月,意味着大语言模型不知道之后的知识。

(3)细分领域的幻觉:虽然大语言模型在通用知识部分表现优秀,但在特定知识领域(如垂直的医药行业),大语言模型的回答往往存在错误,无法直接采信。

(4)对话长度:如果给大语言模型提供的内容过多,超过模型字符长度的限制,则该轮对话会失败。

  1. 用户的常见需求

希望搭建Chatbot的企业,通常期望用大语言模型实现以下功能。

采取多轮对话的形式,理解用户的提问并回答。

要求准确地回答关于企业的专属知识。

不能回答与企业专属领域知识无关的内容。

可以发现,虽然大语言模型有上下文推理能力,但由于大语言模型存在“知识过期”和“细分领域的幻觉”这两个限制,且它会尽可能地尝试回答所有的问题,因此只是单纯地使用大语言模型是没有办法解决所有问题的,RAG正是在这个背景下应运而生的。

RAG的技术原理

在RAG出现之前,早期的问答系统主要依赖预定义的规则和模板,以及简单的关键词匹配技术。知识图谱的出现,为问答系统带来了一定的改进,但这些系统仍然依赖固定的数据结构和知识库,限制了系统处理复杂问题的能力发展。

大语言模型出现后,尤其是ChatGPT的出现,显著提高了机器对自然语言的理解能力,大语言模型在大量文本上进行预训练后,能够生成更自然、更准确的语言。

RAG结合了信息检索和文本生成两种方法,旨在突破传统问答系统的局限。通过将外部数据检索的相关信息输入大语言模型,大语言模型能够基于这些信息生成回答,进而增强答案生成的能力。RAG能够处理更广泛、更复杂的问题。

使用RAG后可以有效解决大语言模型细分领域的幻觉和知识过期的问题。通过预检索模块,无需一次性向大语言模型输入过多的知识,大部分知识都可以用外部数据库承载,解决了当前大语言模型对话长度受 Token限制的问题。

值得注意的是,在生成回答时,RAG 系统不是简单地复制检索到的信息,而是在综合并加工这些信息,这使最终的回答既准确又具有一定的原创性。这一点是RAG区别于其他简单问答系统的关键。

  1. RAG的核心组件

RAG主要有两个核心组件:信息检索和文本生成。

信息检索

信息检索(Retrieve)的主要任务是在一个大型的知识库或文档集合中搜索与用户提出的问题相关的信息。这个过程类似人在图书馆中查找相关书籍以回答某个问题。通常,这一步骤依赖传统的信息检索技术,如倒排索引、TF-IDF评分、BM25算法等,或者采用更现代的基于向量的搜索方法。

虽然让大语言模型拥有特定领域的知识就要外挂向量数据库已经成为业内共识,但其实不只是向量数据库,所有外部存储的内容都可以被检索,再进行二次生成。

文本生成

文本生成(Generate)的职责是根据检索到的信息生成一个连贯、准确的回答。这个过程可以看作根据收集到的材料撰写一篇简短的文章或回答。

这个功能通常采用预训练的生成式语言模型来实现,如GPT系列。这些模型在大量文本上进行预训练,能够生成流畅且语义连贯的文本。

信息检索和文本生成两个组件的紧密结合至关重要。信息检索为文本生成提供了必要的原料,而文本生成则将这些原料转化为易于理解和有用的信息。这种结合使得RAG能够处理更复杂的查询,并生成更准确、更丰富的回答。

值得注意的是,在进行检索之前,对数据的处理也非常重要。通常,外部数据不仅存储在数据库中,也可能存储在外部文档(PDF、Markdown、Word、Excel等)或网页中。这时,需要对所有外部数据进行清洗和处理,同时需要提取一些元数据,包括文件名、时间、章节、图片等。

另外,仅加载外部文件是不够的。通常,外部文件非常大,而且Embedding模型和大语言模型都有长度限制,这时就需要将文件进一步切割成文本块(Chunk),才能精准地进行检索和生成。根据索引方式的不同、模型选择的不同,以及问答文本长度和复杂度的不同,切割的方法也有不同,简单的数据处理的流程如图1所示。笔者会在第10章对数据处理进行更详细的介绍。

在这里插入图片描述

图1

  1. RAG的工作流程

首先,通过检索系统引导大语言模型从外界数据库中查找与问题相关的文档或段落;然后,重新构建输入大语言模型的内容。最后,使用大语言模型在此基础上生成符合检索系统规定格式的答案。简而言之,RAG被视为模型的“外挂数据库”,以优化其回复。

为了让读者有完整的结构概览,结合数据处理流程和RAG流程,可以将RAG的工作流程简化为图2所示的形式。接下来将重点介绍RAG的工作流程。

在这里插入图片描述

图2

最基础的RAG

最基础的RAG流程如图3所示。

在这里插入图片描述

图3

(1)接收查询:系统收到用户的问题或查询。

(2)检索相关信息:系统查询一个或多个外部知识库,查找与该问题相关的信息或文档。

(4)提供回应:系统将生成的回答呈现给用户。

增加预处理查询的RAG

在用户提问环节,可以对问题进行进一步的预处理和理解查询,具体流程如图4所示。

(1)问题预处理:系统先对用户输入进行预处理,如文本清洗、标准化等,确保输入数据的质量。

(2)理解查询:系统运用自然语言处理技术理解查询的内容和意图。这个环节可以利用传统自然语言处理技术中的知识领域和意图识别,即根据用户的提问选择不同数据库中的内容,甚至可以对应不同匹配阈值及操作,具体细节本节不再详述。

在这里插入图片描述

图4

带有聊天历史的RAG

在实际对话中,用户和Chatbot的交流往往不是一句话,而是多句话,且上下文之间有指代关系。例如,用户说了两句话:

李佳芮是句子互动的创始人。

她今年多大了?

如果系统逐句处理接收的信息,则无法确定句子中的“她”指的是谁。系统需要将两句话结合起来,才能正确理解用户的提问是“李佳芮多大了”。

在这个例子中,除了对问题进行基础的预处理,还有一步重要的操作就是把之前的历史记录输入系统。通用的做法之一是让大语言模型将当前的问题和先前的问题结合,使用Prompt 引导大语言模型重写用户的问题,这样做可以有效地解决指代消除的问题。具体流程如图5所示。

在这里插入图片描述

图5

增加自动排序的RAG

尽管增加了聊天的历史记录,但由于在数据处理环节中系统内切割成的块数量很多,系统检索的维度不一定是最有效的,因此一次检索的结果在相关性上并不理想。这时,需要一些策略对检索的结果进行重新排序,或者重新调整组合相关度、匹配度等因素,使其更适合业务的场景。

对此,通常会设置内部触发器进行自动评审,触发自动重排序的逻辑,具体流程如图6所示。

在这里插入图片描述

图6

上述几个案例只是简单的RAG扩展说明,系统搭建章节会展示一个完整的案例。需要注意的是,在很多中间环节都可以根据具体场景加入各种工程化实现,满足真实的应用场景。在某些应用中,即使在最后的环节也不代表RAG技术的完成。用户的反馈可以进一步优化RAG的性能,例如用户评价回答质量的信息可以用来训练和改进模型。

RAG在Chatbot中的应用

RAG 技术在 Chatbot 应用中有非常重要的作用,尤其是在提高回应的相关性和准确性、处理复杂查询及增强个性化和上下文理解能力方面。

  1. 提高回应的相关性和准确性

(1)基于检索的信息丰富性:RAG 技术的检索组件可以从大量的知识库中检索与用户提问相关的信息。这意味着Chatbot可以访问更多的数据点,从而提供更丰富、更准确的回答。例如,当用户询问关于某个历史事件的细节时,RAG 技术能够从多个来源中检索相关信息,确保回答的全面性和准确性。

(2)文本生成组件的语境适应能力:RAG 的文本生成组件不仅是简单地重复检索到的信息,还能根据上下文生成适当的回答。这意味着即使利用同样的信息源,对不同的问题,生成的回答也会有所不同,这能确保回应与用户的查询高度相关。

(3)数据质量和过滤机制:Chatbot 中的 RAG 技术通常配备高质量的数据源,并使用过滤机制来确保检索到的信息是可信和准确的。这降低了生成错误信息的风险,提高了回应的准确性。

  1. 处理复杂查询

(1)信息聚合能力:对于复杂的查询,RAG 技术能够从不同的信息源中聚合数据。这意味着它可以综合多个观点或信息片段,提供一个全面的回答。例如,回答关于气候变化影响的复杂问题时,RAG能够综合科学研究、统计数据和专家意见等多方面的信息。

(2)上下文感知和连续对话能力:RAG技术在处理复杂查询时还具备上下文感知的能力。这意味着它可以理解并利用对话的历史和上下文信息,更好地处理多轮对话中的复杂查询。

  1. 增强个性化和上下文理解能力

(1)个性化回答:RAG技术能够根据用户的历史交互和偏好提供个性化的回答。例如,如果系统知道用户对某个特定主题有深入的了解,则可以提供有关该主题的更深入的回答。

(2)上下文追踪能力和长期记忆:Chatbot中的RAG系统通常具有上下文追踪能力和一定程度的长期记忆。这意味着它们能够记住用户过去的提问和回答,以便在未来的交互中提供更相关和连贯的回答。

(3)情感识别:RAG 技术可以整合情感识别功能,使 Chatbot 能够根据用户的情绪调整其回答的风格和内容。这增加了交互的个性化,使其更人性。

RAG技术在Chatbot中的应用极大地提高了回应的相关性和准确性,使得处理复杂查询成为可能,并显著增强了个性化与上下文理解的能力,为用户提供了更丰富、更自然、更个性化的交互体验,推动了Chatbot技术的发展。

RAG面临的挑战

当然,RAG并非无所不能,当前仍然有以下技术难点需要持续优化。

(1)检索与生成的协同工作:检索到的内容与生成的内容能否紧密结合是一个关键问题。

(2)计算效率:执行检索和生成这两个步骤可能导致系统响应延迟,使整个系统的运行速度变慢,因此对时间敏感的应用而言,RAG可能不太适用。

(3)数据噪声:外部检索的数据可能带有噪声,这会影响生成内容的准确性。

未来,RAG会在法律、教育、商业等方向上有非常多的应用。值得一提的是,在某一特定语言风格(如鲁迅的语言风格)、模型本身的价值观倾向等方面,还需要类似 Fine-tuning的技术来优化大语言模型。

更多关于RAG及大模型时代下从0到1构建Chatbot的内容,欢迎阅读《Chatbot从0到1(第2版):对话式交互实践指南》一书!

↑限时五折优惠↑

在这里插入图片描述

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

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

相关文章

【教学类-45-06】正确 X-Y之间的三连加减题混合 (竖向排列)(44格:11题“++ ”11题“--”11题“ +-”11题“ -+” )

作品展示: 背景需求: 把以下四款3连题 混在一起,每种题目随机抽取11题,一共44格 出现问题: 1、- 、-里面有重复题 2、升序排列最好竖排展示 素材准备: ​ ​ 问题改正 1、单元格修改:确保竖列写入 …

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

C# WPF 数据绑定

需求 后台变量发生改变,前端对应的相关属性值也发生改变 实现 接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。 示例 示例一 官方示例代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using Sys…

spring boot + mybatis + websocket + js实战

项目技术:spring boot mybatis websocket js 需求背景:当添加一个女孩时,页面的socket收到消息,打印最新的所有女生list,这样可以进一步在react/vue前端框架下,实现当A用户新增了某业务数据后&#xff…

迅为RK3568开发板Android11/12/Linux编译驱动到内核

在平时的驱动开发中,经常需要在内核中配置某种功能,为了方便大家开发和学习,本小 节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。 Android11 源码如果想要修改内核,可以运行以下命令进行修改: cd ke…

ffmpeg 视频分辨率修改 质量压缩

随着手机像素的提高,拍摄视频也越来越大,10秒的视频动辄 二三十兆,这给视频传输和播放都带来了 诸多不变。一般都需要 前端或或者后端 对视频进行压缩。由于我这边前端是 H5,所以只能后端进行压缩, 采用主流压缩库采用…

centOS系统yum安装和卸载mongodb

0.1 什么是mongodb? 0.2 Mongodb是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 0.3 Mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据…

现代密码学 考点复盘

现代密码学 考点汇总(上) 写在最前面考试范围一、给一个简单的方案,判断是否cca安全二、随机预言机模型之下的简单应用 考试题目1.证明CBC方案是CPA安全的2. 证明哈希函数的抗碰撞性3. CBC-MAC安全:证明CPA安全的对称密钥加密方案…

使用git submodule解决高耦合度问题

引言 在开发我的笔记系统时,我遇到了一个问题。问题是,在api-gate服务中,我需要验证用户的access_code,但是access_code的生成逻辑是在auth2服务中实现的。这个问题从架构设计的层面上看,就是一个高耦合度问题。高耦合…

大数据 - Doris系列《三》- 数据表设计之表的基本概念

目录 🐶3.1 字段类型 🐶3.2 表的基本概念 3.2.1 Row & Column 3.2.2 分区与分桶 🥙3.2.2.1 Partition 1. Range 分区 2. List 分区 进阶:复合分区与单分区的选择 3.2.3 PROPERTIES 🥙3.2.3.1 分片副本数 &#x1f…

正则表达式、文件访问(Python实现)

一、主要目的: 1.了解正则表达式的基本概念和处理过程。 2.掌握使用正则表达式模块 Re 进行字符串处理的方法。 3.了解文件的基本概念和类型。 4.掌握在 Python 中访问文本文件的方法和步骤。 5.熟悉在 Python 中访问二进制文件的方法和步骤。 二、主要内容和结…

【小白专用】C# 连接 MySQL 数据库

C# – Mysql 数据库连接 1. 配置环境 #前提:电脑已安装Mysql服务; Visual Studio 安装Mysql依赖库: 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索, 安装Mysql.Data (Oracle); (安装成功后&…

常用的网站

PIXEL MOTION 注册-YesPMP平台 模型下载 - Ourblender - 专业的三维素材库 Vega AI 创作平台 夏沫的AI小站 Tripo AI B站视频下载工具 | 极简纯净

视频监控录像服务器(中心录像服务器)功能详细介绍

目 录 一、概述 (一)定义 (二)视频监控中心录像服务器 二、存储策略服务 (一)存储策略配置 1、 录入页面 2、 选择需要进行录像的视频 3、批量选择多个通道号 4、其他关键参数…

rime中州韵小狼毫 敏感词脱敏滤镜

快速录入,是任何一个输入法,以及输入人员(无论是否专业)的追求目标之一。现实中,由于各种输入法在录入文本时,都无法完全避免重码的问题,所以在输入过程中都或多或少的需要进行选字/选词操作。这…

Redis不同环境缓存同一条数据,数据内部值不同

背景 现实中,本地环境(dev)和开发环境(feature)会共同使用相同的中间件(本篇拿Redis举例),对于不同环境中的,图片、视频、语音等资源类型的预览地址url,需要配…

【C#】使用 LINQ 中的 Skip() 和 Take()进行分页,为什么要分页,分页作用是什么

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

mysql定时备份shell脚本和还原

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言数据库备份分类mysqldump命令备份计划1.每日备份,保留30天备份文件2.每月1号备份,保留12个月备份文件 定时调度还原总结 前言 数据库备…

创建并美化Github主页(内含组件)

目录 1、创建仓库 2、美化 1、包含多种 2、活动统计图 3、资料奖杯 4、文字的打字特效 5、中文网站卡片 6、贪吃蛇贡献图 7、可参考的页面 最近有想要写开源的打算了,计划了好久好久好久,不知道写啥(目前仍然不知道)…… 俗话说人活一张脸&#xff0…

一台Linux服务jdk1.6 与 jdk1.8 并存,tomcat6+tomcat8 并存

Linux jdk1.6,1.8 tomcat6 tomcat8 并存 需求场景: 有一个项目 原来是 jdk1.6tomcat6 部署的,现在需要进行项目架构升级 项目需要适配jdk1.8 然后用 jdk.8 tomcat 8进行部署,然后下架 jdk1.6 的linux服务 现在有一台 jdk.8 tomcat 8的linu…