使用 Vertex AI 且支持 RAG 的生成式 AI 应用的基础设施

Last reviewed 2024-03-29 UTC

本文档提供了一个参考架构,可用于设计运行具有检索增强生成 (RAG) 功能的生成式人工智能 (AI) 应用的基础设施。本文档的目标受众群体包括生成式 AI 应用的开发者和管理员及云架构师。本文档假定您对 AI、机器学习 (ML) 和大语言模型 (LLM) 概念有基本的了解。本文档未提供有关如何设计和开发生成式 AI 应用的指导。

架构

下图简要展示了 Google Cloud 中支持 RAG 的生成式 AI 应用的架构:

Google Cloud 中支持 RAG 的生成式 AI 应用的概要架构。

该架构包含以下互连组件:

组件 目的 互动
数据注入子系统 准备和处理用于启用 RAG 功能的外部数据。 数据注入子系统通过数据库层与架构中的其他子系统进行交互。
服务子系统 处理生成式 AI 应用与其用户之间的请求-响应流。 服务子系统通过数据库层与数据注入子系统进行交互。
质量评估子系统 评估服务子系统生成的响应的质量。 质量评估子系统直接与服务子系统交互,并通过数据库层与数据注入子系统交互。
数据库 存储以下数据:
  • 提示次数
  • 用于 RAG 的数据的矢量化嵌入
  • 数据注入和质量评估子系统中无服务器作业的配置
架构中的所有子系统都与数据库进行交互。

下图显示了此架构的详细视图:

Google Cloud 中支持 RAG 的生成式 AI 应用的详细架构。

以下部分详细介绍了架构的每个子系统内的组件和数据流。

数据注入子系统

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

Google Cloud 中支持 RAG 的生成式 AI 应用的数据注入子系统。

以下是数据注入流程中的步骤:

  1. 数据会上传到 Cloud Storage 存储桶。数据源可以是执行上传、数据库注入或流式传输数据的应用用户。
  2. 上传数据后,系统会向 Pub/Sub 主题发送通知。
  3. Pub/Sub 会触发 Cloud Run 作业来处理上传的数据。
  4. Cloud Run 使用存储在 AlloyDB for PostgreSQL 数据库中的配置数据来启动作业。
  5. Cloud Run 作业使用 Document AI 准备数据以供进一步处理。例如,准备工作可能包括解析数据、将数据转换为所需的格式,以及将数据划分为区块。
  6. Cloud Run 作业使用 Vertex AI Embeddings for Text 模型创建所注入数据的矢量化嵌入

  7. Cloud Run 将嵌入存储在启用了 pgvector 扩展程序的 AlloyDB for PostgreSQL 数据库中。如下一部分所述,当服务子系统处理用户请求时,它会使用向量数据库中的嵌入来检索特定于领域的相关数据。

服务子系统

服务子系统会处理生成式 AI 应用与其用户之间的请求-响应流。下图展示了架构中服务子系统的详细信息:

Google Cloud 中支持 RAG 的生成式 AI 应用的服务子系统。

以下是服务子系统的请求-响应流中的步骤:

  1. 用户通过前端(例如聊天机器人或移动应用)向生成式 AI 应用提交请求。
  2. 生成式 AI 应用将自然语言请求转换为嵌入

  3. 应用会完成 RAG 方法的检索部分:

    1. 应用对由数据注入子系统维护的 AlloyDB for PostgreSQL 矢量存储区中的嵌入执行语义搜索。语义搜索可帮助根据提示的意图(而不是其文本内容)查找嵌入。
    2. 应用将原始请求与根据匹配的嵌入检索的原始数据相结合,以创建上下文化提示。
  4. 应用将上下文化提示发送到在 Vertex AI 上运行的 LLM 推理堆栈。

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

    1. 应用可以在 Cloud Logging 中存储请求-响应活动的日志。您可以通过 Cloud Monitoring 查看和使用监控日志。Google 不会访问或使用日志数据。
    2. 应用将响应加载到 BigQuery 以进行离线分析。
  6. 应用使用 Responsible AI 过滤条件过滤回复。

  7. 该应用通过前端将经过过滤的响应发送给用户。

质量评估子系统

下图展示了此架构中质量评估子系统的详细信息:

Google Cloud 中支持 RAG 的生成式 AI 应用的质量评估子系统。

质量评估子系统收到请求时,会执行以下操作:

  1. Pub/Sub 会触发 Cloud Run 作业。
  2. Cloud Run 使用存储在 AlloyDB for PostgreSQL 数据库中的配置数据来启动作业。
  3. Cloud Run 作业会从 AlloyDB for PostgreSQL 数据库拉取评估提示。这些提示之前由数据注入子系统上传到数据库。
  4. Cloud Run 作业使用评估提示来评估服务子系统生成的响应的质量。

    此评估的输出包括事实准确率和相关性等指标的评估分数。

  5. Cloud Run 将评估分数以及评估后的提示和响应加载到 BigQuery 以供将来分析。

使用的产品

下面总结了上述架构使用的所有 Google Cloud 产品:

  • Vertex AI:一个机器学习平台,可让您训练和部署机器学习模型和 AI 应用,以及自定义 LLM 以在 AI 驱动的应用中使用。
  • Cloud Run:一个无服务器计算平台,可让您直接在 Google 可伸缩的基础设施之上运行容器。
  • BigQuery:一种企业数据仓库,可帮助您使用机器学习地理空间分析和商业智能等内置功能管理和分析数据。
  • Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud 内部和外部访问,并且跨位置进行复制以实现冗余。
  • AlloyDB for PostgreSQL:与 PostgreSQL 兼容的全托管式数据库服务,专为要求苛刻的工作负载(包括混合事务和分析处理)而设计。
  • Document AI:一个文档处理平台,可从文档中获取非结构化数据并将其转换为结构化数据。
  • Pub/Sub:一种异步且可伸缩的通讯服务,可将生成消息的服务与处理这些消息的服务分离开。
  • Cloud Logging:具有存储、搜索、分析和提醒功能的实时日志管理系统。
  • Cloud Monitoring:可帮助您了解您的应用和基础设施的性能、可用性和健康状况的服务。

使用场景

RAG 是一种可提高从 LLM 生成的输出质量的有效技术。本部分提供可使用支持 RAG 的生成式 AI 应用的应用场景示例。

个性化产品推荐

在线购物网站可能会使用由 LLM 提供支持的聊天机器人来帮助客户查找产品或获取与购物相关的帮助。可以使用有关用户购买行为和网站互动模式的历史数据来增强用户提出的问题。数据可能包括存储在非结构化数据存储区中的用户评价和反馈,或存储在网络分析数据仓库中的搜索相关指标。然后,LLM 可以处理增强的问题,以生成个性化回复,用户可能认为这些回复更具吸引力和说服力。

临床辅助系统

医院中的医生需要快速分析和诊断患者的健康状况,从而做出有关适当的护理和药物的决策。使用 Med-PaLM 等医疗 LLM 的生成式 AI 应用可用于辅助医生完成临床诊断过程。应用生成的响应可以基于患者历史记录,具体方法是将医生的提示与来自医院电子健康记录 (EHR) 数据库或外部知识库(例如 PubMed)的数据结合在一起。

借助由生成式 AI 提供支持的法律研究,律师可以快速查询大量法规和判例法,以确定相关的法律先例或总结复杂的法律概念。可以使用从律师事务所专有的合同语料库、过往法律沟通和内部案例记录中检索到的数据来增强律师的提示,从而改进此类研究的输出结果。这种设计方法可确保生成的响应与律师专门从事的法律领域相关。

设计考虑事项

本部分提供的指导可帮助您在 Google Cloud 中开发支持 RAG 的生成式 AI 架构,以满足您在安全性和合规性、可靠性、费用和性能方面的特定要求。本部分中的指南并非详尽无遗。根据生成式 AI 应用的特定要求以及您使用的 Google Cloud 产品和功能,您可能需要考虑其他设计因素和权衡。

安全与合规性

本部分介绍在 Google Cloud 中设计和构建满足安全和合规性要求且支持 RAG 的生成式 AI 应用时,应该考虑的因素。

产品 设计考虑事项
Vertex AI Vertex AI 支持 Google Cloud 安全控制措施,可用于满足数据驻留、数据加密、网络安全和 Access Transparency 的要求。如需了解详情,请参阅 Vertex AI 的安全控制措施 生成式 AI 的安全控制措施
Cloud Run

默认情况下,Cloud Run 使用 Google 管理的加密密钥来加密数据。如需使用您控制的密钥保护容器,您可以使用客户管理的加密密钥 (CMEK)。如需了解详情,请参阅使用客户管理的加密密钥

如需确保仅将获得授权的容器映像部署到 Cloud Run 作业,您可以使用 Binary Authorization

Cloud Run 可帮助您满足数据驻留要求。 Cloud Run 容器实例在您选择的区域内运行。

AlloyDB for PostgreSQL

默认情况下,存储在 AlloyDB for PostgreSQL 中的数据会使用 Google 管理的加密密钥进行加密。如果您需要使用由您控制和管理的加密密钥,则可以使用 CMEK。如需了解详情,请参阅 CMEK 简介

为了降低 AlloyDB for PostgreSQL 数据库发生数据渗漏的风险,您可以使用 VPC Service Controls 来创建服务边界。

默认情况下,AlloyDB for PostgreSQL 实例仅接受使用 SSL 的连接。如需进一步保护与 AlloyDB for PostgreSQL 数据库的连接,您可以使用 AlloyDB for PostgreSQL Auth 代理连接器。Auth 代理连接器提供基于 Identity and Access Management (IAM) 的连接授权,并使用采用 256 位 AES 加密的 TLS 1.3 连接来验证客户端和服务器身份并加密数据流量。如需了解详情,请参阅 AlloyDB for PostgreSQL Auth 代理简介。对于使用 Java、Python 或 Go 创建的连接,请使用适当的语言连接器,而不是 Auth 代理连接器。

AlloyDB for PostgreSQL 可帮助您满足数据驻留要求。 数据在您指定的区域内存储或复制。

BigQuery

BigQuery 提供了许多功能,可用于控制对数据的访问、保护敏感数据以及确保数据准确性和一致性。如需了解详情,请参阅 BigQuery 中的数据治理简介

BigQuery 可帮助您满足数据驻留要求。 数据存储在您指定的区域内。

Cloud Storage

默认情况下,存储在 Cloud Storage 中的数据使用 Google 管理的加密密钥进行加密。如果需要,您可以使用 CMEK 或您自己的通过外部管理方法(如客户提供的加密密钥 [CSEK])管理的密钥。如需了解详情,请参阅数据加密选项

在 Cloud Storage 中,您可以通过以下两种方法为用户授予存储桶和对象的访问权限:IAM 和访问控制列表 (ACL)。在大多数情况下,我们建议使用 IAM,这可让您在存储桶级和项目级授予权限。如需了解详情,请参阅访问权限控制概览

您通过 Cloud Storage 加载到数据注入子系统的数据可能包含敏感数据。为了保护此类数据,您可以使用 Sensitive Data Protection 来发现数据并对其进行分类以及去标识化处理。如需了解详情,请参阅 将 Sensitive Data Protection 与 Cloud Storage 搭配使用

Cloud Storage 可帮助您满足数据驻留要求。 数据在您指定的区域内存储或复制。

Pub/Sub

默认情况下,Pub/Sub 使用 Google 管理的加密密钥对所有消息(包括静态消息和传输消息)进行加密。 Pub/Sub 支持使用 CMEK 在应用层进行消息加密。如需了解详情,请参阅 配置消息加密

如果您有数据驻留要求,则可以 配置消息存储政策,以确保消息数据存储在特定位置。

Document AI 默认情况下,静态数据使用 Google 管理的加密密钥进行加密。如果您需要使用由您控制和管理的加密密钥,则可以使用 CMEK。如需了解详情,请参阅 Document AI 安全性与合规性
Cloud Logging

默认情况下,系统会为此参考架构中使用的所有 Google Cloud 服务启用 管理员活动审核日志。这些日志记录了 API 调用或其他用于修改 Google Cloud 资源配置或元数据的操作。

默认情况下,BigQuery 会启用 数据访问审核日志。对于此架构中使用的其他服务,您可以启用数据访问审核日志。通过日志,您可以跟踪读取资源配置或元数据的 API 调用,或者跟踪用于创建、修改或读取用户提供的资源数据的用户请求。

为帮助满足数据驻留要求,您可以配置 Cloud Logging,以将日志数据存储在您指定的区域中。 如需了解详情,请参阅 区域化存储日志

如需了解有关 AI 应用需要考虑的安全原则的一般指南,请参阅 Google 的安全 AI 框架简介

可靠性

本部分介绍在 Google Cloud 中为支持 RAG 的生成式 AI 应用构建和操作可靠基础设施时应考虑的设计因素。

产品 设计考虑事项
Cloud Run

Cloud Run 是区域级服务。数据会跨一个区域内的多个可用区同步存储。流量在可用区之间自动进行负载均衡。如果可用区服务中断,Cloud Run 作业将继续运行,并且数据不会丢失。如果区域服务中断,Cloud Run 作业将停止运行,直到 Google 解决服务中断故障。

个别 Cloud Run 作业或任务可能会失败。如需处理此类失败,您可以使用 任务重试和检查点。如需了解详情,请参阅 作业重试和检查点最佳做法

AlloyDB for PostgreSQL

默认情况下,AlloyDB for PostgreSQL 集群通过自动故障切换提供高可用性 (HA)。主实例具有位于一个区域内两个不同可用区的冗余节点。此冗余可确保集群稳健可靠地应对可用区服务中断。

如需计划从区域服务中断中恢复,您可以使用 跨区域复制

BigQuery

加载到 BigQuery 的数据会同步存储在指定区域内的两个可用区中。这种冗余有助于确保在发生可用区服务中断时您的数据不会丢失。

如需详细了解 BigQuery 中的可靠性功能,请参阅 了解可靠性

Cloud Storage 您可以在以下三种 位置类型之一中创建 Cloud Storage 存储桶:单区域、双区域或多区域。存储在区域级存储桶中的数据会跨一个区域内的多个可用区同步复制。为了获得更高的可用性,您可以使用双区域或多区域存储桶,其中数据会跨区域异步复制。
Pub/Sub

如需管理消息流量的瞬时峰值,您可以在发布方设置中配置 流控制

如需处理失败的发布,请根据需要调整重试请求变量。如需了解详情,请参阅 重试请求

Document AI Document AI 是一项区域级服务。数据会跨一个区域内的多个可用区同步存储。流量在可用区之间自动进行负载均衡。如果可用区服务中断,数据不会丢失。如果发生区域服务中断,在 Google 解决服务中断之前,Document AI 不可用。

费用优化

本部分提供的指导可帮助您优化在 Google Cloud 中设置和操作支持 RAG 的生成式 AI 应用的费用。

产品 设计考虑事项
Cloud Run

创建 Cloud Run 作业时,您需要指定要分配给容器实例的内存量和 CPU 量。如需控制费用,请从默认(最低)CPU 和内存分配开始。如需提升性能,您可以通过配置 CPU 限制 内存限制来增加分配量。

如果您可以预测 Cloud Run 作业的 CPU 和内存要求,则可以通过获取承诺使用折扣来节省资金。如需了解详情,请参阅 Cloud Run 承诺使用折扣

AlloyDB for PostgreSQL

默认情况下,AlloyDB for PostgreSQL 集群的主实例具有高可用性 (HA)。该实例具有一个活跃节点和一个备用节点。如果活跃节点发生故障,AlloyDB for PostgreSQL 会通过故障切换机制自动切换到备用节点。如果您不需要数据库的高可用性,则可以将集群的主实例作为基本实例来降低费用。基本实例无法可靠应对可用区服务中断,并且在维护操作期间的停机时间较长。如需了解详情,请参阅 使用基本实例降低费用

如果您可以预测 AlloyDB for PostgreSQL 实例的 CPU 和内存要求,则可以通过获取承诺使用折扣来节省资金。如需了解详情,请参阅 AlloyDB for PostgreSQL 承诺使用折扣

BigQuery 通过 BigQuery,您可以在运行查询之前估算查询费用。如需优化查询费用,您需要优化存储和查询计算。如需了解详情,请参阅 估算和控制费用
Cloud Storage 对于用于将数据加载到数据注入子系统的 Cloud Storage 存储桶,请根据工作负载的数据保留和访问频率要求来选择适当的存储类别。例如,您可以选择 Standard 存储类别,并使用 对象生命周期管理,自动将对象降级为费用较低的存储类别或者根据您设置的条件删除对象,从而控制存储费用。
Cloud Logging

如需控制存储日志的费用,您可以执行以下操作:

性能

本部分介绍在 Google Cloud 中设计和构建满足性能要求且支持 RAG 的生成式 AI 应用时,应该考虑的因素。

产品 设计考虑事项
Cloud Run 默认情况下,系统会为每个 Cloud Run 容器实例分配一个 CPU 和 512 MiB 的内存。根据 Cloud Run 作业的性能要求,您可以配置 CPU 限制内存限制
AlloyDB for PostgreSQL

为了帮助您分析和提升数据库的查询性能,AlloyDB for PostgreSQL 提供了一个 Query Insights 工具。您可以使用此工具来监控性能并跟踪有问题的查询的来源。如需了解详情,请参阅 Query Insights 概览

如需大致了解数据库的状态和性能以及查看峰值连接数和最大复制延迟等详细指标,您可以使用系统数据分析信息中心。如需了解详情,请参阅 使用 AlloyDB for PostgreSQL 系统数据分析信息中心监控实例

如需减少 AlloyDB for PostgreSQL 主实例上的负载并横向扩容以处理读取请求,您可以向集群添加读取池实例。如需了解详情,请参阅 AlloyDB for PostgreSQL 节点和实例

BigQuery

BigQuery 提供了一个查询执行图,可用于分析查询性能并获取针对槽争用和 shuffle 配额不足等问题的性能数据分析。如需了解详情,请参阅 获取查询性能数据分析

解决通过查询性能数据分析发现的问题后,您可以使用诸如减少输入和输出数据量等技术进一步优化查询。如需了解详情,请参阅 优化查询计算

Cloud Storage 如需上传大型文件,您可以使用一种名为并行复合上传的方法。使用此策略时,大文件会拆分为各个块。这些数据块并行上传到 Cloud Storage,然后数据会在云端重组。如果网络带宽和磁盘速度不是限制因素,则并行复合上传的速度可能比常规上传操作快。但是,此策略存在一些限制和费用影响。如需了解详情,请参阅并行复合上传

后续步骤

贡献者

作者: Kumar Dhanagopal | 跨产品解决方案开发者

其他贡献者: