RAG:检索增强生成系统如何工作

news2024/11/26 15:45:18

随着大型语言模型(LLM)的发展,人工智能世界取得了巨大的飞跃。经过大量数据的训练,LLM可以发现语言模式和关系,使人工智能工具能够生成更准确、与上下文相关的响应。

但LLM也给人工智能工程师带来了新的挑战,从LLM基准测试到监控。工程师可以求助的最佳选择之一是检索增强生成(RAG)。 RAG 系统通过检索和总结 LLM 最初未接受过培训的上下文相关信息来增强(即增强)LLM 表现。

这很重要,因为培训使LLM具备世界知识、一些常识和来自互联网文档的一般信息。LLM的一个经典应用是聊天机器人或更高级的对话式人工智能助手,它们可以响应有关特定领域信息的查询,而不会出现幻觉(创造不正确或与上下文无关的答案)。

但这种训练过程有时意味着LLM无法接触到他们所需的所有信息。知识也会随着时间而改变。那么,LLM如何回答有关其尚未观察到的不断变化的信息的问题呢?在这些情况下,我们如何减少人工智能产生幻觉的可能性?

这些都是 RAG 帮助我们解决的困境。

什么是检索增强生成(Retrieval Augmented Generation)?

检索增强生成(RAG)是一种生成式人工智能方法,通过将世界知识与定制或私人知识相结合来提高LLM的表现。这些知识集正式分别称为参数记忆和非参数记忆[1]。 RAG 中知识集的这种组合很有帮助,原因如下:

  • 向LLM提供最新数据:LLM培训数据有时不完整。随着时间的推移,它也可能变得过时。 RAG 允许添加新的和/或更新的知识,而无需从头开始重新培训LLM。
  • 防止人工智能幻觉:LLM掌握的上下文信息越准确和相关,他们编造事实或断章取义的可能性就越小。
  • 维护动态知识库:可以随时更新、添加、删除或修改自定义文档,从而使 RAG 系统保持最新状态,而无需重新培训。

了解了 RAG 的用途后,让我们更深入地了解 RAG 系统的实际工作原理。

RAG 系统的关键组件及其功能

RAG系统通常由两层组成:

  • 由嵌入模型和向量存储组成的语义搜索层
  • 由 LLM 及其相关提示组成的生成层(也称为查询层)

这些层帮助 LMM 检索相关信息并生成最有价值的答案。

图 1 显示了 RAG 系统如何将新信息分层到LLM已知的世界知识中。要查看 RAG 应用于实际用例的示例,请查看我们如何为金融服务公司构建安全的 AI 助手。

语义搜索层

语义搜索层包含两个关键组件:嵌入模型和向量存储或数据库。这些组件共同使语义搜索层能够:

  • 通过收集自定义或专有文档(例如 PDF、文本文件、Word 文档、语音转录等)来构建知识库。
  • 阅读这些文档并将其分割成较小的部分,通常称为“块”。
  • 将块转换为嵌入向量,并将向量与原始块文本一起存储在向量数据库中。

值得研究一下嵌入模型和向量存储如何使语义搜索成为可能。通过理解查询的意图和上下文含义(即语义)而不是仅仅寻找字面关键字匹配来丰富搜索。

嵌入模型(Embedding model )

嵌入模型负责对文本进行编码。他们将文本投影为相当于原始文本语义的数字表示形式[2],如图 2 所示。例如,句子“嗨,你好吗?”可以表示为 N 维的数值(嵌入)向量 [0.12, 0.2, 2.85, 1.33, 0.01, ..., -0.42]。

这说明了关于嵌入的一个关键要点:表示具有相似含义的文本的嵌入向量倾向于在 N 维嵌入空间内聚集在一起。

嵌入模型的一些示例包括 OpenAI 的 text-embedding-ada-002、Jina AI 的 jina-embeddings-v2 和 SentenceTransformers 的多 QA 模型。

向量存储

向量存储是用于处理高维数据表示的专用数据库。它们具有针对向量的高效检索而优化的特定索引结构。

开源向量存储的一些例子包括 Facebook 的 FAISS、Chroma DB,甚至带有 pgvector 扩展的 PostgreSQL。向量存储可以位于内存中、磁盘上,甚至可以完全托管,例如 Pinecone 和 Weaviate。

生成层

生成层由LLM及其相关提示组成。生成层将用户查询(文本)作为输入并执行以下操作:

  • 执行语义搜索以查找与查询最相关的信息。
  • 将最相关的文本块与用户的查询一起插入到 LLM 提示中,并调用 LLM 为用户生成响应。

以下是对 LLM 和提示如何与 RAG 系统交互的更深入的了解。

LLM(大模型)

大型语言模型建立在 Transformer 架构之上,它使用注意力机制技术来帮助模型决定在句子或文本中增加或减少注意力。LLM接受来自公共来源(主要在互联网上)的大量数据的培训。

LLM在 RAG 系统中变得更加聪明,能够根据通过语义搜索检索到的上下文生成改进的答案。现在,LLM可以更改其答案,以更好地符合每个查询的意图和含义。

托管LLM的一些例子包括 OpenAI 的 ChatGPT、Google 的 Bard 和 Perplexity AI 的 Perplexity。一些 LLM 可用于自我管理的场景,例如 Meta 的 Llama 2、TII 的 Falcon、Mistral 的 Mistral AI 和 Databricks 的 Dolly。

提示(Prompt)

提示是提供给LLM的文本输入,LLM通过定制、增强或强化其功能来有效地对其进行编程[3]。使用 RAG 系统,提示包含用户的查询以及从语义搜索层检索的相关上下文信息,模型可以使用这些信息来回答查询。

“You are a helpful assistant, here is a users query: ``` ${query}```. Here is some relevant data to answer the user’s question: ``` ${context}```. Please answer the user’s query concisely."

上图显示了通过考虑从语义搜索层检索的上下文来回答查询的朴素提示的示例。

其中context是从向量数据库中获取到的相关知识。

考虑 RAG 时需要了解的基本事项

除了 RAG 的实际和理论应用之外,人工智能从业者还应该意识到随之而来的持续监控和优化承诺。

RAG评估

应在 RAG 系统发生变化时对其进行评估,以确保行为和质量不断改进,而不是随着时间的推移而降低。 RAG 系统还应该进行红队评估,以评估其在遇到越狱提示或其他恶意或低质量输入时的行为。

RAG 知识的质量和数量

RAG 系统与知识数据库中可用的内容一样好。此外,即使知识数据库具有正确的信息,如果语义搜索没有检索到它或在搜索结果中将其排名足够高,LLM将看不到该信息,并且可能会做出不满意的反应。

此外,如果检索到的内容信息密度低,或者完全不相关,那么LLM的回应也会令人不满意。在这种情况下,使用具有更大上下文窗口的模型是很诱人的,以便可以向LLM提供更多语义搜索结果。但这需要权衡——即增加成本以及用不相关信息稀释相关信息的风险——这可能会“混淆”模型。

RAG成本

由于如今嵌入模型的成本通常微不足道,因此 RAG 的主要成本来自矢量数据库托管和 LLM 推理。 RAG 系统中 LLM 推理成本的最大驱动因素可能是插入提示中的语义搜索结果的数量。具有更多语义搜索结果的更重要的LLM提示可能会产生更高质量的响应。尽管如此,它也会导致更多的令牌使用和可能更严重的响应延迟。

然而,包含更多信息的更大提示并不一定能保证更好的响应。对于每个系统,插入到提示中的最佳结果数量都不同,并且受到块大小、块信息密度、数据库中信息重复程度、用户查询范围等因素的影响。评估驱动的开发方法可能是确定系统最佳流程的最佳方法。

RAG 适合您的生成式 AI 应用吗?

检索增强生成系统标志着人工智能的重大进步,通过减少幻觉并确保知识库信息是最新的、准确的和相关的来提高LLM的表现。平衡信息检索与成本和延迟,同时维护高质量的知识数据库对于有效使用至关重要。未来的进步,包括假设文档嵌入 (HyDE) 等技术,有望进一步改进 RAG 系统。

尽管成本高昂,但 RAG 无可否认地改善了用户交互,为客户和员工创造了更具粘性、更令人愉悦的生成式 AI 体验。

参考

[1] Lewis, Patrick, et al. "Retrieval-augmented generation for knowledge-intensive nlp tasks." Advances in Neural Information Processing Systems 33 (2020): 9459-9474.

[2] Neelakantan, Arvind, et al. "Text and code embeddings by contrastive pre-training." arXiv preprint arXiv:2201.10005 (2022).

[3] White, Jules, et al. "A prompt pattern catalog to enhance prompt engineering with chatgpt." arXiv preprint arXiv:2302.11382 (2023).

[4] Introducing text and code embeddings [WWW Document], OpenAI. URL Introducing text and code embeddings

[5] 原文链接:RAG: How Retrieval Augmented Generation Systems Work

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

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

相关文章

System.gc 之后到底发生了什么 ?

本文基于 OpenJDK17 进行讨论 在 JDK NIO 针对堆外内存的分配场景中,我们经常会看到 System.gc 的身影,比如当我们通过 FileChannel#map 对文件进行内存映射的时候,如果 JVM 进程虚拟内存空间中的虚拟内存不足,JVM 在 native 层就…

将整数的二进制位的奇偶数位交换

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 以下是一个用于交换整数二进制位的宏&#xff1a; #define SWAP_BITS(num) (((num) & 0xAAAAAAAA) >> 1) | (((num) & 0x55555555) << 1)这个宏利用了二进制掩…

WordPress AutomaticPlugin SSRF漏洞复现(CVE-2024-27954)

0x01 产品简介 WordPress是一款免费开源的内容管理系统(CMS),最初是一个博客平台,但后来发展成为一个功能强大的网站建设工具,适用于各种类型的网站,包括个人博客、企业网站、电子商务网站等,并逐步演化成一款内容管理系统软件。 0x02 漏洞概述 WordPress AutomaticPlu…

让工作自动化起来!无所不能的Python

让工作自动化起来&#xff01;无所不能的Python 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一内容简介作者简介前言读者对象如何阅读本书购买链接参与方式 随着我国企业数字化和信息化…

Shell与Bash与POSIX与Linux间的关系

shell是什么&#xff1f; Shell的英语翻译是“壳”&#xff0c;其作用也跟名字差不多&#xff0c;为操作系统套个壳&#xff0c;人与操作系统的壳交互。与壳相对应的则是操作系统内核&#xff0c;一个“壳”一个“核”。核从1970年代开始就基本定型了&#xff0c;没什么大的改…

QA测试开发工程师面试题满分问答4: 如何测试购物车功能?

当测试一个购物车时&#xff0c;我们需要采用全面的测试策略&#xff0c;以确保购物车在各种情况下的功能正常、性能良好和用户体验优秀。以下是一个详细的测试计划&#xff0c;包含了各个方面的测试。 功能测试&#xff1a; 添加商品到购物车&#xff1a;验证能否将商品成功添…

基于深度学习的端到端自动驾驶的最新进展:调研综述

基于深度学习的端到端自动驾驶的最新进展&#xff1a;调研综述 附赠自动驾驶学习资料和量产经验&#xff1a;链接 论文链接&#xff1a;https://arxiv.org/pdf/2307.04370.pdf 调研链接&#xff1a;https://github.com/Pranav-chib/ 摘要 本文介绍了基于深度学习的端到端自…

书生浦语笔记一

2023年6月&#xff0c;InternLM的第一代大模型正式发布。仅一个月后&#xff0c;该模型以及其全套工具链被开源。随后&#xff0c;在8月份&#xff0c;多模态语料库chat7B和lagent也被开源。而在接下来的9月份&#xff0c;InternLM20B的开源发布进一步加强了全线工具链的更新。…

猜数游戏(Python)

一、实验要求&#xff1a; &#xff08;1&#xff09;在游戏开始时&#xff0c;随机生成一个1~100之间的整数。 &#xff08;2&#xff09;在游戏中&#xff0c;玩家有10次机会猜数。如果10次都没有猜中&#xff0c;则游戏失败&#xff1b;否则&#xff0c;游戏成功。 &…

Linux:查询类型的命令type

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 type命令是Linux中一个查询类型的命令&#xff0c;它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名&#xff08;这很有用&#xff09;或…

Linux系统使用Docker部署MeterSphere并实现公网访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

20240401,ALOHA WORLD

C了&#xff0c;虽然练习C还有9题不会做&#xff0c;但是不先继续往下学&#xff0c;肯定就凉了 #include <iostream> int main() {if (__cplusplus 201703L)std::cout << "C17\n";else if (__cplusplus 201402L)std::cout << "C14\n"…

Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

C++ | Leetcode C++题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果&#xff0c;初始化一个大小为2&#xff0c;值为-1的容…

Machine Learning机器学习之文本分析的知识图谱(详细讲解)

目录 前言 历史&#xff1a; 概念思想&#xff1a; 知识图谱主要发展历程&#xff1a; 知识图谱重要组成部份和特征&#xff1a; 知识图谱案列&#xff08;关于学院、课程、学生&#xff09;&#xff1a; 一、知识图谱的存储 二、知识图谱的构建过程 数据层&#xff1a; 模式…

【docker】Dockerfile自定义镜像

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 1.Dockerfile自定义镜像 常见的镜像在DockerHub就能找到&#xff0c;但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像&#xff0c;就…

用系统观念打造智慧公厕,引领智慧城市的发展

智慧公厕&#xff0c;作为智慧城市建设的一部分&#xff0c;具有重要意义。在高度发达的科技条件下&#xff0c;如何打造高质量的智慧公厕是一个值得思考的问题。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例项目现场实景实图实例&#xff0c;探…

【MySQL】数据库--基础

目录 一、概念&#xff1a; 二、连接数据库[Dos命令] 三、SQL 语句分类 一、概念&#xff1a; MySQL 是一种开源的关系数据库管理系统 (RDBMS)数据库-表的本质仍然是文件 二、连接数据库[Dos命令] mysql -h&#xff1a;mysql服务的主机&#xff08;默认连接到本机服务器&…

XZ Utilѕ⼯具库恶意后⻔植⼊漏洞(CVE-2024-3094)排查处理

一、漏洞描述 近⽇&#xff0c;互联⽹安全监测发现XZ Utilѕ ⼯具库恶意后⻔植⼊漏洞(CVE-2024-3094)&#xff0c;3⽉29⽇有开发⼈员发帖称发现了涉及XZ包中的供应链攻击&#xff0c;进⼀步溯源发现SSH使⽤的上游liblzma库被植⼊了后⻔代码&#xff0c;主要存在于 5.6.0 到5.6…

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…