如何构建一个生产级的AI平台(1)?

本文概述了生成式 AI 平台的常见组件、它们的作用以及它们的实现方式。

本文重点介绍部署 AI 应用程序的整体架构。

它讨论了需要哪些组件以及构建这些组件时的注意事项。

它不是关于如何构建 AI 应用程序。
这就是整体架构的样子。


这是一个相当复杂的系统。



这篇文章将从最简单的架构开始,逐步添加更多组件。

在最简单的形式中,应用程序接收查询并将其发送到模型。模型生成响应,该响应将返回给用户。

模型 API 框是指第三方 API(例如 OpenAI、Google、Anthropic)和自托管 API。

  1. 通过为模型提供对外部数据源和信息收集工具的访问权限,增强模型的上下文输入
  2. 设置防护机制以保护系统和用户。
  3. 添加模型、路由器和网关以支持复杂的管道并增加更多安全性。
  4. 使用缓存优化延迟和成本。
  5. 添加复杂的逻辑和编写操作以最大限度地发挥系统的功能。

1.增强上下文

平台的初始扩展通常涉及添加机制,以允许系统使用必要的信息来扩充每个查询。收集相关信息称为上下文构建。

许多查询需要上下文来回答。上下文中的相关信息越多,模型对内部知识的依赖就越少,由于其训练数据和训练方法,这些知识可能不可靠。研究表明,在上下文中访问相关信息可以帮助模型生成更详细的反应,同时减少幻觉(Lewis 等人,2020 年)。

例如,给定查询“Acme 的 fancy-printer-A300 是否打印 100pps?”

如果给定 fancy-printer-A300 的规格,模型将能够更好地响应。

基础模型的上下文构建等同于经典 ML 模型的特征工程。

它们的作用相同:为模型提供处理输入所需的信息。

情境学习,即从情境中学习,是一种持续学习的形式。它使模型能够不断整合新信息以做出决策,防止其过时。例如,除非新信息包含在其上下文中,否则使用上周数据训练的模型将无法回答有关本周的问题。

通过使用最新信息(例如 fancy-printer-A300 的最新规格)更新模型的上下文,模型将保持最新状态,并可以响应超过其截止日期的查询。

RAGs

上下文构造最著名的模式是 RAG,即 Retrieval-Augmented Generation。

RAG 由两个组件组成:生成器(例如语言模型)和检索器,检索器从外部来源检索相关信息。


检索并非 RAG 所独有。它是搜索引擎、推荐系统、日志分析等的支柱。

为传统检索系统开发的许多检索算法可用于 RAG。

检索并非 RAG 所独有。它是搜索引擎、推荐系统、日志分析等的支柱。

为传统检索系统开发的许多检索算法可用于 RAG。

加载并 Chunk(分块)来自外部内存源的数据后,使用两种主要方法执行检索:

1 基于字词的检索

这可以像关键字搜索一样简单。

例如,给定查询 “transformer”,获取包含此关键字的所有文档。

更复杂的算法包括 BM25(利用 TF-IDF)和 Elasticsearch(利用倒排索引)。

基于术语的检索通常用于文本数据,但它也适用于具有文本元数据(如标题、标签、标题、注释等)的图像和视频。

2 基于嵌入的检索(也称为向量搜索)

可以使用嵌入模型(如 BERT、句子转换器)以及 OpenAI 或 Google 提供的专有嵌入模型,将数据块转换为嵌入向量。

给定一个查询,将检索其向量最接近查询嵌入的数据(由向量搜索算法确定)。

向量搜索通常被定义为最近邻搜索,使用近似最近邻 (ANN) 算法,

例如 FAISS(Facebook AI 相似性搜索)、Google 的 ScaNN、Spotify 的 ANNOY 和 hnswlib。

ANN-benchmarks 网站使用四个主要指标比较多个数据集上的不同 ANN 算法,同时考虑到索引和查询之间的权衡:

  • Recall:算法找到的最近邻的分数。
  • 每秒查询次数 (QPS):算法每秒可以处理的查询次数。这对于高流量应用至关重要。
  • Build time:构建索引所需的时间。此指标非常重要,尤其是在需要频繁更新索引时(例如,因为数据发生变化)。
  • 索引大小:算法创建的索引的大小,这对于评估其可扩展性和存储要求至关重要。

这不仅适用于文本文档,还适用于图像、视频、音频和代码。

许多团队甚至尝试汇总 SQL 表和数据帧,然后使用这些摘要生成 embeddings 以进行检索。

基于字词的检索比基于 embeddings 的检索更快、更便宜。
它可以开箱即用,使其成为一个有吸引力的开始选择。
BM25 和 Elasticsearch 在行业中得到广泛应用,是更复杂的检索系统的强大基准。

基于 embeddings 的检索虽然计算成本高昂,但随着时间的推移可以得到显著改进,从而优于基于术语的检索。
生产级别的检索系统通常结合了多种方法。

将基于字词的检索和基于 embeddings 的检索相结合称为混合搜索。

一种常见的模式是 sequential。

  • 首先,使用便宜、不太精确的检索器(例如基于术语的系统)来获取候选项。
  • 然后,一种更精确但成本更高的机制(例如 k 最近邻)会找到这些候选者中的最佳值。这一步也称为重新排名(reranking)。
例如,
给定术语 “transformer”,可以提取包含单词 transformer 的所有文档,
无论它们是关于电子设备、神经体系结构还是电影。然后,使用向量搜索在这些文档中查找实际 transformer 查询相关的文档。

上下文 reranking 与传统搜索 reranking 的不同之处在于,参与 reranking 元素的确切位置不太重要。

在搜索中,元素的排名(例如,第一或第五)至关重要。

在上下文 reranking 排序中,文档的顺序仍然很重要,因为它会影响模型处理文档的程度

正如论文 Lost in the middle (Liu et al., 2023) 所建议的那样,

模型可以更好地理解上下文开头和结尾的文档。

但是,只要包含文档,与搜索排名相比,其顺序的影响就不那么显著。


另一种模式是 ensemble。

请记住,这种模式的检索器的工作原理是按文档与查询的相关性分数对文档进行排名。
使用多个检索器同时获取候选内容,然后将这些不同的排名组合在一起以生成最终排名。



包含表格数据的 RAG

外部数据源也可以是结构化的,例如 DataFrame 或 SQL 表。

从 SQL 表中检索数据与从非结构化文档中检索数据有很大不同。

给定一个查询,系统的工作方式如下:

  1. Text-to-SQL:根据用户查询和表架构,确定需要的 SQL 查询。
  2. SQL 执行:执行 SQL 查询。
  3. 生成:根据 SQL 结果和原始用户查询生成响应。


对于 Text 到 SQL 步骤,如果有许多可用表的架构无法全部适应模型上下文,

则可能需要一个中间步骤来预测每个查询要使用哪些表。

Text 到 SQL 可以由用于生成最终响应的相同模型或许多专门的文本到 SQL 模型之一来完成。



Agentic RAGs

一个重要的数据来源是 Internet。

Google 或 Bing API 等 Web 搜索工具可以让模型访问丰富的最新资源,以收集每个查询的相关信息。例如,给定查询“Who won Oscar this year?”,

系统会搜索有关最新 Oscar 的信息,并使用此信息生成对用户的最终响应。

基于字词的检索、基于嵌入的检索、SQL 执行和 Web 搜索是模型可以采取的用于增强其上下文的操作。

可以将每个操作视为模型可以调用的函数。


可以合并外部操作的工作流程也称为 agentic。

基本的架构图如下所示:

» Action 和 tool «

工具允许执行一个或多个操作。

例如,人员搜索工具可能允许两个操作:按姓名搜索和按电子邮件搜索。

但是,差异很小,因此许多人可以互换使用 action 和 tool。

» 只读操作与写入操作 «

从外部源检索信息但不更改其状态的操作是只读操作。

给模型写操作,例如更新表中的值,使模型能够执行更多任务,但也带来了更多风险,这将在后面讨论。

Query rewriting

通常,需要重写用户查询,以增加获取正确信息的可能性。请考虑以下对话。

User: When was the last time John Doe bought something from us?
AI: John last bought a Fruity Fedora hat from us two weeks ago,
on January 3, 2030.
User: How about Emily Doe?

最后一个问题,“Emily Doe 怎么样?”,是模棱两可的。

如果逐字使用此查询来检索文档,则可能会得到不相关的结果。
需要 Query rewriting 重写这个查询以反映用户实际询问的内容。

新查询本身应该有意义。

最后一个问题应该改写为“Emily Doe 上一次从我们这里买东西是什么时候?

查询重写通常使用其他 AI 模型完成,

使用类似于“给定以下对话,重写最后一个用户输入以反映用户实际询问的内容”的提示。


Query rewriting 可能会变得复杂,尤其是在需要进行身份解析或整合其他知识时。

如果用户问 “How how how his wife?”,

首先需要查询数据库以找出他的妻子是谁。

如果没有此信息,重写模型应承认此查询无法解决,
而不是产生名称幻觉,从而导致错误的答案。



后续的内容咱们会讲一下:

  • 为大模型应用构建安全防护
  • 添加模型路由器和网关
  • 使用缓存减少延迟
  • 添加复杂逻辑和写入操作
  • AI 应用平台的可观察性
  • AI 应用 Pipeline 构建

原文链接:https://huyenchip.com/2024/07/25/genai-platform.html

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

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

相关文章

css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用

1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…

SpringBoot技术栈:打造下一代网上租赁系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

传统操作系统和分布式操作系统的区别

分布式操作系统和传统操作系统之间的区别&#xff0c;根植于它们各自的设计哲学和目标。要理解这些差异&#xff0c;需要从操作系统的基本定义、结构、功能以及它们在不同计算环境中的表现进行分析。每种系统都试图解决特定的计算挑战&#xff0c;因此在不同的使用场景下具有各…

基于springboot+vue的社区流浪动物救助系统

摘要 本文介绍了一个基于Spring Boot和Vue.js技术的社区流浪动物救助系统。该系统采用前后端分离架构&#xff0c;后端使用Spring Boot框架进行开发&#xff0c;负责业务逻辑的处理和数据的交互&#xff1b;前端则使用Vue.js框架&#xff0c;为用户提供友好的交互界面。系统实现…

Springboot学习笔记(4)MybatisPlus

1. MybatisPlus 1.1 ORM介绍 ORM&#xff08;Object Relational Mapping&#xff0c;对象关系映射&#xff09;是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。 比如&#xff0c;将java中的对象传递到关系型数据库中去&#xff0c;或者将关系型数据库传递到jav…

HarmonyOS Next系列之水波纹动画特效实现(十三)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

Webpack 打包后文件过大,如何优化?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack 打包后文件过大&#xff0c;如何优化&#xff1f;1. 代码分割&#xff08;Code Splitting&#xff09;1.1 概念1.2 Webpack 的 SplitChunksPlugin示例配置&#xff1a; 1.3 按需加载&#xff08;Lazy Loading&#xff09;示…

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真&#xff0c;研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型&#xff0c;并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

字体文件压缩

技术点 npm、html、font-spider 实现原理 个人理解&#xff1a;先引入原先字体&#xff0c;然后重置字符为空&#xff0c;根据你自己填充文字、字符等重新生成字体文件&#xff0c;因此在引入的时候务必添加自己使用的文字、字符等&#xff01;&#xff01;&#xff01; 实…

高校体育场小程序|高校体育场管理系统系统|体育场管理系统小程序设计与实现(源码+数据库+文档)

高校体育场管理系统小程序 目录 体育场管理系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

ClickHouse入库时间与实际相差8小时问题

原因一&#xff1a;服务端未修改默认时区 解决方案&#xff1a; 1、找 ClickHouse 配置文件 config.xml&#xff0c;通常位于 /etc/clickhouse-server/ 目录。 2、编辑 config.xml 文件&#xff0c;找到 <timezone> 标签。如果标签不存在&#xff0c;需要手动添…

unity一键注释日志和反注释日志

开发背景&#xff1a;游戏中日志也是很大的开销&#xff0c;虽然有些日志不打印但是毕竟有字符串的开销&#xff0c;甚至有字符串拼接的开销&#xff0c;有些还有装箱和拆箱的开销&#xff0c;比如Debug.Log(1) 这种 因此需要注释掉&#xff0c;当然还需要提供反注释的功能&am…

避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 当今的学术环境中&#xff0c;保持学术诚信至关重要。随着ChatGPT等技术的发展&#xff0c;写作变得更加高效&#xff0c;但也增加了不当使用的风险。严格的引用和避免抄袭不仅是学术道…

C++基础---类和对象(上)

1.类的定义 C程序设计允许程序员使用类&#xff08;class&#xff09;定义特定程序中的数据类型。这些数据类型的实例被称为对象 &#xff0c;这些实例可以包含程序员定义的成员变量、常量、成员函数&#xff0c;以及重载的运算符。语法上&#xff0c;类似C中结构体&#xff0…

Jmeter常用函数、逻辑控制器

目录 一、Jmeter常用函数 counter函数 machineName函数 machineIP函数 Random函数 RandomString函数 RandomDate函数 time函数 二、逻辑控制器 IF控制器 循环控制器 foreach控制器 仅一次控制器 事务控制器 聚合报告 随机控制器 随机顺序控制器 一、Jmeter常用…

趣味运动会分组记分指南

团队比赛时如何记分&#xff1f; 趣味运动会的组织过程中&#xff0c;分组和记分是两个关键环节。云分组小程序提供了一个高效的解决方案&#xff0c;无论是随机分组还是内定分组&#xff0c;都能轻松实现。系统还能自动统计积分和排名&#xff0c;极大简化了组织者的工作。 分…

如何在Python中计算移动平均值?

在这篇文章中&#xff0c;我们将看到如何在Python中计算移动平均值。移动平均是指总观测值集合中固定大小子集的一系列平均值。它也被称为滚动平均。 考虑n个观测值的集合&#xff0c;k是用于确定任何时间t的平均值的窗口的大小。然后&#xff0c;移动平均列表通过最初取当前窗…

Android Studio | 无法识别Icons.Default.Spa中的Spa

编写底部导航栏&#xff0c;涉及到Spa部分出现报红&#xff1a; 解决办法&#xff1a;在build.gradle.kts中引入图标依赖 dependencies {implementation "androidx.compose.material:material-icons-extended:<version>" }

Linux相关概念和重要知识点(9)(父进程、子进程、进程状态)

1.父进程、子进程 &#xff08;1&#xff09;父进程 CLI本质上是一款命令行界面的软件&#xff0c;是用户调用接口层面的程序&#xff08;上层&#xff0c;可以和系统调用接口做沟通&#xff09;&#xff0c;CLI和GUI是同级别的。用户的操作都是建立在CLI和GUI之上的。 但是…

SPI驱动OLED

OLED像素发光原理 OLED-有机发光半导体&#xff0c;在有机高分子聚合物的两端施加电压可发光,LED基于金属硅片发光&#xff0c;而OLED可以附于玻璃、塑料&#xff0c;可以用OLED做出曲面屏折叠屏&#xff0c;不同于LCD&#xff0c;OLED没有背光板&#xff0c;每个像素可以独立…