支持 RAG 的生成式 AI 应用的专用连接

本文档提供了一个参考架构,可用于帮助保护具有检索增强生成 (RAG) 功能的应用的网络基础设施。RAG 架构通常包含单独的子系统来处理数据处理和内容检索流程。此参考架构演示了如何使用共享 VPC 来执行以下操作:

  • 使用 Identity and Access Management (IAM) 权限在子系统之间创建隔离。
  • 使用专用 IP 地址连接应用组件。

本文档的目标受众群体包括架构师、开发者以及网络和安全管理员。本文档假定您对网络有基本的了解。本文档未介绍如何创建基于 RAG 的应用。

架构

下图展示了本文档介绍的网络架构:

采用 RAG 的应用的联网架构。 网络架构的连接和流量。

上图中的架构显示了以下组件:

组件 用途
外部网络,可以是本地网络,也可以是其他云中的网络
  • 为上传原始 RAG 数据的数据工程师提供网络连接。
  • 终止外部网络连接。
  • 托管外部路由器。
  • 提供与 Google Cloud 路由 Google Cloud Virtual Private Cloud (VPC) 网络中的 Private Service Connect 端点的连接。
  • 包含指向 Private Service Connect 端点的 DNS 服务器。
路由项目
  • 托管路由 VPC 网络,该网络通过 Cloud Interconnect 或高可用性 VPN 连接连接到外部网络。
  • 托管着一个 Network Connectivity Center hub,用于将外部网络、路由 VPC 网络和共享 VPC 网络连接在一起。
  • 托管连接到区域性 Cloud Storage 端点的 Private Service Connect 端点。此端点可让数据工程师将 RAG 数据上传到 Cloud Storage 存储桶。
RAG 共享 VPC 宿主项目 托管共享 VPC 网络,该网络托管前端服务负载均衡器以及任何其他需要 VPC 网络的其他服务。所有服务项目都可以访问该共享 VPC 网络。
数据提取服务项目

包含用于输入原始数据的 Cloud Storage 存储桶。包含数据注入子系统,该子系统包括以下组件:

  • 注入处理:读取原始数据并对其进行处理。
  • 注入输出:写入最终数据存储区。
提供服务的服务项目

包含服务子系统,该子系统包括以下组件,这些组件可为推理和互动提供服务和功能:

  • 包含数据注入子系统输出的 RAG 数据存储区。
  • 通过将推理查询与 RAG 数据存储区中的数据相结合来为模型提供数据的服务进程。
  • 服务子系统用于从上传的 RAG 数据创建向量并处理最终用户请求的模型。
前端服务项目

包含服务子系统,该子系统是 Cloud Run 或 Google Kubernetes Engine (GKE) 上运行的用户互动服务前面的负载均衡器。

该项目还包含 Google Cloud Armor,可帮助限制服务的访问方式。如果您想提供来自互联网的访问权限,可以添加区域级外部应用负载平衡器。

VPC Service Controls 边界 有助于防范数据渗漏。存储在 Cloud Storage 存储分区中的数据无法复制到边界之外的任何位置,并且控制平面操作受到保护。

以下部分介绍了架构中的连接和流量。

组件之间的连接

本部分介绍了此架构中组件和网络之间的连接。

从外部网络到路由 VPC 网络

外部网络通过 Cloud Interconnect 或高可用性 VPN 连接到 Google Cloud 路由 VPC 网络,这些网络是 Network Connectivity Center hub 的混合 spoke。

路由 VPC 网络中的 Cloud Router 路由器与外部网络中的外部路由器交换边界网关协议 (BGP) 路由:

  • 外部网络中的路由器向路由 VPC Cloud Router 路由器通告外部子网的路由。您可以使用 BGP 指标和属性来表达对路由的偏好。
  • 路由 VPC 网络中的 Cloud Router 路由器将 Google Cloud的 VPC 中的前缀的路由通告给外部网络。

将 VPC 网络路由到共享 VPC 网络

您可以使用 Network Connectivity Center hub 的 Network Connectivity Center VPC spoke 连接路由 VPC 网络和 RAG VPC 网络。枢纽还托管连接到外部网络的混合 Spoke。

共享 VPC 网络中的资源到资源

在此设计中,Cloud Storage 存储桶从外部网络接收数据。推理请求通过区域级内部应用负载平衡器传入。 对于系统的其余部分,您有以下选择:

  • 将所有内容托管在 Google SaaS 基础架构中,例如 Cloud Storage 存储分区、Vertex AI、Cloud Run 和 Pub/Sub。在这种情况下,组件通过专用 Google 基础架构进行通信。
  • 托管在 Compute Engine 虚拟机、GKE 集群、Cloud SQL 数据库或在 VPC 网络中运行的其他组件中运行的工作负载中的所有内容。在这种情况下,系统通过您使用 Network Connectivity Center 或 VPC 网络对等互连关联的网络中的专用 IP 地址进行通信。
  • 混合使用全代管式服务、平台服务和基础架构服务。在这种情况下,您可以使用以下方法在 VPC 网络与全托管式服务之间建立连接:
    • 专用 Google 访问通道:借助此方法,在 VPC 网络中运行且没有外部 IP 地址的工作负载可以访问 Google API。此访问权限通过 Google 基础架构在内部实现,此过程不会将此类流量暴露给互联网。
    • Private Service Connect:使用此方法,您可以在服务项目中为托管在受管 VPC 网络中的服务(例如 AlloyDB for PostgreSQL)创建端点。

从外部网络到前端服务负载均衡器

区域级内部应用负载平衡器的端点是 RAG 网络中的 IP 地址。RAG 网络、路由网络以及与外部网络的混合连接都是同一 Network Connectivity Center hub 的 spoke。因此,您可以指示 Network Connectivity Center 将所有 spoke 子范围导出到 hub,然后由 hub 将这些子范围重新导出到其他 spoke 网络。然后,系统的最终用户便可以通过外部网络访问负载均衡服务。

流量

此参考架构中的流量包括 RAG 数据流和推理流。

RAG 人口流程

此流程描述了 RAG 数据如何从数据工程师流经系统到达向量存储区。

  1. 数据工程师从外部网络通过 Cloud Interconnect 连接或 Cloud VPN 连接上传原始数据。数据会上传到路由 VPC 网络中的 Private Service Connect 端点。
  2. 数据通过 Google 的内部基础架构传输到数据注入服务项目中的 Cloud Storage 存储桶。
  3. 在数据注入服务项目中,数据通过以下方法之一在系统之间传输:

    • 专用 Google 访问通道
    • Private Service Connect 端点
    • 直接 Google 基础架构

    具体方法取决于系统是托管在Google Cloud VPC 网络中还是直接托管在Google Cloud中。在此流程中,数据注入子系统会将分块的 RAG 数据馈送到模型,模型会为每个分块生成向量。

  4. 数据注入子系统将矢量数据和分块数据写入相应的数据存储区。

推理流程

此流程描述了客户请求。

  1. 客户从外部网络向服务的 IP 地址发送请求。
  2. 请求通过 Cloud Interconnect 连接或 Cloud VPN 连接传输到路由 VPC 网络。
  3. 请求通过 VPC spoke 连接传输到 RAG VPC 网络。
  4. 客户请求到达负载均衡器,然后负载均衡器将请求传递给前端子系统。
  5. 前端子系统将请求转发到服务子系统。
  6. 服务子系统使用数据存储区中的相关情境数据来扩充请求。
  7. 服务子系统将增强的提示发送给 AI 模型,后者会生成回答。

使用的产品

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

  • Virtual Private Cloud (VPC):为您的 Google Cloud 工作负载提供全球可扩缩的网络功能的虚拟系统。VPC 包括 VPC 网络对等互连、Private Service Connect、专用服务访问通道和共享 VPC。
  • 共享 VPC:Virtual Private Cloud 的一项功能,可让您使用公用 VPC 网络中的内部 IP 地址将多个项目中的资源连接到该网络。
  • Private Service Connect:一项功能,可让使用方从其 VPC 网络内部以非公开方式访问托管式服务。
  • 专用 Google 访问通道:一项功能,可让没有外部 IP 地址的虚拟机实例访问 Google API 和服务的外部 IP 地址。
  • Cloud Interconnect:一种通过高可用性、低延迟的连接将您的外部网络扩展到 Google 网络的服务。
  • Cloud VPN:一种通过 IPsec VPN 隧道将您的对等网络安全地扩展到 Google 网络的服务。
  • Cloud Router:一项分布式全托管式服务,可提供边界网关协议 (BGP) 发言者和响应者功能。Cloud Router 可与 Cloud Interconnect、Cloud VPN 和路由器设备配合使用,根据 BGP 收到的路由和自定义已知路由在 VPC 网络中创建动态路由。
  • Network Connectivity Center:一个编排框架,用于在连接到名为 hub 的集中管理资源的 spoke 资源之间简化网络连接。
  • VPC Service Controls:一种托管式网络功能,可最大限度地降低 Google Cloud 资源的数据渗漏风险。
  • Cloud Load Balancing:一组高性能、可扩缩的全球和区域级负载均衡器。
  • Model Armor:一项服务,可保护您的生成式 AI 和智能体 AI 资源免遭提示注入、敏感数据泄露和有害内容的侵害。
  • Google Cloud Armor:一种网络安全服务,提供 Web 应用防火墙 (WAF) 规则,并可帮助防范 DDoS 攻击和应用攻击。
  • Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud内部和外部访问,并且跨位置进行复制以实现冗余。

使用场景

此架构专为企业场景而设计,在这些场景中,整个系统的输入、输出和内部通信必须使用专用 IP 地址,并且不得通过互联网进行传输:

  • 私密输入:上传的数据不会通过互联网传输。相反,您可以在 Google Cloud路由 VPC 网络中的 Private Service Connect 端点后面托管 Cloud Storage 存储桶。您只需使用专用 IP 地址,即可通过 Cloud Interconnect 或 Cloud VPN 连接复制 RAG 数据。
  • 私密的服务间连接:服务通过 Google 的内部接口或 VPC 网络内部的私密地址相互通信。
  • 私密输出:除非您选择设置该访问权限,否则推理结果无法通过互联网访问。默认情况下,只有指定外部网络中的用户才能访问服务的专用端点。

设计替代方案

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

公开提供服务

在本文档中显示的架构中,只有内部网络中的用户才能向您的应用发送查询。如果您的应用必须可供互联网上的客户端访问,请使用区域级外部应用负载平衡器

使用 GKE 推理网关

如果您的前端子系统在 GKE 上运行,则可以使用推理网关,而不是应用负载平衡器。

设计考虑事项

本部分提供了更多指导,可帮助您部署网络,以支持可使用 RAG 的架构的专用连接。这些指导可帮助您满足在安全性与合规性、可靠性、费用和性能方面的特定要求。本部分中的指导并非详尽无遗。对于您的特定部署,您可能需要考虑本部分未涵盖的其他设计因素。

安全性、隐私权和合规性

在大多数情况下,您可以在 AI 模型前面部署 Model Armor,以评估入站提示和出站结果。Model Armor 有助于防范潜在风险,并确保 Responsible AI 实践。

为了在不当请求到达服务子系统之前将其拒绝,您可以将 Model Armor 附加到负载均衡器

此架构使用 VPC Service Controls,有助于防止未经授权的数据渗漏。

此设计采用既定的安全原则,有助于保护 RAG 工作负载的安全。 如需了解特定于 AI 和机器学习工作负载的安全原则和建议,请参阅 Well-Architected Framework 中的 AI 和机器学习视角:安全性

费用优化

如需了解特定于 AI 和机器学习工作负载的费用优化原则和建议,请参阅 Well-Architected Framework 中的AI 和机器学习视角:费用优化

性能优化

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

部署

本部分介绍了创建应用的步骤:

  1. 确定工作负载的区域
  2. 创建 Google Cloud 项目和 VPC 网络
  3. 将外部网络连接到路由 VPC 网络
  4. 使用 Network Connectivity Center 关联网络
  5. 确定要部署 RAG 的组件并创建服务账号
  6. 配置 VPC Service Controls
  7. 构建数据注入子系统
  8. 构建服务子系统
  9. 构建前端子系统
  10. 使应用可通过互联网访问

确定工作负载的区域

一般来说,您希望将连接、VPC 子网和 Google Cloud工作负载布置在靠近本地网络或其他云客户端的位置。如需详细了解如何为工作负载选择区域,请参阅Google Cloud 区域选择器Compute Engine 区域选择最佳实践

创建 Google Cloud 项目和 VPC 网络

如果您的组织已设置适用于分布式应用的跨云网络,则路由项目和路由 VPC 网络应已存在。

按以下顺序创建 Google Cloud 项目VPC 网络

  1. 创建路由项目。
  2. 创建启用了专用 Google 访问通道的路由 VPC 网络。
  3. 创建 RAG 项目。
  4. 将 RAG 项目提升为共享 VPC 宿主项目
  5. 创建数据注入服务项目。
  6. 创建服务服务项目。
  7. 创建前端服务项目。
  8. 创建启用了专用 Google 访问通道的共享 VPC RAG 网络。
  9. 向服务项目授予使用 RAG 网络的权限。

将外部网络连接到路由 VPC 网络

如果您已设置适用于分布式应用的 Cross-Cloud Network,则可以跳过此步骤。

设置外部网络与路由网络之间的连接。 如需了解相关技术,请参阅外部和混合连接。 如需了解如何选择连接产品,请参阅选择 Network Connectivity 产品

  1. 在路由项目中,创建 Network Connectivity Center hub
  2. 将 Cloud Interconnect 连接添加为 VLAN 连接辐条,或将 Cloud VPN 连接添加为 VPN 辐条
  3. 将 RAG VPC 网络和路由 VPC 网络作为 VPC spoke 添加到 hub。

确定 RAG 部署的组件并创建服务账号

  1. 选择 RAG 部署,并列出所需的组件。
  2. 确定每个组件所需的访问权限。
  3. 为每个组件创建具有相应权限的服务账号。在某些情况下,这意味着您需要向组件授予从其他服务项目读取数据或向其他服务项目写入数据的权限。

此设计假设您使用 Cloud Storage 存储桶作为数据输入组件,并在推理前端使用负载均衡器。设计的其余部分可以根据需要进行调整。

理想情况下,每个组件都应以自己的服务账号运行。确保每个组件仅拥有执行其所需功能所需的最低 IAM 权限。例如,数据注入子系统中的 Cloud Run 作业需要从输入 Cloud Storage 存储桶读取数据,但不需要向该存储桶写入数据。在此示例中,运行 Cloud Run 作业的服务项目应仅具有从存储桶读取数据的权限,而没有写入权限。

配置 VPC Service Controls

  1. 围绕您的部署创建 VPC Service Controls 边界
  2. 配置访问规则

构建数据注入子系统

数据注入子系统从数据工程师那里获取原始数据,并对其进行处理以供服务子系统使用。

  1. 在数据注入服务项目中,创建一个 Cloud Storage 存储桶
  2. 在路由 VPC 网络中,创建区域性 Private Service Connect 端点,并将该端点连接到相应存储桶。
  3. 在外部网络中,使用上一步中生成的 IP 地址和网址为端点添加 DNS 条目。
  4. 更新外部网络防火墙规则,以允许访问端点 IP 地址。
  5. 在数据注入服务项目中,根据您选择的 RAG 架构构建其余的注入流水线。
  6. 授予 IAM 权限,以便提取流水线中的相关资源可以访问生成向量的模型。
  7. 授予 IAM 权限,以便提取流水线中的相关资源可以写入向量数据存储区。

构建服务子系统

  1. 在服务服务项目中,构建服务流水线。
  2. 授予 IAM 权限,以便前端系统中的服务账号可以访问服务子系统的输出。

构建前端子系统

本部分假设您使用的是区域级内部应用负载平衡器,该负载平衡器在 Cloud Run 前端使用无服务器 NEG。不过,您可以使用其他负载均衡器和后端。

  1. 为前端系统创建代码。
  2. 在前端服务项目中,部署负载均衡的前端系统,其中包括配置 Cloud Armor 安全政策的可选步骤。
  3. 在路由 VPC 网络中配置 Cloud Router 路由器,以将 RAG VPC 网络中的路由转发到本地路由器。此配置允许客户端访问负载均衡器。
  4. 在外部网络中,配置防火墙规则,以使负载平衡器前端可从外部网络访问。
  5. 在外部网络中,更新 DNS 以指向负载均衡器转发规则。

使应用可通过互联网访问

此部分为可选。

此设计假定您希望仅从外部网络访问您的服务,但您也可以使服务可通过互联网访问。

如需让服务可从互联网访问,请完成以下步骤:

  1. 创建区域级外部应用负载均衡器,使其指向内部负载均衡器指向的同一后端。 完成可选步骤,配置 Cloud Armor 安全政策。
  2. 更新 VPC Service Controls,以允许服务客户访问后端服务。

后续步骤

贡献者

作者:

  • Deepak Michael | 网络专家客户工程师
  • Mark Schlagenhauf | 网络技术文档工程师

其他贡献者: