GenAI 生态系统现状:不止大语言模型和向量数据库

33c19ae88e9819f4916f7a73ef0eb02a.png

5a07dc1179ffe9aa4f68f755aa94fa7c.png

自 20 个月前 ChatGPT 革命性的推出以来,生成式人工智能(GenAI)领域经历了显著的发展和创新。最初,大语言模型(LLMs)和向量数据库吸引了最多的关注。然而,GenAI 生态系统远不止这两个部分,它更加广泛和复杂。向量数据库是是赋能 GenAI 应用的关键基础设施,作为其构建者我对于快速的技术进步及向量数据库对行业的影响感到非常兴奋。在本文中,我想回顾一下,并分享对 GenAI 生态系统现状的一些思考。

生成式 AI 应用大致可以分为两种主要类型:检索增强生成(RAG)和多媒体生成。RAG 结合了信息检索技术与生成式语言模型,以产生相关且连贯的输出。另一方面,多媒体生成利用生成式模型创造复杂的视觉内容,包括创意广告和数字孪生(Digital twins)。

9d7ef92f8a259cbc2ffc4fb5cba5dec8.png

检索增强生成(RAG)

检索增强生成(Retrieval-Augmented Generation, RAG)是当前 GenAI 领域中非常流行的一种应用。RAG 系统通常由数据清洗、Embedding 模型、向量数据库和 LLM 等组件构成。更高级的生产级 RAG 系统通常包括额外的组件来增强质量和用户体验。

典型的搜索系统可以分为两个主要部分:离线索引部分和在线查询服务部分。类似地,RAG 包括索引阶段和在线查询服务阶段:

  • 索引阶段:索引阶段涉及从各种来源获取数据,包括数据库、API 和文件系统。这些数据经过文件解析和文本分块处理,为分析做准备。处理后,数据被 Embedding 到适当的格式,并加载到向量数据库中,以便有效检索。一些 RAG 系统甚至采用高级数据挖掘技术,如标签提取、知识图谱构建和摘要,以丰富数据并改进检索过程。

  • 服务阶段:在线查询服务阶段专注于理解用户的查询意图,并采用各种检索方法,包括向量相似性搜索,以找到最相关的信息。检索结果随后被发送到 LLM 进行生成。在这一步中,LLM 基于检索到的数据生成连贯且符合上下文的输出。此外,LLM 还可以作为代理,利用外部工具来增强其能力,并提供更全面和准确的响应。

因此,许多编排项目提供了各种组件的实现和配置选项。架构的复杂性也要求系统既要作为白盒也要作为黑盒进行评估,这促进了评估框架的发展。

每个组件还吸引了旨在构建更好、更丰富功能的开发者,例如每个数据源的 Connector 和针对特定用例量身定制的 Embedding 模型。LLM 推理框架为 LLM 提供了更灵活的部署选项,不仅仅是 API 服务。此外,代理框架有助于更好地利用 LLM 的推理和工具使用能力。

此外,一些项目从不同的角度处理 RAG,探索替代的检索方法,如知识图谱,开发 Web 前端框架以增强 UI 体验,并创建开箱即用的解决方案,提供包括聊天机器人 UI 在内的整个 RAG 工作流程。

1. 工作流程编排与优化

为了管理 RAG 应用的复杂工作流程,广泛使用了如 LangChain、LlamaIndex、Haystack、DSPy 和 Semantic Kernel 等 SDK。这些编排框架使开发者能够构建、定制和测试 RAG Pipeline,确保这些 Pipeline 被组合以实现特定用例的最佳生成答案质量。

示例:LlamaIndex

LlamaIndex 是一个用于构建基于 LLM 的上下文增强应用的框架。它通过提供数据 Ingestion、解析、索引和查询工具,允许开发者将 LLM 与私有数据集成。这种方法通过结合来自用户特定数据源(如 API、SQL 数据库和文档)的上下文,让使用 LLM 搭建特定应用(例如问答、聊天机器人和文档理解)变得更加容易。LlamaIndex 提供了常用组件(如各种分块策略和混合搜索方法)的便捷程序 abstraction。

2. 质量评估与监控

由于 RAG 是一个复杂的系统,在特定场景中实现最佳结果可能具有挑战性。应对这些挑战需要一个科学的评估方法。诸如 Ragas、Arise、Langfuse、Relari AI、Giskard 和 DeepEval 等项目提供了评估和监控所需的指标和工具。它们允许开发者定量地测量、监控和排错他们的 RAG 系统。

示例:Ragas

Ragas 是一个用于评估 RAG  Pipeline 的全面框架。Ragas 提供了评估答案质量指标的工具,例如忠实度、相关性和上下文精确度。它支持生成合成测试数据集、监控生产中的 RAG 应用程序,以及与 AI 工具和平台(如 LangChain 和 LlamaIndex)的集成。通过提供一个包含关键性能方面的 Harmonized Ragas 评分,该框架简化并量化了评估过程,最终提高了 RAG Pipeline 的有效性和可靠性。

3. 数据 Connector 和网络抓取

能够无缝集成和处理来自多个源的数据至关重要。像 Airbyte、Fivetran 这样的平台在提供强大的数据 Connector 方面处于领先地位,以及 Apify 和 Zyte 用于网络抓取。它们使企业能够高效地收集、转换和整合数据到 RAG 工作流程中,从而更容易地利用 AI 完成关键任务。数据获取和连接性对于传统搜索系统至关重要,它们在今天的 RAG 中同样重要,RAG 在某种程度上是搜索的一种新形式。

示例:Airbyte

Airbyte 是一个为构建提取和加载(EL)数据 Pipeline 而设计的开源数据传输平台。与许多关注主要服务的数据 Pipeline 平台不同,Airbyte 还支持整合较小的、经常被忽视的服务。通过维护大量的 Connector 并促进社区分享定制 Connector,Airbyte 使公司能够为其特定需求创建定制化的解决方案。其强大的数据 Connector 可以将非结构化数据转换为 Embedding 向量,并加载到 Milvus 等向量数据库中,用于语义相似性搜索。这种能力对于企业来说,有助于高效地收集、转换和整合数据到 RAG 工作流程中,增强 AI 驱动的决策和搜索应用。

4. Embedding  和 Reranker 模型

像 Embedding 模型这样的深度神经网络正在改变非结构化数据的处理和理解方式。OpenAI、Cohere、Voyage AI、Jina AI 和 Twelve Labs 等公司在开发将文本和多模态数据转换为数值向量的高级模型方面处于领先地位。这些 Embedding 模型使得近似最近邻(ANN)向量搜索成为可能,允许应用程序提供高度相关的结果和洞察。

除了通用的 Embdding 模型,像 Voyage AI 这样的公司创建了专门化的模型,以提高特定垂直领域的数据质量,如法律和金融,而 Twelve Labs 专注于视频检索 Embedding 模型。Reranker 是经过专门训练的模型,它们比较查询和一小组候选文档之间的语义相关性,可以进一步提高初始基于向量的检索阶段的结果准确性。Cohere、Voyage AI 和 Jina AI 等公司提供 Reranker 以提高检索准确性。

示例:Voyage AI

Voyage AI 是一个由斯坦福大学和麻省理工学院的 AI 研究人员组成的团队,专注于检索模型,包括 Embedding 模型和 Reranker。他们领先的模型 voyage-2 通过文本对比学习训练,提供了比 OpenAI 的文本 Embedding 模型等行业标准更高的检索准确性、扩展的上下文窗口和高效的推理。Voyage AI 提供通用和特定领域模型,为金融、多语言环境、法律工作和代码检索等领域优化。Voyage AI 还提供 Reranker,以增强检索结果。

5. LLM 推理和托管

随着对 LLM 应用的需求不断增长,高效的托管和推理解决方案变得至关重要。像 vLLM、Lepton AI、Fireworks AI 和 Octo AI 这样的项目为部署和扩展 LLM 提供了强大的基础设施。它们结合了各种推理优化,确保模型在服务期间高效运行。

示例:vLLM

vLLM 是一个用于优化 LLM 推理和服务的开源库。它使用 PagedAttention 机制有效管理内存,并支持对传入请求进行持续批处理。该库通过 CUDA/HIP 图快速执行模型,并包括各种量化技术,如 GPTQ、AWQ、SqueezeLLM 和 FP8 KV 缓存。vLLM 与流行的 HuggingFace 模型无缝集成,提供高吞吐服务,并带有并行采样和 beam search 等解码算法。它支持分布式推理的张量(tensor)和 Pipeline 并行、流式输出,并包括一个与 OpenAI 兼容的 API 服务器。此外,它还提供前缀缓存和多 LoRA 支持等实验性功能,并针对 NVIDIA 和 AMD GPU 进行了优化。

6. 代理和内存管理

GenAI 生态系统在内存管理和基于代理的 AI 系统方面正在取得进展,解决方案如 MemGPT、Mem0、Camel、AutoGPT 和 CrewAI 等。这些创新使 AI 应用能够记住对话历史、利用工具和相互交互,提供更个性化和上下文感知的交互,显著增强用户体验。

示例:MemGPT

MemGPT 是一个开源项目,它旨在简化 Stateful LLM 代理的开发与部署。该项目借鉴了传统操作系统中的内存层次和控制流程,使得 MemGPT 能够自动且智能地管理不同层级的存储,为 LLM 在有限的上下文窗口中提供更广阔的上下文视野。MemGPT 通过 RAG 技术加强了与外部数据源的连接,并支持自定义工具或功能的设定与调用,从而简化了开发高级有状态 LLM 代理的过程。

7. 外部工具和代理 API

外部工具和 API 对于扩展代理的能力至关重要。像 Bing API、Google Search API、Twilio 等服务,以及 OpenAPI 等框架,促进了代理与工具的交互,使应用能够访问和利用外部数据、服务和功能。

示例:Bing API

Bing 搜索 API 套件,包括网页和图像搜索等服务,提供安全、无广告、并具有位置感知的搜索结果。这使得代理能够通过单一的 API 调用访问来自数十亿的网络文档、图像、视频和新闻信息。

8. 前端和搜索/聊天用户界面体验

创建与 AI 应用交互的直观界面对于用户至关重要。像 Streamlit、Vercel 和 Gradio 这样的框架通过提供用户友好的 UI 体验,简化了 AI 应用的开发流程。开发者可以利用这些框架来定制界面,以满足 AI 交互的特定需求,比如为 RAG 应用设计聊天界面,以及为视觉搜索添加图片选择、编辑和浏览等功能。

示例:Streamlit

Streamlit 是一个开源的 Python 框架,专为数据科学家和 AI/ML 工程师设计,它允许用户以极少的代码快速构建动态且交互式的数据应用。该框架采用直观的语法,省去了对 CSS、HTML 或 JavaScript 的依赖,让用户能够迅速开发并部署应用。Streamlit 与 Pandas、NumPy 等流行数据科学库无缝集成,并支持构建 AI 驱动应用所需的后端组件。

9. 知识图谱(KG)

知识图谱通过提供结构化数据,增强了 RAG 性能,从而提升了信息检索的精确度和相关性,使得 AI 生成的响应更加准确且富有上下文感知。如 WhyHow、GraphRAG 和 HippoRAG 等项目将知识图谱与 RAG 技术相结合,以此提升检索结果和生成答案的质量。

示例:WhyHow

WhyHow 是一个平台,旨在帮助开发者更高效地组织和检索非结构化数据,专注于利用知识图谱来增强复杂的 RAG 系统。该平台提供了灵活的数据 Ingestion 工具,支持创建多用户协作的图谱,以促进开发者与非技术领域的专家之间的协作。它还允许进行细致的 Schema 操作,以便将图谱定制化以适应特定的用例。WhyHow 侧重于小型、模块化的图谱和向量块,以此提高信息检索的精确性。该平台兼容向量数据库,并提供了多种格式的导出功能。此外,WhyHow 还提供了一个开源的基于规则(rule-based)的检索包,通过高级过滤技术,助力创建更精确的检索流程。

10. 开箱即用的低代码 RAG 服务

对于 RAG 技术,市场对于即插即用和低代码解决方案的需求日益增长。如 AnythingLLM、PrivateGPT、Dify、Shakudo、Vectara、Epsilla 和 FlowiseAI 等项目,提供了用户友好的解决方案和灵活的定制选项,使得企业能够在不具备数据 Pipeline 和搜索基础设施开发专长的情况下,迅速部署 AI 应用。

示例:AnythingLLM

AnythingLLM 是一个多合一的 AI 应用程序,它提供了交互式 RAG 聊天机器人和 AI 代理,且无需任何编码工作。这一平台专为那些希望快速实现私有化、零配置解决方案或需要定制 AI 应用但又缺乏编码知识的企业设计。AnythingLLM 支持各类商业和开源的 LLM 以及向量数据库。它通过本地和远程部署方式,为用户提供了全面的技术栈。其核心功能包括:用于高效文档管理的工作区、具备细致权限控制的多用户支持、能够进行网页浏览和代码执行的代理、个性化的嵌入式聊天窗口,以及对多种文档格式的广泛支持。此外,AnythingLLM 还为开发者提供了强大的 API,以便进行个性化集成。

11. 图像和视频生成

GenAI 生态系统不仅仅局限于文本应用的范畴;它同样在图像与视频生成领域取得了显著的突破。

创意生成和数字孪生

如 Midjourney、Stability AI、Runway、Pika 和 HeyGen 等工具正借助 AI 驱动的解决方案,引领创意产业的革命,它们能够生成精美绝伦的图像和视频。这些平台为艺术家、营销专家和开发者们提供了强大的能力,使他们能够创作出引人入胜的视觉作品,不断拓展创意和创新的疆域。

示例:Midjourney

Midjourney 是由位于旧金山的独立研究实验室 Midjourney, Inc. 开发的一款先进的生成式 AI 程序和服务。它能够根据自然语言的描述或 Prompt,创造出高质量的图像,这与 OpenAI 的 DALL-E 和 Stability AI 的 Stable Diffusion 有异曲同工之妙。用户可以通过 Discord 机器人与 Midjourney 进行互动,只需输入 /imagine 命令和相应的 Prompt,即可生成四幅图像,并选择进行放大。这一工具不仅展示了 GenAI 生态系统的进步,而且通过扩展数字内容创造的可能性,对创意产业产生了深远的影响。

总结

GenAI 生态系统是一个充满活力且日新月异的领域,它的显著特征是多样性和复杂性。从基础技术如LLM 和向量数据库,到数据采集、工作流程编排和图像生成的创新,GenAI 正在不断拓宽 AI 的疆界。随着不断的探索和创新,GenAI 在多个行业的变革潜力显得无比巨大。在 Zilliz,作为 Milvus 向量数据库的开发者,我们与 GenAI 领域的众多合作伙伴携手共进。我们热切期待见证并积极参与 GenAI 的持续演进,并对未来它所能开启的无限可能充满期待。

作者介绍

1e4242a8a2bdf784c77eeff2acff8581.jpeg

陈将

Zilliz 生态和 AI 平台负责人

推荐阅读

96fd406fffbd4983fd14aef7791ec67a.png

57c98d45db1f0a9d1455980b537798a0.png

9677fe0d08719f6c910c1dc132521459.png

4445dd51bc94015057b3c9b757081bab.png

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

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

相关文章

HTML、JavaScript和CSS实现注册页面设计

目录 一、实现要求 二、实现页面图 1、注册页面 2.用户ID、用户名、口令验证成功后显示页面 三、用户ID、用户名、口令、确定口令验证逻辑js代码 1、验证用户ID 2、验证用户名 3、验证口令密码 四、总结 五、代码仓库 一、实现要求 综合使用HTML、JavaScript和CSS进…

Vue前端开发:事件绑定方式

事件定义 在Vue中,当一个元素通过使用v-on或语法糖指令绑定某个事件后,则完成了事件被定义的过程,在这定义的过程中,指令的后面是定义事件的名称,等号的后面是事件被触发后执行的函数,当然,也可…

mac-ubuntu虚拟机(扩容-共享-vmtools)

一、磁盘扩容 使用GParted工具对Linux磁盘空间进行扩展 https://blog.csdn.net/Time_Waxk/article/details/105675468 经过上面的方式后还不够,需要再进行下面的操作 lvextend 用于扩展逻辑卷的大小,-l 选项允许指定大小。resize2fs 用于调整文件系统的…

【AAOS】【源码分析】CarSystemUI

目录 目录 概述 CarSystemUI组件 源代码 源码位置 主要模块 编译选项 CarSystemUI与SystemUI 编译方式 Car Emulator默认服务 CarSystemUI 启动流程 缩略词 概述 AAOS中的SystemUI虽然相较手机要简单不少,但却是车载开发中的一个重要组件,它负责管理和控制车机…

C++知识点复习

对于这些问题的回答,可以按照思维导图的结构来组织答案,然后再进行回答。 C11用过哪些特性? (首先,要回答好这个问题,需要注意问题的层次,不要一上来就说新增了某某关键字和语法,在…

.net framework 3.5sp1开启错误进度条不动如何解决

浏览器地址栏输入www.dnz9.com远程解决netframework问题 在Windows操作系统上安装或启用.NET Framework 3.5 SP1时,如果遇到进度条不动的问题,可能由多种原因引起。以下是一些可能的解决方案: 1. 使用Windows功能对话框 1.打开“控制面板”。…

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件,准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验,那么拆装调整相机挺麻烦的。 准备直接在电…

Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)

1. Spring 中常见注解 还有Recourse:相当于AutowiredQualifier Value : 用于将配置文件中的值注入到Bean的字段中。 Bean : 用于在配置类中声明一个Bean。 Lazy : 用于延迟加载Bean。 2. SpringMVC 中常见注解 还有GetMapping PostMapping PutMapping DeleteMapp…

掌握分布式系统的38个核心概念

天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢? 1. 架构设计 这一节将从一些经典的开源系统架…

OpenAI 的 Whisper:盛名之下,其实难副?

OpenAI 的 Whisper:盛名之下,其实难副? Whisper 的崛起与承诺 严重缺陷的曝光 风险分析 应对措施 结论 在人工智能的浪潮中,OpenAI 一直以其创新性和强大的技术实力备受瞩目。然而,最近 OpenAI 的语音转写工具 Wh…

【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1],里面讲,面试官说mysql的可重复读级别下有解决幻读的方式,最后公布了答案,是在sql后面加for update。这么说倒是没错,但是这种问法给我一种奇怪的感觉,因为for update无论在哪个隔离级…

Kaggle “Reducing Commercial Aviation Fatalities” 比赛 生理数据分析

1、背景 Kaggle在2018 年 12 月 20 日举办“Reducing Commercial Aviation Fatalities” 比赛,通过收集飞行员的生理数据,判断飞行员何时会遇到麻烦吗?该比赛主要分析飞行员的问题,因为航班多、时间不固定,飞行员会出…

Python 字符串类型中 ``split(“\n“)`` 与 ``splitlines()`` 方法的一些区别

最近在以 self.__print("#" * 20 "\n") 调用自己写的 __print 接口时发现打印的时候 "\n" 没有打出来,进而发现了 split("\n") 与 splitlines() 方法的一些区别。 一个是参数上,split 需要传递一个字符串作为…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的,增加了一些更强大和实用的特性。 特性: Android 5.0 以上点击会有水波纹效果 可以选择自定义…

““ 引用类型应用举例

#include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用se…

无人机避障——2D栅格地图pgm格式文件路径规划代码详解

代码和测试效果请看上一篇博客&#xff1a; 无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划-CSDN博客 更换模型文件.dae&#xff1a; 部分模型文件可以从这里下载&#xff1a; https://github.com/ethz-asl/rotors_simulator/wiki 将原先代码中的car.dae文件…

科研项目:利用AI大模型获得基金资助的10个原则

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 以ChatGPT为代表的大语言模型的诞生后&#xff0c;在学术界这些大模型LLM驱动的聊天机器人已经成为大家撰写和修订论文、基金申请书的流行工具。这些LLM经过千亿文本训练&…

CVE-2022-0185

这是一个关于整型溢出的CVE。 static int legacy_parse_param(struct fs_context *fc, struct fs_parameter *param) {struct legacy_fs_context *ctx fc->fs_private; // [1] ctx 与文件描述符相关unsigned int size ctx->data_size; // [2] size —— 目前已经写…

【Linux网络】TCP_Socket

目录 TCP协议&#xff08;传输控制协议&#xff09; listen状态 accept和connect TCP_echo_server (1)创建套接字 &#xff08;2&#xff09;绑定 &#xff08;3&#xff09;设置listen状态 &#xff08;4&#xff09;loop &#xff08;5&#xff09;客户端 多线程远程…