本文档提供了一个参考架构,可用于设计运行具有检索增强生成 (RAG) 功能的生成式人工智能 (AI) 应用的基础设施。本文档的目标受众群体包括生成式 AI 应用的开发者和管理员及云架构师。本文档假定您对 AI、机器学习 (ML) 和大语言模型 (LLM) 概念具有基本的了解。本文档未提供有关如何设计和开发生成式 AI 应用的指导。
架构
下图简要展示了 Google Cloud 中支持 RAG 的生成式 AI 应用的架构:
该架构包含以下互连组件:
组件 | 用途 | 互动次数 |
---|---|---|
数据注入子系统 | 准备和处理用于实现 RAG 功能的外部数据。 | 数据注入子系统通过数据库层与架构中的其他子系统进行交互。 |
服务子系统 | 处理生成式 AI 应用与其用户之间的请求-响应流。 | 服务子系统通过数据库层与数据注入子系统进行交互。 |
质量评估子系统 | 评估服务子系统生成的响应的质量。 | 质量评估子系统直接与服务子系统交互,并通过数据库层与数据注入子系统交互。 |
数据库 | 存储以下数据:
|
架构中的所有子系统都与数据库进行交互。 |
下图展示了此架构的详细视图:
以下部分详细介绍了架构的每个子系统内的组件和数据流。
数据注入子系统
数据注入子系统从外部来源(例如文件、数据库和流式传输服务)注入数据。上传的数据包含进行质量评估的提示。数据注入子系统在架构中提供 RAG 功能。下图展示了架构中的数据注入子系统的详细信息:
以下是数据注入流程中的步骤:
- 数据会上传到 Cloud Storage 存储桶。数据源可以是执行上传、数据库注入或流式传输数据的应用用户。
- 上传数据后,系统会向 Pub/Sub 主题发送通知。
- Pub/Sub 触发 Cloud Run 作业来处理上传的数据。
- Cloud Run 使用存储在 AlloyDB for PostgreSQL 数据库中的配置数据来启动作业。
- Cloud Run 作业使用 Document AI 准备数据以供进一步处理。例如,准备工作可能包括解析数据、将数据转换为所需格式以及将数据划分为区块。
Cloud Run 作业使用 Vertex AI Embeddings for Text 模型创建所注入数据的矢量化嵌入。
Cloud Run 将嵌入存储在启用了
pgvector
扩展程序的 AlloyDB for PostgreSQL 数据库中。如下一部分所述,当服务子系统处理用户请求时,它会使用矢量数据库中的嵌入来检索特定于领域的相关数据。
服务子系统
服务子系统处理生成式 AI 应用与其用户之间的请求-响应流。下图展示了架构中的服务子系统的详细信息:
以下是服务子系统的请求-响应流中的步骤:
- 用户通过前端(例如聊天机器人或移动应用)向生成式 AI 应用提交请求。
生成式 AI 应用将自然语言请求转换为嵌入。
应用会完成 RAG 方法的检索部分:
- 应用对由数据注入子系统维护的 AlloyDB for PostgreSQL 矢量存储区中的嵌入执行语义搜索。语义搜索可帮助根据提示的意图(而不是其文本内容)来查找嵌入。
- 应用将原始请求与根据匹配嵌入检索到的原始数据相结合,以创建情景化提示。
应用将上下文化提示发送到在 Vertex AI 上运行的 LLM 推理堆栈。
LLM 推理堆栈使用生成式 AI LLM(可以是基础 LLM 或自定义 LLM),并生成受限于所提供上下文的响应。
- 应用可以在 Cloud Logging 中存储请求-响应活动的日志。您可以通过 Cloud Monitoring 查看和使用监控日志。Google 不会访问或使用日志数据。
- 应用将响应加载到 BigQuery 以进行离线分析。
应用使用 Responsible AI 过滤条件过滤响应。
应用通过前端将经过过滤的响应发送给用户。
质量评估子系统
下图展示了架构中的质量评估子系统的详细信息:
质量评估子系统收到请求时,会执行以下操作:
- Pub/Sub 触发 Cloud Run 作业。
- Cloud Run 使用存储在 AlloyDB for PostgreSQL 数据库中的配置数据来启动作业。
- Cloud Run 作业从 AlloyDB for PostgreSQL 数据库拉取评估提示。这些提示之前由数据注入子系统上传到数据库。
Cloud Run 作业使用评估提示来评估服务子系统生成的响应的质量。
此评估的输出包括事实准确率和相关性等指标的评估分数。
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 提供支持的法律研究,律师可以快速查询大量法规和判例法,以确定相关的法律先例或总结复杂的法律概念。可以使用从律师事务所专有的合同语料库、过往法律沟通和内部案例记录中检索到的数据来增强律师的提示,从而改进此类研究的输出结果。这种设计方法可确保生成的响应与律师专门从事的法律领域相关。
设计替代方案
对于架构中的矢量存储区和语义搜索组件,您可以使用 Vertex AI Vector Search。Vector Search 是一项全托管式服务,可为超大规模向量搜索提供经过优化的服务基础设施。原始数据(文本块)可以存储在 Cloud Storage 等对象存储中,也可以存储在 Filestore 等键值对存储中。无论哪种情况,每个原始文本块的向量表示法都存储在 Vector Search 中。
在注入数据时,系统会为每个原始文本数据块分配一个唯一 ID,并将此 ID 用作在 Cloud Storage 中的对象文件名。在 Vector Search 中,该 ID 用作向量 ID。
在提供服务时,传入的文本查询会转换为嵌入向量。Vector Search 会执行相似性搜索,以返回语义上最相似的向量。然后,向量 ID 会用于查找原始文本块。总的来说,这些文本块提供了 LLM 完成给定任务所需的相关上下文。
如需了解如何创建、部署和查询向量搜索索引,请参阅 Vector Search 快速入门。
设计考虑事项
本部分提供的指导可帮助您在 Google Cloud 中开发支持 RAG 的生成式 AI 架构,以满足您在安全性和合规性、可靠性、费用和性能方面的特定要求。本部分中的指南并非详尽无遗。根据生成式 AI 应用的特定要求以及您使用的 Google Cloud 产品和功能,您可能需要考虑其他设计因素和权衡因素。
安全与合规性
本部分介绍在 Google Cloud 中设计和构建满足安全性和合规性要求且支持 RAG 的生成式 AI 应用时应考虑的因素。
产品 | 设计考虑事项 |
---|---|
Vertex AI | Vertex AI 支持 Google Cloud 安全控制措施,可用于满足数据驻留、数据加密、网络安全和访问透明性的要求。如需了解详情,请参阅针对 Vertex AI 的安全控制措施和针对生成式 AI 的安全控制措施。 |
Cloud Run |
默认情况下,Cloud Run 使用 Google 拥有和 Google 管理的密钥加密数据。如需使用您控制的密钥保护容器,您可以使用客户管理的加密密钥 (CMEK)。如需了解详情,请参阅使用客户管理的加密密钥。 如需确保仅将获得授权的容器映像部署到 Cloud Run 作业,您可以使用 Binary Authorization。 Cloud Run 可帮助您满足数据驻留要求。Cloud Run 容器实例在您选择的区域内运行。 |
AlloyDB for PostgreSQL |
默认情况下,存储在 AlloyDB for PostgreSQL 中的数据使用 Google 拥有且由 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 拥有且由 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 拥有且由 Google 管理的密钥对所有消息(包括静态消息和传输中的消息)进行加密。Pub/Sub 支持使用 CMEK 在应用层进行消息加密。如需了解详情,请参阅配置消息加密。 如果您有数据驻留要求,则可以配置消息存储政策,以便确保消息数据存储在特定位置。 |
Document AI | 默认情况下,静态数据使用 Google 管理的加密密钥进行加密。如果您需要使用由您控制和管理的加密密钥,则可以使用 CMEK。如需了解详情,请参阅 Document AI 安全性与合规性。 |
Cloud Logging |
默认情况下,系统会为此参考架构中使用的所有 Google Cloud 服务启用管理员活动审核日志。这些日志会记录修改 Google Cloud 资源配置或元数据的 API 调用或其他操作。 默认情况下,系统会为 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 是一种区域级服务。数据跨一个区域内的多个可用区同步存储。流量在可用区之间自动进行负载均衡。如果发生可用区服务中断,数据不会丢失。如果发生区域服务中断,Document AI 会无法使用,直到 Google 解决服务中断问题。 |
费用优化
本部分提供的指导可帮助您优化在 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,然后数据会在云中重新组合。如果网络带宽和磁盘速度不是限制因素,则并行复合上传的速度可能比常规上传操作快。但是,此策略存在一些限制和费用影响。如需了解详情,请参阅并行复合上传。 |
部署
如需开始尝试在 Google Cloud 上为支持 RAG 的生成式 AI 应用构建基础设施,您可以使用快速起步解决方案:通过 Cloud SQL 实现生成式 AI RAG。此解决方案在 Cloud Run 上部署基于 Python 的聊天应用,并使用全托管式 Cloud SQL 数据库进行向量搜索。GitHub 中提供了此解决方案的示例代码。
后续步骤
- 了解如何使用 Vertex AI PaLM API 和 LangChain 构建生成式 AI 应用。
- 了解如何使用 Google Cloud 数据库构建企业生成式 AI 应用。
- 了解新的生成式 AI 数据库检索应用如何帮助改进 LLM 答案。
- 尝试通过 Codelab 来使用 AlloyDB for PostgreSQL AI 和 LangChain 构建基于 LLM 和 RAG 的聊天应用。
- 尝试了解生成式 AI 文档摘要。
- 了解适用于知识密集型 NLP 任务的检索增强生成。
- 了解适用于大语言模型的检索增强生成。
- 如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。
贡献者
作者: Kumar Dhanagopal | 跨产品解决方案开发者
其他贡献者:
- Andrew Brook | 工程总监
- Anna Berenberg | 工程研究员
- Assaf Namer | 首席云安全架构师
- Balachandar Krishnamoorthy | 首席软件工程师
- Daniel Lees | 云安全架构师
- Derek Downey | 开发者关系工程师
- Eran Lewis | 高级产品经理
- Geoffrey Anderson | 产品经理
- Gleb Otochkin | 数据库云技术推广工程师
- Hamsa Buvaraghan | AI 产品经理
- Irina Sigler | 产品经理
- Jack Wotherspoon | 软件工程师
- Jason Davenport | 开发技术推广工程师
- Jordan Totten | 客户工程师
- Julia Wiesinger | 产品经理
- Kara Greenfield | 客户工程师
- Kurtis Van Gent | 资深软件工程师
- Per Jacobsson | 软件工程师
- Pranav Nambiar | 总监
- Richard Hendricks | 架构中心员工
- Safiuddin Khaja | 云工程师
- Sandy Ghai | 组合产品经理
- Vladimir Vuskovic | 产品管理总监
- Steren Giannini | 组合产品经理
- Wietse Venema | 开发者关系工程师