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

本文档提供了一个参考架构,您可以使用向量搜索为采用检索增强生成 (RAG) 技术的生成式 AI 应用设计基础架构。Vector Search 是一项全代管式 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. 该函数使用 Vertex AI Embeddings API,通过您指定的嵌入模型创建分块嵌入。Vertex AI 支持文本多模态嵌入模型。
  6. 然后,该函数会构建嵌入的向量搜索索引,然后部署该索引。

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

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

服务子系统

服务子系统负责处理生成式 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 提示优化器可帮助您在初始提示设计期间和持续的提示调优期间大规模改进提示。提示优化器用于评估模型对机器学习工程师提供的一组示例提示的响应。评估的输出包括模型对示例提示的响应、机器学习工程师指定的指标的得分,以及您可以考虑使用的一组优化的系统指令。

使用的产品

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

  • Vertex AI:一个机器学习平台,用于训练和部署机器学习模型和 AI 应用以及自定义 LLM,以在依托 AI 技术的应用中使用。
  • Vector Search:向量相似度匹配服务,可让您存储、编入索引和搜索语义相似或相关的数据。
  • Cloud Run:一个无服务器计算平台,可让您直接在 Google 可伸缩的基础设施之上运行容器。
  • Cloud Run 函数:用于构建和连接云服务的无服务器执行环境。
  • 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 基础设施替代方案

如果您希望在 RAG 应用中利用全代管式 Google Cloud 数据库(如 AlloyDB for PostgreSQL 或 Cloud SQL)的矢量存储功能,请参阅使用 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 安全控制措施,可用于满足数据驻留、数据加密、网络安全性和 Access Transparency 要求。如需了解详情,请参阅 Vertex AI 的安全控制生成式 AI 的安全控制

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

共担责任: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-owned and Google-managed encryption key对数据进行加密。如需使用您控制的密钥保护容器,您可以使用客户管理的加密密钥 (CMEK)。如需了解详情,请参阅使用客户管理的加密密钥

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

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

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

Cloud Storage

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

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

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

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

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

Pub/Sub

数据加密:默认情况下,Pub/Sub 使用 Google-owned and Google-managed encryption keys加密所有消息(无论是静态消息还是传输中消息)。Pub/Sub 支持使用 CMEK 在应用层进行消息加密。如需了解详情,请参阅配置邮件加密

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

Cloud Logging

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

数据访问审核:默认情况下,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 Storage 数据可用性:您可以在以下三种位置类型之一中创建 Cloud Storage 存储分区:单区域、双区域或多区域。区域级存储分区中存储的数据会跨一个区域内的多个可用区同步复制。为了获得更高的可用性,您可以使用双区域或多区域存储桶,其中数据会跨区域异步复制。
Pub/Sub

速率控制:为避免在消息流量的瞬时高峰期间出错,您可以在发布者设置中配置流控制,以限制发布请求速率。

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

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

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

费用优化

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

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

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

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

Cloud Run

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

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

Cloud Storage 对于用于将数据加载到数据提取子系统的 Cloud Storage 存储分区,请选择适当的存储类别。选择存储类别时,请考虑工作负载的数据保留和访问频率要求。例如,如需控制存储费用,您可以选择 Standard 类别并使用对象生命周期管理。这样可让对象自动降级到费用较低的存储类别,或者根据您设置的条件删除对象。
Cloud Logging

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

  • 通过排除或过滤不必要的日志条目来减少日志量。如需了解详情,请参阅排除项过滤条件
  • 缩短日志条目的保留期。如需了解详情,请参阅配置自定义保留
BigQuery 借助 BigQuery,您可以在运行查询之前估算查询费用。如需优化查询费用,您需要优化存储和查询计算。如需了解详情,请参阅估算和控制费用
架构中的所有产品 在 Google Cloud中部署应用后,您可以使用 Active Assist 服务来获取建议,以进一步优化云资源的费用。请查看这些建议,并根据您的环境适当地采纳这些建议。如需了解详情,请参阅在 Recommendation Hub 中查找建议

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

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

性能优化

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

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

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

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

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

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

Cloud Run

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

即使在没有流量的一段时间后,也能确保实现最佳延迟,您可以配置实例数下限。当此类实例空闲时,分配给这些实例的 CPU 和内存以较低价格计费。

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

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

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

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

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

如需了解特定于 AI 和机器学习工作负载的性能优化原则和建议,请参阅架构完善的框架中的 AI 和机器学习视角:性能优化

部署

如需部署基于此参考架构的拓扑,您可以下载并使用 GitHub 代码库中提供的 Terraform 示例配置。按照代码库中 README 中的说明操作。示例代码不适用于生产用例。

后续步骤

贡献者

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

其他贡献者: