使用 Vertex AI 和 Vector Search 且支持 RAG 的生成式 AI 应用的基础架构

Last reviewed 2024-12-06 UTC

本文档提供了一个参考架构,您可以使用该架构通过 Vector Search 为具有检索增强生成 (RAG) 的生成式 AI 应用设计基础架构。矢量搜索是一项全代管式 Google Cloud 服务,可为超大规模的矢量相似性匹配提供经过优化的服务基础架构。

本文档的目标读者群包括生成式 AI 应用的架构师、开发者和管理员。本文档假定您对 AI、机器学习 (ML) 和大语言模型 (LLM) 概念具有基本的了解。本文档未提供有关如何设计和开发生成式 AI 应用的指导。

架构

下图概要展示了本文档介绍的架构:

架构中数据注入和传送流程的概览。

上图中的架构包含两个子系统:数据注入和服务。

  • 数据注入子系统会提取从外部来源上传的数据。该子系统会为 RAG 准备数据,并与 Vertex AI 交互,为提取的数据生成嵌入,以及构建和更新向量索引
  • 服务子系统包含生成式 AI 应用的前端和后端服务。
    • 前端服务会处理与应用用户的查询-响应流程,并将查询转发到后端服务。
    • 后端服务使用 Vertex AI 生成查询嵌入、执行矢量相似搜索,并应用 Responsible AI 安全过滤条件和系统说明。

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

架构中数据注入和传送流程的详细视图。

以下部分介绍了上图架构中的每个子系统内的数据流。

数据注入子系统

数据注入子系统会从外部来源提取数据,并为 RAG 准备数据。以下是数据提取和准备流程中的步骤:

  1. 数据会从外部来源上传到 Cloud Storage 存储桶。外部来源可能是应用、数据库或在线播放服务。
  2. 当数据上传到 Cloud Storage 时,系统会将消息发布到 Pub/Sub 主题
  3. Pub/Sub 主题收到消息后,会触发 Cloud Run 作业
  4. Cloud Run 作业会解析原始数据,根据需要设置其格式,并将其划分为多个分块。
  5. Cloud Run 作业使用 Vertex AI Embeddings API 通过您指定的嵌入模型创建数据块的嵌入。Vertex AI 支持文本多模态嵌入模型。
  6. Cloud Run 作业会构建嵌入的 Vector Search 索引,然后部署该索引。

提取新数据时,系统会对新数据执行上述步骤,并使用流式更新更新索引。

当服务子系统处理用户请求时,它会使用矢量搜索索引进行矢量相似度搜索。下一部分介绍了投放流程。

服务子系统

服务子系统负责处理生成式 AI 应用及其用户之间的查询-响应流程。以下是投放流程中的步骤:

  1. 用户向 Cloud Run 服务提交自然语言查询,该服务为生成式 AI 应用提供前端界面(例如聊天机器人)。
  2. 前端服务会将用户查询转发到后端 Cloud Run 服务。
  3. 后端服务通过执行以下操作来处理查询:
    1. 使用数据注入子系统用于生成提取数据的嵌入的相同嵌入模型和参数,将查询转换为嵌入。
    2. 通过对向量搜索索引中的查询嵌入执行向量相似度搜索,检索相关的基准数据
    3. 通过将原始查询与基准数据相结合,构建增强型问题。
    4. 将增强型问题发送到部署在 Vertex AI 上的 LLM。
  4. LLM 会生成回答。
  5. 对于每个问题,Vertex AI 都会应用您配置的 Responsible AI 安全过滤条件,然后将过滤后的回答和 AI 安全得分发送到 Cloud Run 后端服务。
  6. 应用通过 Cloud Run 前端服务将响应发送给用户。

您可以在 Cloud Logging 中存储和查看查询-响应活动的日志,还可以使用 Cloud Monitoring 设置基于日志的监控。您还可以将生成的响应加载到 BigQuery 中,以进行离线分析。

Vertex AI 问题优化器可帮助您在初始问题设计阶段和持续优化问题阶段大规模改进问题。提示优化器会评估模型对 ML 工程师提供的一组示例提示的回答。评估输出包括模型对示例问题的回答、机器学习工程师指定的指标的得分,以及一组您可以考虑使用的优化系统说明。

使用的产品

此参考架构使用以下 Google Cloud 产品:

  • Vertex AI:一个机器学习平台,用于训练和部署机器学习模型和 AI 应用以及自定义 LLM,以在依托 AI 技术的应用中使用。
  • 向量搜索:一种向量相似度匹配服务,可让您存储、编入索引和搜索在语义上相似或相关的数据。
  • Cloud Run:一个无服务器计算平台,可让您直接在 Google 可伸缩的基础设施之上运行容器。
  • Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud内部和外部访问,并且跨位置进行复制以实现冗余。
  • Pub/Sub:一种异步且可伸缩的通讯服务,可将生成消息的服务与处理这些消息的服务分离开。
  • Cloud Logging:具有存储、搜索、分析和提醒功能的实时日志管理系统。
  • Cloud Monitoring:可帮助您了解您的应用和基础设施的性能、可用性和健康状况的服务。
  • BigQuery:一种企业数据仓库,可帮助您使用机器学习地理空间分析和商业智能等内置功能管理和分析数据。

使用场景

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

个性化产品推荐

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

临床辅助系统

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

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

设计替代方案

本部分介绍了您可以在 Google Cloud中为支持 RAG 的生成式 AI 应用考虑的其他设计方法。

AI 基础架构替代方案

如果您想利用全代管式 Google Cloud 数据库(例如 AlloyDB for PostgreSQL 或 Cloud SQL)的矢量存储功能来构建 RAG 应用,请参阅使用 Vertex AI 和 AlloyDB for PostgreSQL 构建支持 RAG 的生成式 AI 应用的基础架构

如果您想使用开源工具和模型 Ray、Hugging Face 和 LangChain 快速构建和部署能够处理 RAG 的生成式 AI 应用,请参阅使用 Google Kubernetes Engine (GKE) 构建能够处理 RAG 的生成式 AI 应用的基础架构

应用托管选项

在本文档中所示的架构中,Cloud Run 是生成式 AI 应用服务和数据处理作业的托管平台。Cloud Run 是一个以开发者为中心的全代管式应用平台。如果您需要更大的配置灵活性,并需要对计算基础架构进行更严格的控制,可以将应用部署到 GKE 集群或 Compute Engine 虚拟机。

决定是使用 Cloud Run、GKE 还是 Compute Engine 作为应用主机,需要在配置灵活性和管理工作量之间进行权衡。借助无服务器 Cloud Run 选项,您可以将应用部署到预配置的环境,从而最大限度地减少管理工作量。使用 Compute Engine 虚拟机和 GKE 容器时,您负责管理底层计算资源,但配置灵活性和控制力更强。如需详细了解如何选择合适的应用托管服务,请参阅以下文档:

其他选项

如需了解您可以在Google Cloud中为生成式 AI 应用使用的其他基础架构选项、支持的模型和归因技术,请参阅为生成式 AI 应用选择模型和基础架构

设计考虑事项

本部分介绍了在使用此参考架构开发满足您在安全性、可靠性、费用和性能方面的具体要求的拓扑时,应考虑的设计因素、最佳实践和设计建议。

本部分中的指导并非详尽无遗。根据应用的具体要求以及您使用的 Google Cloud 和第三方产品和功能,您可能还需要考虑其他设计因素和权衡。

安全性、合规性和隐私权

本部分介绍了在 Google Cloud 中设计满足工作负载安全和合规性要求的拓扑的设计注意事项和建议。

产品 设计注意事项和建议
Vertex AI

安全控制措施:Vertex AI 支持 Google Cloud 安全控制措施,您可以使用这些控制措施来满足数据驻留、数据加密、网络安全和访问透明度方面的要求。如需了解详情,请参阅 Vertex AI 的安全控制生成式 AI 的安全控制

模型访问权限:您可以设置组织政策,以限制可在 Google Cloud 项目中使用的 LLM 的类型和版本。如需了解详情,请参阅控制对模型园模型的访问权限

共担责任:Vertex AI 可保护底层基础架构,并提供工具和安全控制功能,帮助您保护数据、代码和模型。如需了解详情,请参阅 Vertex AI 共同责任

数据保护:使用 Cloud Data Loss Prevention API 在提示和回答以及日志数据中发现和去标识化敏感数据,例如个人身份信息 (PII)。如需了解详情,请观看以下视频:保护 AI 应用中的敏感数据

Cloud Run

入站安全性(前端服务):如需控制对应用的外部访问,请停用前端 Cloud Run 服务的默认 run.app 网址,并设置区域级外部应用负载平衡器。 除了将传入流量负载均衡到应用之外,负载均衡器还负责 SSL 证书管理。如需增强保护,您可以使用 Google Cloud Armor 安全政策为服务提供请求过滤、DDoS 攻击防护和速率限制。

入站安全性(后端服务):在此架构中,应用后端的 Cloud Run 服务无需从互联网访问。如需确保只有内部客户端可以访问该服务,请将 ingress 参数设置为 internal。如需了解详情,请参阅限制 Cloud Run 的网络入站流量

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

容器映像安全:为确保仅将已获授权的容器映像部署到 Cloud Run 作业和服务,您可以使用Binary Authorization

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

如需有关容器安全的更多指导,请参阅 Cloud Run 常规开发提示

Cloud Storage

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

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

数据保护:您通过 Cloud Storage 加载到数据注入子系统中的数据可能包含敏感数据。如需保护此类数据,您可以使用敏感数据保护功能来发现、分类和去标识化数据。如需了解详情,请参阅将敏感数据保护与 Cloud Storage 搭配使用

网络控制:为降低 Cloud Storage 中数据渗漏的风险,您可以使用 VPC Service Controls 创建服务边界。

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

Pub/Sub

数据加密:默认情况下,Pub/Sub 会使用 的 Google 自有且由 Google 管理 的加密密钥对所有消息(无论是静态数据还是传输中的数据)进行加密。 Pub/Sub 支持使用 CMEK 在应用层进行消息加密。如需了解详情,请参阅配置消息加密

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

Cloud Logging

管理活动审核:默认情况下,此参考架构中使用的所有 Google Cloud 服务都启用了管理活动日志记录。您可以通过 Cloud Logging 访问日志,并使用这些日志监控 API 调用或其他用于修改 Google Cloud 资源配置或元数据的操作。

数据访问审核:默认情况下,BigQuery 会记录数据访问事件。对于此架构中使用的其他服务,您可以启用数据访问审核日志。您可以使用这些日志来监控以下内容:

  • 用于读取资源配置或元数据的 API 调用。
  • 用户请求创建、修改或读取用户提供的资源数据。

日志数据的安全性:Google 不会访问或使用 Cloud Logging 中的数据。

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

架构中的所有产品

降低数据渗漏风险:为降低数据渗漏风险,请围绕基础架构创建 VPC Service Controls 边界。VPC Service Controls 支持本参考架构中使用的所有服务。

部署后优化:在 Google Cloud中部署应用后,请使用 Active Assist 服务获取有助于进一步优化云资源安全性的建议。查看建议,并根据您的环境酌情加以应用。如需了解详情,请参阅在 Recommendation Hub 中查找建议

访问权限控制:针对每项云服务遵循最小权限原则。

如需有关Google Cloud中 AI 和机器学习部署的安全性方面的一般指南,请参阅以下资源:

可靠性

本部分介绍了在 Google Cloud中为您的部署构建和运营可靠基础架构的设计注意事项和建议。

产品 设计注意事项和建议
向量搜索

查询伸缩:为确保矢量搜索索引能够处理查询负载增加的情况,您可以为索引端点配置自动伸缩。当查询负载增加时,节点数量会自动增加,最多可达到您指定的上限。如需了解详情,请参阅启用自动扩缩

Cloud Run

对基础架构故障的稳健性:Cloud Run 是一项地区性服务。数据跨一个区域内的多个可用区同步存储。流量在可用区之间自动进行负载均衡。如果发生区域中断,Cloud Run 会继续运行,并且数据不会丢失。如果发生区域服务中断,Cloud Run 将停止运行,直到 Google 解决服务中断问题。

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

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

速率控制:为避免在消息流量出现暂时性激增期间出现错误,您可以在发布商设置中配置流量控制,以限制发布请求的速率。

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

BigQuery 对基础架构故障的稳健性:您加载到 BigQuery 中的数据会同步存储在您指定区域内的两个可用区中。这种冗余有助于确保在发生区域中断时您的数据不会丢失。如需详细了解 BigQuery 中的可靠性功能,请参阅了解可靠性
架构中的所有产品 部署后优化:在 Google Cloud中部署应用后,您可以使用 Active Assist 服务获取建议,进一步优化云资源的可靠性。查看建议,并根据您的环境酌情加以应用。如需了解详情,请参阅在 Recommendation Hub 中查找建议

如需了解专门针对 AI 和机器学习工作负载的可靠性原则和建议,请参阅架构框架中的 AI 和机器学习视角:可靠性

费用优化

本部分将指导您优化使用此参考架构构建的 Google Cloud 拓扑的设置和运营费用。

产品 设计注意事项和建议
向量搜索

向量搜索的计费取决于索引大小、每秒查询次数 (QPS),以及您为索引端点使用的节点数量和机器类型。对于高 QPS 工作负载,批量处理查询有助于降低费用。如需了解如何估算 Vector Search 费用,请参阅 Vector Search 价格示例

如需提高部署矢量搜索索引的计算节点的利用率,您可以为索引端点配置自动扩缩。当需求较低时,节点数量会自动缩减到您指定的最小值。如需了解详情,请参阅启用自动扩缩

Cloud Run

创建 Cloud Run 作业和服务时,您可以指定要分配给容器实例的内存量和 CPU 量。如需控制费用,请先使用默认(最低)CPU 和内存分配。如需提高性能,您可以通过配置 CPU 限制和内存限制来增加分配。如需了解详情,请参阅以下文档:

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

Cloud Storage 对于您用于将数据加载到数据注入子系统的 Cloud Storage 存储桶,请选择合适的存储类。选择存储类时,请考虑工作负载的数据保留期限和访问频率要求。例如,如需控制存储费用,您可以选择“标准”类别并使用对象生命周期管理。这样一来,系统便可根据您设置的条件,自动将对象降级到费用更低的存储类别或删除对象。
Cloud Logging

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

BigQuery 借助 BigQuery,您可以在运行查询之前估算查询费用。如需优化查询费用,您需要优化存储和查询计算。如需了解详情,请参阅估算和控制费用
架构中的所有产品 在 Google Cloud中部署应用后,您可以使用 Active Assist 服务获取建议,进一步优化云资源的费用。查看建议,并根据您的环境酌情加以应用。如需了解详情,请参阅在 Recommendation Hub 中查找建议

如需估算 Google Cloud 资源的费用,请使用 Google Cloud 价格计算器

如需了解专门针对 AI 和机器学习工作负载的费用优化原则和建议,请参阅架构框架中的 AI 和机器学习视角:费用优化

性能优化

本部分介绍了在 Google Cloud 中设计满足工作负载性能要求的拓扑的设计注意事项和建议。

产品 设计注意事项和建议
向量搜索

创建索引时,请根据您的性能要求为每个叶节点设置分片大小、距离测量类型和嵌入数量。例如,如果您的应用对延迟时间变化极为敏感,我们建议您使用较大的分片大小。如需了解详情,请参阅影响性能的配置参数

在配置部署矢量搜索索引的节点的计算容量时,请考虑您的性能要求。根据预期的查询负载选择合适的机器类型,并设置节点数量上限。如需了解详情,请参阅影响性能的部署设置

根据您对查询性能、可用性和费用的要求,为 Vertex Search 索引配置查询参数。 例如,approximateNeighborsCount 参数指定在执行精确重排之前必须检索的邻居数量。降低此参数的值有助于缩短延迟时间并降低费用。如需了解详情,请参阅影响性能的查询时间设置

最新的索引有助于提高生成的回答的准确性。您可以使用批量更新或流式更新来更新向量搜索索引。借助流式更新,您可以对更新后的数据执行近乎实时的查询。如需了解详情,请参阅更新和重新构建有效索引

Cloud Run

默认情况下,每个 Cloud Run 容器实例都会分配一个 CPU 和 512 MiB 的内存。根据性能要求,您可以配置 CPU 限制和内存限制。 如需了解详情,请参阅以下文档:

为了确保即使在没有流量的一段时间后也能获得最佳延迟时间,您可以配置实例数下限。当此类实例处于空闲状态时,系统会以较低的价格对分配给这些实例的 CPU 和内存进行计费。

如需有关性能优化的更多指导,请参阅 Cloud Run 常规开发提示

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

BigQuery 提供了查询执行图,您可以使用该图分析查询性能,并针对槽争用和排序权限不足等问题获取性能分析。如需了解详情,请参阅获取查询性能分析

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

架构中的所有产品 在 Google Cloud中部署应用后,您可以使用 Active Assist 服务获取建议,进一步优化云资源的性能。查看建议,并根据您的环境酌情加以应用。如需了解详情,请参阅在 Recommendation Hub 中查找建议

如需了解专门针对 AI 和机器学习工作负载的性能优化原则和建议,请参阅架构框架中的 AI 和机器学习视角:性能优化

后续步骤

贡献者

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

其他贡献者: