AGI|一篇小白都能看懂的RAG入门介绍!

目录

一、前言

二、LLM主要存在的问题

三、RAG 是什么?

四、RAG中的搜索器

(一)主要的检索技术

(二)知识库索引技术

五、RAG目前遇到的问题和展望


一、前言

随着近几年AIGC的发展,不仅是大模型自身在不断优化,相关支持应用也在不断涌现。本文的主角便是这些技术中较为引人注目的RAG(Retrieval-Augmented Generation)——检索增强生成技术。

LLM虽然已经在通识领域展现出了惊人的能力,但要落实到真正具体的问题解决,特别是针对专业领域,企业领域的一些具体的,私人的数据生成解决方案,仅仅依靠LLM还是远远不够的。

二、LLM主要存在的问题

//易产生幻觉

LLM底层的设计机制决定了它所生成的回答本质是基于概率的而非既定事实的,再加上LLM也缺乏自己校准自己生成内容的能力(这步工作往往是由人类来做),致使只要生成内容是符合它自己的语言逻辑的,就算内容与事实差了十万八千里,它也会毫不犹豫地输出,在人类看来就是一本正经地胡说八道。幻觉的问题不好从根源上去解决,因为这份概率性也是LLM得以展现出创新性的关键所在,但我们可以通过一些方法增加模型回答的准确性。

//模型训练数据的新鲜度不足

在使用chatgpt时它总会强调自己知道的知识范围只到2021年,这就使得LLM可以应用的场景大大减少。规模越大的模型,它的训练成本也更高,在成本有限的情况下我们无法无限制地使用最新的语料来更新大模型。

//数据安全

目前AI的隐私安全也是一个引起了广泛关注的话题,对于企业来说,是不可能把自己的私人企业数据上传到公网上的大模型的,但这样的话就无法借助大模型解决一些涉及企业数据的问题。

以上这些问题中,数据安全可以通过私有化部署的方式解决,而解决第一和第二个问题的钥匙便是RAG技术。

三、RAG 是什么?

在理解这个概念之前我们先要理解的是LLM为何会有上述问题,其核心原因在于LLM没有“固定的记忆”,模型本身只是众多参数与tokens的集合,没有搭载任何数据库。LLM在宏观上表现出的通识理解能力并不是因为它储存了通识知识,而是大量数据训练下它建立了自然语言特征向量之间的联系。

那么我们可以很自然地想到,只要给LLM外挂上数据库,是不是就可以解决问题了呢?事实上也是如此,只是具体操作起来没有字面上那么简单。RAG技术便是这个思路的具体操作范式。

Retrieval-Augmented Generation——检索增强生成,从字面进行拆解就是从已有的数据库中检索信息从而增强生成的效果。这个数据库指代的范围是广义的,不仅仅是关系型或非关系型数据库,还可以是外部知识图谱,外部应用或者搜索引擎。

如果说原本与大模型交互的方式是直接对LLM进行QA问答,那加入了RAG技术后我们其实是先在知识库中检索出了与问题相关的内容,然后将这些内容与问题一并提交给LLM,我们需要的是让LLM根据我们给出的内容来对问题做出回答,如下图所示。

四、RAG中的搜索器

RAG的一个核心便是搜索器,如果把RAG加成下的LLM问答看作是一场开卷考试,那构建更高效准确的搜索器决定了我们能给LLM的回答提供更优质的参考答案。

(一)主要的检索技术

//1.1 相似度检索

相似度检索是使用各种不同的相似度算法(如欧氏距离、余弦等)进行数据检索的一种技术。

在RAG流程中我们通过把问题Embedding为向量,去数据库中匹配与此问题相似度最高的几个内容片段。

//1.2 关键词检索

传统的一种检索方式,RAG所使用的外挂数据库不只是狭义的数据库,搜索引擎也可以成为真实数据的一种来源,对于部分数据,使用关键词检索会高效快速得多。

//1.3 SQL检索

对于企业来说,大部分私人数据的存储形式可能都是关系型数据库,因此SQL检索虽然方式比较基础,也是必不可少的一种检索形式。

(二)知识库索引技术

检索的质量不仅取决于检索技术及其相关优化程序,还取决于数据库本身是否更便于精确检索出我们想要的内容。对于庞大的数据而言,创建索引是提高检索精准度与效率的重要工作。

//2.1 数据分块

由于提交给LLM的问题是有长度限制的,因此当文本过长,或者检索内容仅有部分相关时,需要对文本进行分块。

//2.2 数据向量化

数据的向量化是将文本、图片、音频、视频等转化为向量矩阵的过程,也就是对数据库数据进行Embedding,存入向量数据库。

整个RAG流程如下图所示。

五、RAG目前遇到的问题和展望

1、依赖语义搜索。RAG的高效与准确取决于数据库语料的质量与索引方法,如果检索不到位或者没有高质量的知识文档,那RAG的优势是无法发挥出来的。

2、上下文长度限制。LLM一次性输入的长度限制有时会让我们不得不截断一些语料,致使在一次问答中能为LLM提供的事实资料是有限的,这可能会影响到生成结果的质量。

3、延迟问题。相比于通常的问答,RAG中存在着检索+组成prompt两个步骤,可能会造成一定的延迟,可能不适合依赖即时响应的场景。

RAG整体流程中从知识库索引到检索方式到生成,每一步都有大量的细节可供探讨与优化,相信未来会有更多基于RAG的衍生技术。

参考资料:

1、RAG (检索增强生成)技术详解:揭秘基于垂直领域专有数据的Chatbots是如何实现的 - 知乎

2、大模型应用一:RAG - 知乎

3、https://python.langchain.com/docs/use_cases/question_answering/

作者:王琪| 后端开发工程师

更多AI小知识欢迎关注“神州数码云基地”公众号,回复“AI与数字化转型”进入社群交流

版权声明:文章由神州数码武汉云基地团队实践整理输出,转载请注明出处。

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

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

相关文章

如何查看 CPU 占用高的进程

1、使用 top 命令,查看 cpu 占用超过 100% 2、查看哪个进程占用 cpu 最高(该案例使用阿里的 arthas 来查看) 2.1 下载:curl -O https://arthas.aliyun.com/arthas-boot.jar 2.2 启动命令:java -jar arthas-boot.jar …

【C语言的小角落】逻辑与逻辑或混合计算

关注小庄 顿顿解馋(≧◡≦) 引言:本篇博客小庄带领小伙伴们解决一个比较角落有时头疼的问题—关于逻辑与和逻辑或结合运算的问题,请放心食用~ 我们先放代码说话 int main() {int x 1;int y 3;int z 4;if(x1 || y && z){;} printf("y …

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

前言 Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带…

第十四章[面向对象]:14.1:类和实例

一,认识面向对象编程 1,什么是面向对象编程? 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 2,面向对象最重要的两个概念就是类(Class)和实例(Instance) 类是抽象的…

戴尔Dell R740服务器开机冒烟亮黄灯故障维修

今天分享的是一台过保修期的DELL PowerEdge R740服务器开机冒烟的维修案例。先上图: 接到用户报修后工程师立即响应,由于用户也是刚开工第一天服务器开机就出现了这种祥龙吐雾的祥兆,导致工厂业务流程无法正常使用,这台机器在东莞…

【Linux取经路】文件系统之重定向的实现原理

文章目录 一、再来理解重定向1.1 输出重定向效果演示1.2 重定向的原理1.3 dup21.4 输入重定向效果演示1.5 输入重定向代码实现 二、再来理解标准输出和标准错误2.1 同时对标准输出和标准错误进行重定向2.2 将标准输出和标准错误重定向到同一个文件 三、再看一切皆文件四、结语 …

RK3588平台开发系列讲解(视频篇)ffmpeg 的移植

文章目录 一、ffmpeg 介绍二、ffmpeg 的组成三、ffmpeg 依赖库沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ffmpeg 是一种多媒体音视频处理工具,具备视频采集功能、视频抓取图像、视频格式转换、给视频加水印并能将视频转化为流等诸多强大的功能。它采用 LGPL 或 G…

「Java同步原理与底层实现解析」

原理概要: java虚拟机中的同步基于进入与结束Monitor对象实现,无论是显式同步(同步代码块进入在jvm是根据monitorenter标志、结束是monitorexit标志,那最后一个是monitorexit是异常结束时被执行的释放指令)、隐式同步…

c++学习第十七讲---STL常用容器---list容器

list容器&#xff1a; 一、list基本概念&#xff1a; list容器&#xff1a;一个双向循环链表。 注&#xff1a;list和vector是两个最常用的容器&#xff0c;各有优缺点。 二、list构造函数&#xff1a; list<T> lst; //默认构造 list(b…

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库&#xff08;codeforces-go&#xff09; 算法竞赛模板库&#xff0c;为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现&#xff0c;助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…

【Kotlin】Kotlin流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…