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与数字化转型”进入社群交流

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web3探索加密世界:什么是空投?

随着加密货币行业的迅速发展,人们开始听说各种各样的术语,其中包括"空投"(Airdrop)。在这里,我们将深入探讨什么是空投,以及它在加密世界中扮演的角色。 什么是空投? 空投是指在加密…

2.18号c++

1.菱形继承 1.1 概念 菱形继承又称为钻石继承,是由公共基类派生出多个中间子类,又由多个中间子类共同派生出汇聚子类。汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。 问题: …

使用 GitHub Codespaces 加速 Elixir 开发环境工作速度

文章目录 前言加速 Elixir 开发环境参考 前言 使用 Elixir 开发点小玩意的时候,面对经常需要走外网下载依赖 (Elixir 的镜像站 UPYUN 使用有时候也经常抽风) 的时候,为了避免需要不断的进行网络代理配置,有想到之前经常使用 GitHub Codespac…

Spring两大核心思想:IOC和AOP

目录 IOC:控制反转 Ioc概念 Ioc的优点 Spring Ioc AOP:面向切面编程 AOP的优点 Spring AOP 1.添加依赖 2.核心概念 3.通知的类型 4.切点表达式 5.公共切点 pointCut 6.切面优先级 Order 7.使用自定义注解完成AOP的开发 Spring AOP实现有几种方式? S…

【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 类的6个默认成员函数 构造函数 特性 析构函数 特性 析构的顺序 拷贝构造函数 特性 常引用 前言 &…

家用电器液位开关有哪些

在当代家庭中,随着科技的进步和生活水平的提升,各种智能化家用电器成为家庭生活的重要组成部分。这些家用电器如空调、除湿机、加湿器、洗碗机、净水器等,在运作过程中往往需要对液体的高低位进行精确控制,以保证其正常、高效的运…

SpringBoot + Nacos 实现动态化线程池

1.背景 在后台开发中,会经常用到线程池技术,对于线程池核心参数的配置很大程度上依靠经验。然而,由于系统运行过程中存在的不确定性,我们很难一劳永逸地规划一个合理的线程池参数。 在对线程池配置参数进行调整时,一…

BioTech - 交联质谱 (Crosslinks) 的常见数据格式说明

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/136190750 交联质谱 (Crosslinking Mass Spectrometry,Crosslinks) 技术 是一种结合化学交联剂和质谱仪的方法,用于研究蛋…

第十篇:node处理404和服务器错误

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录</

Vue3+vite搭建基础架构(10)--- 使用less和vite-plugin-vue-setup-extend

Vue3vite搭建基础架构&#xff08;10&#xff09;--- 使用less和vite-plugin-vue-setup-extend 说明官方文档安装less测试less表达式安装vite-plugin-vue-setup-extend 说明 这里记录下自己在Vue3vite的项目使用less来写样式以及使用vite-plugin-vue-setup-extend直接定义组件…

【8】知识加工

一、概述 对信息抽取/知识融合后得到的“事实”进行知识推理以拓展现有知识、得到新知识。 知识加工主要包括三方面内容&#xff1a;本体构建、知识推理和质量评估。 二、本体构建 1.本体 定义&#xff1a;本体是用于描述一个领域的术语集合&#xff0c;其组织结构是层次结…

设计模式四:适配器模式

1、适配器模式的理解 适配器模式可以理解为有两个现成的类Adaptee和Target&#xff0c;它们两个是不能动的&#xff0c;要求必须使用B这个类来实现一个功能&#xff0c;但是A的内容是能复用的&#xff0c;这个时候我们需要编写一个转换器 适配器模式 Adaptee&#xff1a;被适…

Java Web(一)--介绍

Java Web 技术体系图 三大组成部分&#xff1a; 前端&#xff1a; 前端开发技术工具包括三要素&#xff1a;HTML、CSS 和 JavaScript&#xff1b;其他高级的前端框架&#xff0c;如bootstrap、jquery&#xff0c;VUE 等。 后端&#xff1a; 后端开发技术工具主要有&am…

剑指offer刷题笔记-链表

少年何妨梦摘星 敢挽桑弓射玉衡 解决与链表相关的问题总是有大量的指针操作&#xff0c;而指针操作的代码总是容易出错的。很多面试官喜欢出与链表相关的问题&#xff0c;就是想通过指针操作来考察应聘者的编码功底。 题目链接来自于 AcWing 、Leetcode&#xff08;LCR&#xf…

燃气企业须知 :智慧燃气信息化管理平台的作用 ?

关键词&#xff1a;智慧燃气、燃气信息化、智慧燃气平台、智慧燃气建设、智慧燃气解决方案 智慧燃气信息化管理平台通过城市输气管网作为主要基础&#xff0c;各个终端用户进行协调&#xff0c;依托信息化数据进行管理&#xff0c;从而让整个工作环节流程达到高效智能优势。通…

【LeetCode】树的BFS(层序遍历)精选6题

目录 1. N 叉树的层序遍历&#xff08;中等&#xff09; 2. 二叉树的锯齿形层序遍历&#xff08;中等&#xff09; 3. 二叉树的最大宽度&#xff08;中等&#xff09; 4. 在每个树行中找最大值&#xff08;中等&#xff09; 5. 找树左下角的值&#xff08;中等&#xff09…

leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…

数论 - 博弈论(Nim游戏)

文章目录 前言一、Nim游戏1.题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 2.算法 二、台阶-Nim游戏1.题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 2.算法 三、集合-Nim游戏1.题目描述输入格式输出格式数据范围输…

vue使用Nprogress进度条功能实现

下图中的这种顶部进度条是非常常见的&#xff0c;在vue项目中有对应的插件&#xff1a;Nprogress。 实现效果&#xff1a; csdn也在使用&#xff1a; 或者这样自己使用 1、安装 NProgress可以通过npm安装。 npm install --save nprogress 注意此处的--save等同于-s,就是将…

echats 时间直方图示例

需求背景 某订单有N个定时任务&#xff0c;每个任务的执行时间已经确定&#xff0c;希望直观的查看该订单的任务执行趋势 查询SQL&#xff1a; select UNIX_TIMESTAMP(DATE_FORMAT(exec_time,%Y-%m-%d %H:%i)) execTime, count(*) from order_detail_task where order_no 2…