检索增强生成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.mfbz.cn/a/633687.html

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

相关文章

CSS学习笔记之中级教程(三)

14、CSS 下拉菜单 14.1 示例1&#xff1a;普通弹窗 思路&#xff1a;弹窗内容先隐藏display: none;&#xff0c;:hover时候修改弹窗部分的 display: block; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><me…

ROS2学习——节点话题通信(2)

目录 一、ROS2节点 1.概念 2.实例 &#xff08;1&#xff09;ros2 run &#xff08;2&#xff09;ros2 node list &#xff08;3&#xff09;remapping重映射 &#xff08;4&#xff09;ros2 node info 二、话题 &#xff08;1&#xff09; ros2 topic list &#xf…

Vue学习穿梭框Transfer组件

Vue学习Transfer组件 一、前言1、案例一2、案例二 一、前言 在 Vue 3 中使用 el-transfer 组件可以帮助你实现数据的穿梭功能&#xff0c;让用户可以将数据从一个列表转移到另一个列表。下面是一个简单示例&#xff0c;演示如何在 Vue 3 中使用 el-transfer 组件&#xff1a; …

ROS | 实现SLAM的功能

用launch文件启动Hector_Mapping的建图功能 1.引入launch文件 2.args是引入的设置好的rviz文件 Hector_Mapping建图的参数设置

【云原生】Kubernetes 核心概念

什么是 Kubernetes Kubernetes&#xff0c;从官方网站上可以看到&#xff0c;它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语&#xff0c;它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词&#xff0c;也就是“k8s”&#xff0c;它…

迎接AI大模型时代:为什么JS-Tool-Big-Box是前端开发者的最佳选择

随着AI大模型的快速发展&#xff0c;前端开发面临着前所未有的机遇和挑战。数据量和复杂度的增加&#xff0c;以及用户对卓越体验的需求&#xff0c;使得前端工具的选择变得尤为重要。在这样的背景下&#xff0c;JS-Tool-Big-Box脱颖而出&#xff0c;成为前端开发者的首选。本文…

QTextCodec NO such file or directory让qt6兼容qt5

首先在.pro 文件中新加 QT core5compat这时会报错 链接 报错之后修复qt&#xff0c;新加兼容模块&#xff0c;见链接。

基于树的存储数据结构demo

一.简介 由于之前博主尝试Java重构redis&#xff0c;在redis中的的字典数据结构底层也是采用数组实现&#xff0c;字典中存在两个hash表&#xff0c;一个是用于存储数据&#xff0c;另一个被用于rehash扩容为前者两倍。但是我注意到了在redis的数据结构中&#xff0c;并没有像…

分类和品牌关联

文章目录 1.数据库表设计1.多表关联设计2.创建表 2.使用renren-generator生成CRUD1.基本配置检查1.generator.properties2.application.yml 2.生成代码1.进入localhost:81生成代码2.将main目录覆盖sunliving-commodity模块的main目录 3.代码检查1.注释掉CategoryBrandRelationC…

2024-5-23 石群电路-14

2024-5-23&#xff0c;星期四&#xff0c;22:20&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么重要的事情发生&#xff0c;心情一如既往的平静&#xff0c;距离返校假期还有两天~~~。 今天观看了石群老师电路基础课程的第23/24个视频&#xff0…

金丝雀发布(灰度发布)介绍 及 声明式管理方法简介

目录 一 应用发布策略 1&#xff0c;滚动发布&#xff08;k8s默认&#xff09; 2&#xff0c;蓝绿发布 3&#xff0c;金丝雀发布 二 金丝雀发布&#xff08;Canary Release&#xff09; &#xff08;灰度发布&#xff09; 1&#xff0c;金丝雀发布图解 2&#xff0…

前端:音频可视化(H5+js版本)

一、效果展示 HTML5JS实现一个简单的音频可视化 二、代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>音频可视化</title><style></style></head><body><divs…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-19讲 串口实验UART

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

【python】python社交交友平台系统设计与实现(源码+数据库)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Nginx企业级负载均衡:技术详解系列(9)—— Nginx核心配置详解(全局配置)

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。‍‍‍‍‍ 在 Nginx企业级负载均衡&#xff1a;技术详解系列&#xff08;8&#xff09;—— Nginx核心配置详解&#xff08;默认配置文件&#xff09;文章中&#xff0c;咱们讨论了Nginx核心配置文件的基础知识&#…

鸿蒙 DevEcoStudio:通知栏通知实现

【使用notificationManager实现通知栏功能】 【普通通知、长文本通知、多行通知、图片通知】 import notificationManager from ohos.notificationManager import image from ohos.multimedia.image Entry Component struct Index {State message: string Hello World// 将图…

Spring 事务源码分析

前言&#xff1a; 我们知道 Spring 声明式事务是通过 AOP 来实现的&#xff0c;日常项目开发中我们只需要使用 Transactional 注解就可以实现声明式事务&#xff0c;那你知道通过 Transactional 注解怎样实现事务的吗&#xff1f;本篇我们将从源码来分析 Spring 声明式事务的执…

鸿蒙HarmonyOS开发中的易混点归纳-持续补充中

相关文章目录 鸿蒙HarmonyOS开发术语全解&#xff1a;小白也能看懂&#xff01; 文章目录 相关文章目录前言一、build()函数和Builder装饰器&#xff1f;二、自定义组件和系统组件&#xff08;内置组件&#xff09;三、组件和页面四、自定义弹窗和其他弹窗总结 前言 一、build…

骨传导耳机哪个牌子好?五大热门精选推荐,真心力荐!

作为一名运动达人&#xff0c;在日常运动中经常会使用一些运动耳机&#xff0c;由于运动场景的特殊性&#xff0c;所以骨传导耳机凭借特殊的佩戴方式和独特的传声原理&#xff0c;所以骨传导耳机就成运动中的得力助手。然而&#xff0c;近期许多消费者在购买时往往被网络上的流…

冯喜运:5.24现货黄金趋势解读,黄金原油行情分析及操作建议

【黄金消息面分析】&#xff1a;美国劳工部公布的最新数据显示&#xff0c;截至5月18日的一周内&#xff0c;首次申请失业救济人数下降至21.5万人&#xff0c;创下自去年9月以来的最大降幅。数据公布后&#xff0c;现货黄金短线下挫6美元&#xff0c;报2362.71美元/盎司。这表明…