Apache Kafka + 矢量数据库 + LLM = 实时 GenAI

news2024/11/26 4:24:04

公众号:Halo咯咯

生成式人工智能 (GenAI) 支持先进的人工智能用例和创新,但也改变了企业架构的外观。大型语言模型 (LLM)、向量数据库和检索增强生成 (RAG) 需要新的数据集成模式和数据工程最佳实践。 Apache Kafka 和 Apache Flink 的数据流在大规模实时摄取和整理传入数据集、连接各种数据库和分析平台以及解耦独立业务部门和数据产品方面发挥着关键作用。这篇博文探讨了事件流与传统请求响应 API 和数据库之间的可能架构、示例以及权衡。

Apache Kafka 和 GenAI 的用例

生成式人工智能(GenAI)是用于自然语言处理(NLP)、图像生成、代码优化和其他任务的下一代人工智能引擎。它可以帮助现实世界中的许多项目实现服务台自动化、客户与聊天机器人的对话、社交网络中的内容审核以及许多其他用例。

Apache Kafka 成为这些机器学习平台中的主要编排层,用于集成各种数据源、大规模处理和实时模型推理。

Kafka数据流已经为许多 GenAI 基础设施和软件产品提供支持。可能出现非常不同的情况:

  • 数据流作为整个机器学习基础设施的数据结构
  • 通过流处理进行模型评分,以进行实时预测和内容生成
  • 使用输入文本、语音或图像生成流数据管道
  • 大语言模型实时在线训练

下面介绍了大语言模型 (LLM)、检索增强生成 (RAG) 与向量数据库和语义搜索以及 Apache Kafka 和 Flink 的数据流相结合的具体架构。

为什么生成式人工智能与传统机器学习架构不同?

机器学习 (ML) 允许计算机找到隐藏的见解,而无需对要查找的位置进行编程。这称为模型训练,是分析大数据集的批处理过程。输出是一个二进制文件,即分析模型。

应用程序将这些模型应用于新的传入事件以进行预测。这称为模型评分,可以通过将模型嵌入到应用程序中或通过对模型服务器(部署模型)进行请求响应 API 调用来实时或批量进行。

然而,与传统的机器学习流程相比,LLM和 GenAI 具有不同的要求和模式,正如我的前同事 Michael Drogalis 在两个简单、清晰的图表中所解释的那样。

具有复杂数据工程的传统预测机器学习

预测人工智能做出预测。专门构建的模型。线下培训。这就是我们在过去十年左右的时间里进行机器学习的方式。

在传统的机器学习中,大部分数据工程工作发生在模型创建时。特征工程和模型训练需要大量的专业知识和努力:

新用例需要数据工程师和数据科学家构建新模型。

使用大型语言模型 (LLM) 的生成式人工智能实现人工智能的民主化

生成人工智能 (GenAI) 创建内容。可重复使用的模型。情境学习。

对于大型语言模型,每次查询都会发生数据工程。不同的应用程序重复使用相同的模型

GenAI 用例的大型语言模型面临的挑战

大型语言模型 (LLM) 是可重用的。这使得人工智能的民主化成为可能,因为并非每个团队都需要人工智能专业知识。相反,人工智能专业知识水平较低就足以使用现有的LLM。

然而,LLM存在一些巨大的权衡

  • 昂贵的培训:像 ChatGPT 这样的LLM需要花费数百万美元的计算资源(这不包括构建模型所需的专业知识)
  • 静态数据LLM“及时冻结”,意味着模型没有最新信息。
  • 缺乏领域知识LLM通常从公共数据集学习。因此,数据工程师抓取万维网并将其输入到模型训练中。然而,企业需要在自己的环境中使用LMM来提供商业价值。
  • 愚钝LLM不像人类那么聪明。例如,ChatGPT 甚至无法计算您提示的句子中的单词数。

这些挑战造成了所谓的幻觉……

避免幻觉以生成可靠的答案

结果就是产生幻觉,即最佳猜测答案。而且LLM不会告诉你这是编造的。幻觉是一种现象,即人工智能模型生成的内容并非基于真实数据或信息,而是创建完全虚构或不切实际的输出。当生成模型(例如文本或图像生成器)生成不连贯、不真实或与输入数据或上下文不相关的内容时,可能会出现幻觉。这些幻觉可以表现为文本、图像或其他类型的内容,这些内容看似合理,但完全是由模型捏造的。

幻觉在生成人工智能中可能会出现问题,因为它们可能导致生成误导性或虚假信息

由于这些原因,生成式人工智能出现了一种新的设计模式:检索增强生成(RAG)。让我们首先看看这个新的最佳实践,然后探讨为什么使用 Apache Kafka 和 Flink 等技术进行数据流是 GenAI 企业架构的基本要求。

语义搜索和检索增强生成 (RAG)

许多支持 GenAI 的应用程序都遵循检索增强生成 (RAG) 的设计模式,将LLM与准确且最新的上下文相结合。 Pinecone(一个完全托管的矢量数据库)背后的团队使用此图进行了很好的解释:

来源:松果

从较高层面来看,RAG 通常是两个独立的步骤。第一个是数据增强步骤,其中对不同的(通常是非结构化的)操作数据进行分块,然后使用嵌入模型创建嵌入。嵌入被索引到向量数据库中。矢量数据库是一种工具,可让语义搜索为不需要精确关键字匹配的提示找到相关上下文。

其次是推理步骤,GenAI 模型接收问题和上下文以生成可靠的答案(没有幻觉)。 RAG 不会更新嵌入,但会检索相关信息并与提示一起发送给 LLM。

用于嵌入语义搜索的向量数据库

矢量数据库,也称为矢量存储或矢量索引,是一种专门设计用于高效存储和检索矢量数据的数据库。在这种情况下,矢量数据是指数值矢量的集合,它可以表示多种数据类型,例如文本、图像、音频或任何其他结构化或非结构化数据的嵌入。矢量数据库在与机器学习、数据检索、推荐系统、相似性搜索等相关的应用中非常有用。

矢量数据库擅长执行相似性搜索,通常称为语义搜索。他们可以根据各种相似性度量(例如余弦相似性或欧几里得距离)快速找到与给定查询向量相似或接近的向量。

矢量数据库(不一定)不是一个单独的数据库类别。 Gradient Flow 在其检索增强生成的最佳实践中解释道:

“矢量搜索不再局限于矢量数据库。许多数据管理系统(包括 PostgreSQL)现在都支持矢量搜索。根据您的具体应用,您可能会找到满足您特定需求的系统。优先考虑近实时还是流媒体?查看 Rockset 的产品。您已经在使用知识图了吗? Neo4j 对矢量搜索的支持意味着您的 RAG 结果将更容易解释和可视化。”

对于另一个具体示例,请参阅 MongoDB 的教程“使用 MongoDB 构建生成式 AI 应用程序:利用 Atlas 矢量搜索和开源模型的力量”。将 GenAI 用例的向量数据库与 Apache Kafka 相结合有多种选择。以下是事件驱动世界中可能的架构。

事件驱动架构:数据流+Vector DB+LLM

事件驱动的应用程序可以更有效地实现检索增强生成(RAG)、数据增强和模型推理这两个步骤。使用 Apache Kafka 和 Apache Flink 的数据流可以实现任何规模的数据一致同步(实时,如果应用程序或数据库可以处理)和数据管理(= 流式 ETL)。

下图显示了利用事件驱动的数据流在整个 GenAI 管道中进行数据摄取和处理的企业架构:

此示例使用数据流将航班预订和更改实时提取到 Kafka 的事件存储中,以便稍后使用 GenAI 技术进行处理。 Flink 在调用嵌入模型为向量数据库生成嵌入之前对数据进行预处理。与此同时,用Python构建的实时客户服务应用程序会消耗所有相关的上下文数据(例如,航班数据、客户数据、嵌入等)来提示大型语言模型。LLM可以创建可靠的预测,例如建议乘客重新预订另一航班。

在大多数企业场景中,出于安全和数据隐私原因,所有处理都在企业防火墙后面进行。LLM甚至可以与预订引擎等交易系统集成,以执行重新预订并将结果输入相关应用程序和数据库。

使用 API 进行请求-响应与事件驱动的数据流

在理想的世界中,一切都是基于事件的流数据。现实世界是不同的。因此,使用 HTTP/REST 或 SQL 进行请求-响应的 API 调用在企业架构的某些部分是完全没问题的。由于 Kafka 真正解耦了系统,每个应用程序都可以选择自己的通信范式和处理速度。因此,了解HTTP/REST API 和 Apache Kafka 之间的权衡非常重要。

何时在 Apache Kafka 中使用请求-响应? ——这个决定通常是根据延迟、解耦或安全性等权衡做出的。然而,对于大型LLM,情况发生了变化。由于LLM的培训成本非常昂贵,因此现有LLM的可重用性至关重要。与使用决策树、集群甚至小型神经网络等算法构建的其他模型相反,将 LLM 嵌入到 Kafka Streams 或 Flink 应用程序中没有什么意义。

同样,增强模型通常通过 RPC/API 调用进行集成。通过将其嵌入到 Kafka Streams 微服务或 Flink 作业中,增强模型变得紧密耦合。如今,专家们主持了其中的许多活动,因为操作和优化它们并非易事。

托管 LLM 和增强模型的解决方案通常只提供 RPC 接口,例如 HTTP。这在未来可能会改变,因为请求-响应是流数据的反模式。 Seldon 是模型服务器演变的一个很好的例子。同时提供 Kafka 原生接口。请阅读文章使用 Kafka 原生模型部署进行流式机器学习,了解有关请求-响应与流式模型服务的更多信息。

LLM 与企业其他部门之间的直接集成?

在撰写本文时,OpenAI 宣布使用 GPT创建 ChatGPT 的自定义版本,该版本结合了指令、额外知识和任意技能组合。对于企业用途,最有趣的功能是开发人员可以将 OpenAI 的 GPT 连接到现实世界,即其他软件应用程序、数据库和云服务:

“除了使用我们的内置功能之外,您还可以通过向 GPT 提供一个或多个 API 来定义自定义操作。与插件一样,操作允许 GPT 集成外部数据或与现实世界交互。将 GPT 连接到数据库、将其插入电子邮件或使它们成为您的购物助手。例如,您可以集成旅行列表数据库、连接用户的电子邮件收件箱或促进电子商务订单。”

使用直接集成的权衡是紧密耦合和点对点通信。如果您已经使用 Kafka,您就会了解具有真正解耦的领域驱动设计的价值。

有关微服务或数据网格架构中真正解耦的重要性和价值的更多详细信息,请查看这两篇文章,了解与传统中间件的紧密耦合和具有基于事件的数据流的解耦数据产品之间的区别

  • Apache Kafka 与企业服务总线 (ESB) — 是朋友、敌人还是亦敌亦友?
  • 为什么数据流与具有集成平台即服务 (iPaaS) 解决方案的数据集成不同

最后但并非最不重要的一点是:公共 GenAI API 和 LLM 的安全和治理策略较弱。随着人工智能数据需求的出现和点对点集成数量的增加,数据访问、沿袭和安全挑战不断升级。

Kafka、Flink 和 GenAI 的数据流实践

在了解了很多理论之后,让我们看一下将数据流与 GenAI 相结合的具体示例、演示和真实案例研究:

  • 示例:Flink SQL + OpenAI API
  • 演示:ChatGPT 4 + Confluence Cloud + 用于 RAG 和矢量搜索的 MongoDB Atlas
  • 成功案例:Elemental Cognition — 由 Confluence Cloud 提供支持的实时人工智能平台

示例:Flink SQL + OpenAI API

使用Kafka和Flink进行流处理可以实现实时数据和历史数据的数据关联。一个很好的例子,特别是对于生成式人工智能来说,是特定情境的客户服务。我们在这里以航空公司和航班取消为例。

有状态流处理器从CRM、忠诚度平台和其他应用程序获取现有客户信息,将其与客户对聊天机器人的查询相关联,并对LLM 进行 RPC 调用

下图使用Apache Flink 和 Flink SQL 用户定义函数 (UDF)。 SQL 查询将预处理后的数据输入 OpenAI API 以获得可靠的答案。答案被发送到下游应用程序使用它的另一个 Kafka 主题,例如用于重新预订机票、更新忠诚度平台,以及将数据存储在数据湖中以供以后的批处理和分析。

演示:ChatGPT 4 + Confluence Cloud + 用于 RAG 和矢量搜索的 MongoDB Atlas

以下是一个出色的零售演示,展示了用于数据集成和处理的 Kafka 与用于存储和语义向量搜索的 MongoDB 的结合。 AI视频创作平台D-ID通过用可视化AI头像代替命令行界面,让演示更加美观。

完全托管和深度集成的服务Confluence Cloud 和 MongoDB Atlas 允许专注于构建业务逻辑

该架构与我上面的基于事件的流式传输示例不同。核心仍然是Kafka来真正解耦应用。大多数服务都是通过请求-响应 API 集成的。这很简单,很好理解,而且通常足够好。您稍后可以使用 Python Kafka API 轻松迁移到基于事件的模式、更改 Kafka 的数据捕获 (CDC)、将 LangChain Python UDF 嵌入 Apache Flink 或使用 AsyncAPI 等异步接口。

成功案例:Elemental Cognition — 由 Kafka 和 Confluence Cloud 提供支持的实时 GenAI 平台

David Ferrucci 博士是著名的人工智能研究员和 IBM 突破性 Watson 技术的发明者,于 2015 年创立了 Elemental Cognition。该公司利用 GenAI 来加速和改进关键决策,而信任、精确度和透明度都很重要

元素认知技术可跨行业和用例使用。主要目标是医疗保健/生命科学、投资管理、情报、物流和调度以及联络中心。

该人工智能平台开发负责任且透明的人工智能,帮助解决问题并提供可以理解和信任的专业知识

Elemental Cognition 的方法将不同的人工智能策略结合在一个新颖的架构中,该架构获取并推理人类可读的知识,以协作和动态地解决问题。其结果是将专家解决问题的情报更加透明且更具成本效益地交付到对话和发现应用程序中。

Confluence Cloud 为 AI 平台提供支持,以实现可扩展的实时数据和数据集成用例。我建议您查看他们的网站,从各种令人印象深刻的用例中学习。

Apache Kafka 作为 GenAI 企业架构的中枢神经系统

生成式人工智能(GenAI)需要改变人工智能/机器学习企业架构。增强模型、LLM、带有向量数据库的 RAG 和语义搜索需要数据集成、关联和解耦。使用 Kafka 和 Flink 进行数据流可以为您提供帮助。

许多应用程序和数据库使用 REST/HTTP、SQL 或其他接口进行请求-响应通信。那完全没问题。为您的数据产品和应用程序选择正确的技术和集成层。但要保证数据的一致性。

使用 Apache Kafka 和 Apache Flink 进行数据流处理使开发人员和数据工程师能够专注于其数据产品或集成项目中的业务问题,因为它真正解耦了不同的领域。可以通过 HTTP、Kafka API、AsyncAPI、来自数据库的 CDC、SaaS 接口和许多其他选项与 Kafka 集成

Kafka 能够将系统与任何通信范例连接起来。其事件存储以毫秒为单位共享数据(即使在极端规模下),但也为速度较慢的下游应用程序保留数据并重播历史数据。数据网格的心脏必须实时跳动。对于任何优秀的企业架构来说都是如此。 GenAI 没有区别。

如果觉得文章对于有帮助,欢迎点赞+收藏并关注哈~(也可以关注我的公众号:Halo咯咯)

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

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

相关文章

人体检测web应用

本文是一个深度学习模型web页面部署的一个demo;具体是利用yolox人体检测模型通过flask接口接收前端请求,利用简单的html页面展示检测结果。 文章目录 1、代码结构2、封装YOLOX检测类3、定义flask接口 代码地址: https://github.com/lishanl…

数字乡村战略实施:科技引领农村经济社会全面发展

随着信息技术的快速发展,数字化已经成为推动经济社会发展的重要力量。在乡村振兴战略的大背景下,数字乡村战略的实施成为了引领农村经济社会全面发展的关键。本文将从数字乡村战略的内涵、实施现状、面临挑战及未来展望等方面,探讨科技如何引…

快排(六大排序)

快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所…

C语言例4-35:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡、问鸡翁、鸡母和鸡雏各几何?

方法一&#xff1a; 代码如下&#xff1a; //鸡翁一&#xff0c;值钱五&#xff1b;鸡母一&#xff0c;值钱三&#xff1b;鸡雏三&#xff0c;值钱一。百钱买百鸡、问鸡翁、鸡母和鸡雏各几何&#xff1f; //方法一&#xff1a; #include<stdio.h> int main(void) {int x…

面向对象-接口

面向对象-接口 1. 接口的概念 ​ 接口就是规范\规则&#xff0c;我们可以使用接口来定义一些规则&#xff08;比如要求某个方法的方法名必须叫什么&#xff0c;方法的参数列表必须是什么&#xff0c;方法的返回值类型必须是什么&#xff09; ​ 现实生活中的规范 2. 接口的…

资讯头条P3自媒体搭建

自媒体素材管理与文章管理 一.后台搭建 1.1 搭建自媒体网关 导入网关模块>>>在网关模块的pom.xml文件中添加该子模块>>>刷新maven <modules><module>heima-leadnews-app-gateway</module><!--新增--><module>heima-leadnew…

HarmonyOS 应用开发之UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本文将从如下场景…

使用优化型读取和 pgvector,提高 Amazon Aurora 上生成式 AI 工作负载的性能

生成式 AI 为企业带来了更多的机会&#xff0c;可以构建需要搜索和比较非结构化数据类型&#xff08;例如文本、图像和视频等&#xff09;的应用程序。通过 嵌入体 或 向量&#xff0c;以机器可读的格式捕获这些非结构化数据的含义和上下文&#xff0c;然后基于这种方法&#x…

C语言结合体和枚举的魅力展现

前言 ✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱’博客 所属栏目&#xff1a;人工智能 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 引言: 前面我们已经讲了结构体的声明&#xff0c;自引用&#xff0c;内存…

Kibana操作Elasticsearch教程

文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有&#xff08;match_all&#xff09;匹配查询多字段查询词条匹配多词条精确…

图片标注编辑平台搭建系列教程(4)——fabric几何定制渲染

背景 标注的几何&#xff0c;有时需要一些定制化的渲染样式&#xff0c;例如&#xff0c;线中间展示箭头&#xff0c;表示方向。本期教程教大家如何实现fabric几何定制化渲染。 带箭头的线 fabric提供了一些原生的几何&#xff0c;例如Point、Polyline、Polygon。同时提供了…

【快速上手ESP32(基于ESP-IDFVSCode)】01-环境配置GPIO口延时函数(先点个灯)

前言 立创开发板之前出了个ESP32S3R8N8的开发板&#xff0c;当时嫖了个优惠券&#xff0c;九块九拿下了。 现在不仅是35.9一个&#xff0c;而且还没货。 如果真的想要的小伙伴可以自己去打板焊一个&#xff0c;人家开源了&#xff08;目测难度较大&#xff0c;反正我是焊不上…

vue-devtools 不显示的问题

vue 项目中浏览器右上角可以显示出插件&#xff0c;但是控制台却没有显示。 项目中在main.js中添加设置devtools为trueVue.config.devtools true插件显示可以使使用&#xff0c;控制台没有显示VUE选项 项目使用了 externals 打包优化&#xff0c;使用了vue的压缩版本&#x…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

Intel Arc显卡安装Stable Diffusion

StableDiffusion是一种基于深度学习的文本到图像生成模型&#xff0c;于2022年发布。它主要用于根据文本描述生成详细图像&#xff0c;也可应用于其他任务&#xff0c;如内补绘制、外补绘制和在提示词指导下生成图像翻译。通过给定文本提示词&#xff0c;该模型会输出一张匹配提…

Nagios工具

一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具&#xff0c;能有效监控 Windows、Linux 和 Unix 的主机状态&#xff0c;交换机路由器等网络设置&#xff0c;打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员&#xff0c;在状态恢复后…

不愧是字节出来的,真厉害...

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始…

互联网轻量级框架整合之JavaEE基础

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件&#xff0c;主要用于企业级互联网系统的框架搭建&#xff0c;同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势&#xff0c;其迅速成为构建企业互联网平台的主流技术&#x…

4T第十四届省赛模拟2

一、Seg 温度读取&#xff1a; ①温度 温度读他读出来就是有精度的所以自带小数 我们读取的时候直接强制类型转换读它的各个位也不会丢失精度 ②电压 电压是你人为的/51.0了&#xff0c;从char->float->char所以会有精度丢失 所以要用原始数据来换算 在原始数据上多…

web布局——说清楚fixed布局

极限省流 想要fixed做导航页面&#xff1a;指定清楚top、left、right、bottom&#xff0c;没指定清楚布局位置就会采用默认的方式&#xff1a; 0&#xff09;父元素的padding&#xff1a;fixed元素相对位移 1&#xff09;同级元素是fixed元素&#xff1a;覆盖 2&#xff09…