检索增强生成RAG的概念及参考架构

大家好,自ChatGPT火爆以来,大语言模型(LLMs)驱动的智能应用如雨后春笋般涌现,迅速改变了我们与世界互动的方式。在众多智能AI应用架构中,RAG(检索增强生成)架构以其独特的优势和强大的功能,迅速引起了广泛关注,成为业界的热门话题。

RAG是一种提高大型语言模型 (LLM) 输出质量的方法,结合了信息检索和生成式模型的优势,通过检索相关信息来增强生成结果,显著提升了生成内容的准确性和相关性。这种架构不仅快速实现用户的复杂需求,还可以为用户提供更专业、更精确的回答。

RAG更多地专注于利用大型语言模型(LLMs)的理解/推理/表达能力,通过整合外部知识来实现更好的生成结果。RAG技术消除了开发人员需要针对每个特定任务重新训练整个大规模模型的需求。相反,可以简单地连接相关知识库,为模型提供额外的输入,增强答案的准确性。

由于RAG(检索增强生成)的内容较为复杂,本文将从一个简单的RAG参考架构开始展开讨论。基于这一参考架构,可以设计和构建基于RAG生成式人工智能(AI)应用,也可以更快地理解RAG的概念。

通过RAG参考架构可以直观地了解RAG的基本组成部分,不仅为开发RAG功能的AI应用提供了清晰的设计思路,还为进一步深入探索和优化RAG技术奠定了基础。无论是对于新手还是有经验的开发者,这种简化的架构都能帮助快速上手,掌握RAG的构建智能应用方法。

1.RAG的概念架构

RAG 是从现有数据库或文档集/知识库中检索相关信息并进而生成内容的过程。RAG 系统由两部分组成,分别是智能检索器和LLMs生成模型。智能检索器负责在向量数据库(知识库)中检索与用户问题最相关的信息,是向量化的知识存储库和LLMs模型结合实现知识的语义搜索匹配。找到的信息被传递到生成器,生成器使用此信息生成用户问题的答案。通过利用智能检索器,可以强制生成器坚持使用知识库中与回答问题最相关的内容,这一过程就实现了检索增强生成(RAG)。

RAG最大的特点是它在生成过程中“增强”了现有的信息,这意味着根据新检索的实时数据构建答案,而不是简单地根据过去学习的数据生成答案。因此,RAG可以说是一项非常有用的技术,尤其是在信息不断更新的领域。

1.1 RAG 的优点

  • 灵活性:RAG可以与多种形式的数据连接,适用于各个领域。

  • 准确性:实时查找和使用最相关的信息,因此生成的答案非常准确。

  • 适应性:您可以生成实时反映新信息的答案。

RAG 将信息检索和内容生成结合起来,为用户的问题提供更相关的答案。

1.2 RAG核心功能

  • 实时数据库搜索:RAG 系统的搜索功能实时搜索数据库以查找与用户问题最相关的信息。这使您可以使用最新且最相关的数据,而不是现有的静态数据。

  • 内容生成:生成器根据检索到的信息生成答案。在此过程中,生成器利用检索到的信息作为内容生成的上下文,提供更准确、更丰富的信息。

  • 持续学习和变革:RAG 不断搜索新数据并根据其生成答案,并在新信息可用时进行自我更新。这使得系统始终保持最新状态。

2.RAG的参考架构

RAG智能AI系统主要分为四个部分:

  • 数据注入子系统:准备和处理用于实现 RAG 功能的所有外部知识库和数据,处理的过程主要格式化和向量化等处理。数据注入子系统通过数据库层与架构中的其他子系统进行交互。

  • 服务子系统:处理生成式 AI 应用与其用户之间的请求-响应流。服务子系统通过数据库层与数据注入子系统进行交互。

  • 质量评估子系统:评估服务子系统生成的响应的质量。 质量评估子系统直接与服务子系统交互,并通过数据库层与数据注入子系统交互。

  • 向量数据库:存储知识向量化数据,负责向量化(语义)的搜索和计算,架构中的所有子系统都与向量数据库进行交互。

2.1 数据注入子系统

数据注入子系统从外部来源(例如文件、数据库和流式传输服务)注入数据。上传的数据包含进行质量评估的提示。数据注入子系统在架构中提供 RAG 功能。下图展示了架构中的数据注入子系统的详细信息:

  1. 知识文档数据导入/爬取:数据注入子系统从外部来源获取数据,这些数据可以来自文件、数据库、或通过爬虫从网络上获取的文档数据。

  2. 事件触发:当新的数据导入或获取时,事件触发机制启动后续的处理流程。这可能是一个文件上传事件、数据库更新事件,或爬虫抓取新数据的事件。

  3. LLMs(大语言模型)文档处理:存储的数据被发送到大语言模型(LLMs)进行处理。这个处理步骤包括解析数据、转换格式和将文本序列化为Tokens序列。

  4. 调度执行:数据处理的调度执行模块负责协调各个处理步骤的顺序和资源分配。它会调度LLMs进行文档处理,并协调向量嵌入模型的执行。

  5. LLMs 嵌入模型:经过处理后的数据被发送到LLMs嵌入模型,该模型将文本数据转化为向量表示(embeddings)。这些向量表示便于后续的存储、搜索和质量评估。

  6. 向量数据库:生成的向量表示被存储到向量数据库中。向量数据库用于高效地存储和检索文本的向量表示,支持相似性搜索和其他向量操作。

数据注入子系统通过知识、文档和数据的采集和导入,并启动数据处理流程,包括文档解析、格式转换、向量嵌入生成和质量评估。数据流经过处理和存储向量表示并最终保存在向量数据库中。

2.2 服务子系统

服务子系统处理生成式 AI 应用与其用户之间的请求-响应流的交互服务模块。下图展示了服务子系统的基本流程和结构:

1.用户请求提交

  • 请求来源:用户通过前端接口(如聊天机器人或移动应用)向生成式AI应用提交自然语言请求。

  • 请求处理:前端接口将用户的自然语言请求发送到生成式AI应用进行处理。

2.自然语言请求转换为嵌入

  • 嵌入生成:生成式AI应用接收用户请求,并利用自然语言处理(NLP)技术将请求转换为高维嵌入表示,以便后续处理。

  • 语义搜索:生成式AI应用在由数据注入子系统维护的向量数据库中执行语义搜索。语义搜索根据请求的意图(而不是其文本内容)查找匹配的嵌入。

  • 情景化提示生成:应用将原始请求与语义搜索匹配到的原始数据相结合,创建情景化提示,为生成响应提供上下文。

3.LLM推理堆栈

  • 提示发送:应用将情景化提示发送到LLM推理堆栈。

  • 响应生成:LLM推理堆栈使用生成式AI LLM(可以是基础LLM或自定义LLM),生成受限于所提供上下文的响应。

4.日志记录与监控:应用可以在Logging中存储请求-响应活动的日志,确保活动的可追溯性和审计。

5.数据存储与分析:应用将生成的响应存储到分析平台,以便进行离线分析,支持进一步的数据挖掘和系统优化。

6.响应过滤:应用使用Responsible AI过滤条件,对生成的响应进行审查,确保输出内容符合伦理和法律要求,避免敏感或不适当的信息。

7.响应发送:应用通过前端接口将经过Responsible AI过滤的响应发送给用户,完成整个请求-响应流程。

2.3 质量评估子系统

质量评估系子系统负责评估服务子系统生成的响应的质量,直接与服务子系统交互,并通过数据库层与数据注入子系统交互。

2.4 向量数据库

向量数据库主要用于存储和检索高维向量化的知识和数据,支持生成式AI应用的高效检索和匹配。

向量数据库的主要作用是存储和处理向量数据,并提供高效的向量检索功能。最核心是相似度搜索,通过计算一个向量与其他所有向量之间的距离来找到最相似的向量(最相似的知识或内容)。这是基本索引(flat indexes)的朴素原理,在大型向量数据库中,这可能需要很长时间。

为了提高搜索性能,可以尝试仅计算一部分向量的距离。这种方法称为近似最近邻(approximate nearest neighbors:ANN),它提高了速度,但牺牲了结果的质量。一些常用的ANN索引包括局部敏感哈希(Locally Sensitive Hashing:LSH)、分层可导航小世界(Hierarchical Navigable Small Worlds:HNSW)或倒排文件索引(Inverted File Index:IVF)等。

综上所述,RAG(检索增强生成)架构将信息检索和生成式模型相结合,通过智能检索器和LLMs生成模型实现智能AI应用。其优势在于灵活性、准确性和适应性,能够实时搜索数据库并生成实时反映新信息的答案。该架构主要分为数据注入、服务、质量评估和向量数据库四个子系统,通过处理外部知识库数据并利用LLMs进行处理和生成,实现了高效的智能应用交互和响应。

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

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

相关文章

MySQL数据库单表查询中查询条件的写法

1.使用比较运算符作为查询条件 ; !; >; >; <; <; 如上图所示&#xff0c;可以使用命令select 字段&#xff0c;字段 from 表名 where Gender “M”; 即挑选出Gender “M” 的教师&#xff0c; 如上图所示&#xff0c;可以使用命令select 字段&#xff0c;…

Python | Leetcode Python题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; class Solution:def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:levelOrder list()if not root:return levelOrderq collections.deque([root])while q:level list()size len(q)for _ in range(size):node q.popl…

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器&#xff0c;事件过滤器&#xff08;重要程度&#xff1a;一般&#xff09; event函数 2.文件操作&#xff08;QFile&#xff09; 实现功能&#xff1a;点击按钮&#xff0c;弹出对话框&#xff0c;并且用文件类读取出内容输出显示在控件上。 #include <QFi…

bclinux基于欧拉(BigCloud Enterprise Linux For Euler)下安装mysql5.7

第一步&#xff1a;下载mysql5.7的rpm安装包 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 第二步&#xff1a;上传mysql安装包到Centos7的下 第三步&#xff1a;检查是否已经安装了mysql或者mariadb&#xff08;centos7默认安装&#xff09;&#xff0c;如已…

如何在 Git 中处理和解决分支合并冲突?

在Git中&#xff0c;当两个或多个分支尝试合并&#xff0c;而它们对同一个文件的同一部分进行了不同的修改时&#xff0c;就可能会发生合并冲突。解决这些冲突是合并过程中一个重要的步骤。以下是如何在Git中处理和解决分支合并冲突的基本步骤&#xff1a; 拉取并合并分支&…

Python 渗透测试:GhostScript 沙箱绕过.(CVE-2018-16509)

什么是 GhostScript 沙箱绕过 GhostScript 沙箱是一种安全机制,用于在受控环境中运行 GhostScript 解释器,以防止恶意代码的执行。GhostScript 是一个广泛使用的 PDF 和 PostScript 解释器,通常用于在服务器上处理和渲染这些文件格式。Tavis Ormandy 通过公开邮件列表&#xf…

14.js数组

是一种复杂数据类型&#xff0c;有序的数据集合 数组一般存放多个个例的不同数据&#xff0c;对象一般存放一个个例的不同信息 数组创建 &#xff08;1&#xff09;字面量创建 var 数组名[ ] &#xff08;2&#xff09;内部构造函数创建 var 数组名new Array() 创建指定长度的数…

《网关微服务技术架构:构建高效可扩展的服务网关》

随着微服务架构的流行&#xff0c;网关微服务作为微服务架构中的重要组成部分&#xff0c;扮演着连接客户端与后端微服务的关键角色。本文将深入探讨网关微服务的技术架构设计与实现&#xff0c;以及如何构建高效可扩展的服务网关。 ### 1. 网关微服务的作用与意义 网关微服务…

iptables防火墙【☆】

一、防火墙的基础 防火墙分为硬件防火墙和软件防火墙&#xff0c;硬件防火墙有专门的设备&#xff1a;如国产华为、绿盟等&#xff0c;作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御&#xff0c;在核心业务上再添加软件防火墙提高安全性能…

heap和stack有什么区别

heap&#xff08;堆&#xff09;和stack&#xff08;栈&#xff09;在内存管理、数据结构、空间分配和释放等方面存在显著的区别。以下是对这些区别的详细解释和举例说明&#xff1a; 空间分配和释放&#xff1a; heap&#xff1a;空间一般由程序员手动分配和释放&#xff0c…

IP地址概述和配置

一.IP地址的概述 在计算机网络中&#xff0c;连接的网络设备和计算机都有唯一的地址&#xff0c;以此作为该计算机在internet中的唯一标识。 二.IP地址的定义 IP地址&#xff08;internet protocol Address&#xff0c;网络协议地址&#xff09;是用于表示网络节点的逻辑地址…

智能科技的新风潮:探索Web3与物联网结合

引言 随着科技的不断进步和创新&#xff0c;智能科技正成为新时代的主旋律。在这个充满活力和变革的时代&#xff0c;Web3技术与物联网的结合成为了一股新的风潮。本文将深入探讨这一新趋势&#xff0c;揭示Web3与物联网结合的意义、挑战和前景。 Web3技术的特点与优势 区块链…

Docker compose 的方式一键部署夜莺

官方安装文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/install/docker-compose/ 介绍&#xff1a;夜莺监控是一款开源云原生观测分析工具&#xff0c;采用 All-in-One 的设计理念&#xff0c;集数据采集、可视化、监控告警、数据分析…

Go语言(Golang)的开发框架

在Go语言&#xff08;Golang&#xff09;的开发中&#xff0c;有多种开发框架可供选择&#xff0c;它们各自具有不同的特点和优势。以下是一些流行的Go语言开发框架&#xff0c;选择Go语言的开发框架时&#xff0c;需要考虑项目需求、团队熟悉度、社区支持、框架性能和可维护性…

3d选择模型后不能旋转什么原因?怎么解决?---模大狮模型网

在3D建模和渲染的过程中&#xff0c;旋转模型是常见的操作。然而&#xff0c;有时在选择了模型后&#xff0c;却发现无法进行旋转&#xff0c;这可能会让许多用户感到困扰。本文将探讨3D选择模型后不能旋转的可能原因&#xff0c;并提供相应的解决方法。 一、3D选择模型后不能旋…

Kafka中配置一个账号,权限仅支持查询所有主题信息和消费组信息

为了配置一个Kafka账号&#xff0c;使其具有查询所有主题的消费信息和权限组信息的权限&#xff0c;但没有编辑权限&#xff0c;你可以按照以下流程操作&#xff0c;并使用相应的Kafka命令行工具&#xff1a; 配置流程 设置认证机制 确保Kafka集群配置了SASL或SSL/TLS认证。…

若依nodejs版本过高问题解决方案

由于nodejs版本过高,可能会导致vue-cli项目运行报错。 目录 方法1:每次启动项目前,输入配置命令 方法2:修改package.js

代码随想录训练营day56 | 动态规划part17

1、647.回文子串 class Solution {public int countSubstrings(String s) {char[] chars s.toCharArray();int len chars.length;boolean[][] dp new boolean[len][len];int result 0;for (int i len - 1; i > 0; i--) {for (int j i; j < len; j) {if (chars[i] …

react中样式的书写

在 React 中&#xff0c;你可以使用 className 来指定一个 CSS 的 class。它与 HTML 的 class 属性的工作方式相同&#xff1a; <img className"avatar" /> 然后&#xff0c;你可以在一个单独的 CSS 文件中为它编写 CSS 规则&#xff1a; .avatar {border-rad…

如何使用WindowsSpyBlocker防止Windows系统被恶意监控和跟踪

关于WindowsSpyBlocker WindowsSpyBlocker是一款功能强大的Windows系统安全防护工具&#xff0c;该工具基于Go语言开发&#xff0c;WindowsSpyBlocker以一个单独的可执行程序发布&#xff0c;可以帮助广大用户防止自己的Windows系统被恶意监控和跟踪。 WindowsSpyBlocker能够利…