本文档提供了一个参考架构,可帮助您在 Google Cloud中为 GraphRAG 生成式 AI 应用设计基础设施。本文档的目标受众群体包括构建和管理智能信息检索系统的架构师、开发者和管理员。本文档假定您对 AI、图数据管理和知识图谱概念具有基础的了解。本文档未提供有关设计和开发 GraphRAG 应用的具体指导。
GraphRAG 是一种基于图的检索增强生成 (RAG) 方法。 RAG 通过使用向量搜索检索到的与上下文相关的数据来扩充提示,从而帮助 AI 生成的回答接地。GraphRAG 将向量搜索与知识图谱查询相结合,以检索能够更好地反映来自不同来源的数据之间相互关联的上下文数据。使用 GraphRAG 增强的提示可以生成更详细、更相关的 AI 回答。
架构
下图展示了 Google Cloud中支持 GraphRAG 的生成式 AI 应用的架构:
上图中的架构包含两个子系统:数据提取和部署。以下部分介绍了子系统的用途以及子系统内部和子系统之间的数据流。
数据注入子系统
数据注入子系统从外部来源注入数据,然后准备数据以供 GraphRAG 使用。数据注入和准备流程包括以下步骤:
- 数据会注入到 Cloud Storage 存储桶中。 数据分析师可以上传这些数据,也可以从数据库中提取这些数据,还可以从任何来源以流式传输方式获取这些数据。
- 提取数据时,系统会向 Pub/Sub 主题发送消息。
- Pub/Sub 触发 Cloud Run 函数来处理上传的数据。
- Cloud Run 函数使用 Vertex AI 中的 Gemini API 和 LangChain 的
LLMGraphTransformer
等工具,根据输入文件构建知识图谱。 - 该函数将知识图谱存储在 Spanner Graph 数据库中。
- 该函数使用 LangChain 的
RecursiveCharacterTextSplitter
或 Document AI 的布局解析器等工具将数据文件的文本内容分段为细粒度的单元。 - 该函数使用 Vertex AI Embeddings API 创建文本段的向量嵌入。
- 该函数将向量嵌入和关联的图节点存储在 Spanner Graph 中。
向量嵌入是语义检索的基础。知识图谱节点可用于遍历和分析复杂的数据关系和模式。
服务子系统
服务子系统管理生成式 AI 应用与其用户之间的查询-响应生命周期。服务流程涉及以下步骤:
- 用户向部署在 Vertex AI Agent Engine 上的 AI 代理提交自然语言查询。
- 代理会按如下方式处理查询:
- 使用 Vertex AI Embeddings API 将查询转换为向量嵌入。
- 通过在嵌入数据库中执行向量相似度搜索,检索与查询相关的图节点。
- 通过遍历知识图谱检索与查询相关的数据。
- 通过将原始查询与检索到的图数据相结合来扩充提示。
- 使用 AI 应用排名 API 对结果进行排名,结果包含从图数据库中检索到的节点和边。排名依据是与查询的语义相关性。
- 通过调用 Gemini API Vertex AI 总结结果。
- 然后,代理会将总结的结果发送给用户。
您可以在 Cloud Logging 中存储和查看查询-响应活动日志,并且可以使用 Cloud Monitoring 设置基于日志的监控。
使用的产品
此参考架构使用以下 Google 产品和工具:
- Spanner Graph:一种图表数据库,可提供 Spanner 的可伸缩性、可用性和一致性功能。
- Vertex AI:一个机器学习平台,用于训练和部署机器学习模型和 AI 应用以及自定义 LLM,以在依托 AI 技术的应用中使用。
- Cloud Run 函数:一个无服务器计算平台,可让您直接在 Google Cloud中运行单用途函数。
- Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud内部和外部访问,并且跨位置进行复制以实现冗余。
- Pub/Sub:一种异步且可伸缩的通讯服务,可将生成消息的服务与处理这些消息的服务分离开。
- Cloud Logging:具有存储、搜索、分析和提醒功能的实时日志管理系统。
- Cloud Monitoring:可帮助您了解您的应用和基础设施的性能、可用性和健康状况的服务。
使用场景
GraphRAG 可为各行各业的用例提供智能数据检索功能。本部分介绍了医疗保健、金融、法律服务和制造业中的一些用例。
保健和医药:临床决策支持
在临床决策支持系统中,GraphRAG 将医学文献、患者电子健康记录、药物相互作用数据库和临床试验结果中的大量数据集成到统一的知识图谱中。当临床医生和研究人员查询患者的症状和当前用药情况时,GraphRAG 会遍历知识图谱,以确定相关病症和潜在的药物相互作用。它还可以根据患者的基因谱等其他数据生成个性化的治疗建议。这种信息检索方式提供的答案比关键字匹配更具上下文丰富性,也更具证据性。
金融服务:统一财务数据
金融服务公司使用知识图谱为其分析师提供统一的结构化视图,以便查看来自分析师报告、盈利电话会议和风险评估等不同来源的数据。知识图谱可识别公司和高管等关键数据实体,并映射实体之间的重要关系。这种方法可提供丰富且相互关联的数据网络,从而实现更深入、更高效的财务分析。分析师可以发现之前隐藏的洞见,例如复杂的供应链依赖关系、竞争对手之间重叠的董事会成员关系,以及面临的复杂地缘政治风险。
法律服务:案例研究和先例分析
在法律领域,GraphRAG 可用于根据先例、法规、判例法、监管更新和内部文件生成个性化的法律建议。律师在准备案件时,可以就特定法律论点、类似案件的先前判决或新立法的含义提出细致的问题。GraphRAG 利用现有法律知识的互联性来识别相关先例并解释其适用性。它还可以通过追踪法律概念、法规和司法解释之间的关系来建议反驳论点。 与传统的知识检索方法相比,这种方法可以帮助法律从业者获得更全面、更精准的洞见。
制造和供应链:释放机构知识
制造和供应链运营需要高度的精确性。 维持所需精确度水平所需的知识通常隐藏在数千份密集的静态标准操作程序 (SOP) 文档中。当工厂中的生产线或机器出现故障,或者出现物流问题时,工程师和技术人员往往会浪费宝贵的时间来搜索不相关的 PDF 文档,以诊断和排查问题。知识图谱和对话式 AI 可以结合使用,将深藏的机构知识转化为互动式诊断伙伴。
设计替代方案
本文档介绍的架构是模块化的。您可以根据自己的需求调整架构的某些组件,以使用替代产品、工具和技术。
构建知识图谱
您可以使用 LangChain 的 LLMGraphTransformer
工具从头开始构建知识图谱。通过使用 allowed_nodes
、allowed_relationships
、node_properties
和 relationship_properties
等 LLMGraphTransformer
参数指定图表架构,您可以提高生成的知识图谱的质量。不过,LLMGraphTransformer
可能会从通用网域中提取实体,因此可能不适合医疗保健或制药等利基网域。此外,如果您的组织已经有完善的知识图谱构建流程,那么此参考架构中显示的数据注入子系统是可选的。
存储知识图谱和向量嵌入
本文档中的架构使用 Spanner 作为知识图谱和向量嵌入的数据存储区。如果您的企业知识图谱已存在于其他位置(例如 Neo4j 等平台),则可以考虑使用向量数据库来存储嵌入。不过,这种方法需要投入额外的管理精力,并且可能会产生更高的费用。Spanner 为图结构和向量嵌入提供了一个统一的全球一致数据存储区。此类数据存储区可实现统一的数据管理,有助于优化成本、性能、安全治理和运营效率。
智能体运行时
在此参考架构中,代理部署在 Vertex AI Agent Engine 上,后者为 AI 代理提供托管式运行时。您可以考虑的其他选项包括 Cloud Run 和 Google Kubernetes Engine (GKE)。对这些选项的讨论不在本文档的探讨范围之内。
使用 RAG 进行接地
如使用场景部分所述,GraphRAG 可在许多场景中实现智能数据检索,以进行事实依据检索。不过,如果您用于增强提示的源数据不具有复杂的相互关系,那么 RAG 可能适合您的生成式 AI 应用。
以下参考架构展示了如何使用支持向量的托管数据库或专门的向量搜索产品,在 Google Cloud 中构建 RAG 所需的基础设施:
- 使用 Vertex AI 和 Vector Search 且支持 RAG 的生成式 AI 的基础设施
- 使用 Vertex AI 和 AlloyDB for PostgreSQL 的生成式 AI 的 RAG 基础设施
- 使用 GKE 和 Cloud SQL 且支持 RAG 的生成式 AI 基础设施
- 使用 Google Agentspace 和 Vertex AI 的生成式 AI 的 RAG 基础设施。
设计考虑事项
本部分介绍了一些设计因素、最佳实践和建议,您在使用此参考架构开发满足特定安全性、可靠性、费用和性能要求的拓扑时应考虑这些内容。
本部分中的指导并非详尽无遗。根据工作负载的要求以及您使用的 Google Cloud 和第三方产品与功能,您可能还需要考虑其他设计因素和权衡因素。
安全性、隐私权和合规性
本部分介绍了设计注意事项和建议,以便在 Google Cloud 中设计满足工作负载安全性和合规性要求的拓扑。
产品 | 设计注意事项和建议 |
---|---|
Vertex AI | Vertex AI 支持 Google Cloud 安全控制措施,可用于满足数据驻留、数据加密、网络安全和访问透明性的要求。如需了解详情,请参阅以下文档: 生成式 AI 模型可能会生成有害的回答,尤其是在明确提示生成此类回答的情况下。为了提高安全性并缓解潜在的滥用情况,您可以配置内容过滤器来屏蔽有害的回答。如需了解详情,请参阅安全和内容过滤器。 |
Spanner Graph | 默认情况下,存储在 Spanner Graph 中的数据使用 Google-owned and Google-managed encryption keys进行加密。如果您需要使用自己控制和管理的加密密钥,则可以使用客户管理的加密密钥 (CMEK)。如需了解详情,请参阅 CMEK 简介。 |
Cloud Run functions | 默认情况下,Cloud Run 使用 Google-owned and Google-managed encryption keys加密数据。如需使用您控制的密钥保护容器,您可以使用 CMEK。如需了解详情,请参阅使用客户管理的加密密钥。 如需确保仅将获得授权的容器映像部署到 Cloud Run,您可以使用 Binary Authorization。 Cloud Run 可帮助您满足数据驻留要求。Cloud Run functions 函数在所选的区域内运行。 |
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 可帮助您满足数据驻留要求。数据会在您指定的区域内存储或复制。 |
Pub/Sub | 默认情况下,Pub/Sub 使用 Google-owned and Google-managed encryption keys对所有消息(包括静态消息和传输中的消息)进行加密。Pub/Sub 支持使用 CMEK 在应用层进行消息加密。如需了解详情,请参阅配置消息加密。 如果您有数据驻留要求,则可以配置消息存储政策,以便确保消息数据存储在特定位置。 |
Cloud Logging | 默认情况下,系统会为此参考架构中使用的所有 Google Cloud 服务启用管理员活动审核日志。这些日志会记录修改Google Cloud 资源配置或元数据的 API 调用或其他操作。 对于此架构中使用的 Google Cloud 服务,您可以启用数据访问审核日志。通过这些日志,您可以跟踪读取资源配置或元数据的 API 调用,或者跟踪用于创建、修改或读取用户提供的资源数据的用户请求。 如需帮助满足数据驻留要求,您可以配置 Cloud Logging,以将日志数据存储在您指定的区域中。如需了解详情,请参阅区域化存储日志。 |
如需了解特定于 AI 和机器学习工作负载的安全原则和建议,请参阅 Google Cloud Well-Architected Framework 中的 AI 和机器学习视角:安全性。
可靠性
本部分介绍在 Google Cloud中为部署构建和运营可靠的基础设施时应考虑的设计因素和建议。
产品 | 设计注意事项和建议 |
---|---|
Vertex AI | Vertex AI 支持 Gemini 模型的动态共享配额 (DSQ)。DSQ 有助于灵活管理按需付费请求,无需手动管理配额或请求增加配额。DSQ 会在活跃客户之间动态分配给定模型和区域的可用资源。使用 DSQ 时,没有针对单个客户预定义的配额限制。 如果您的请求数量超出分配的容量,则系统会返回错误代码 429。对于业务关键型且始终需要高吞吐量的工作负载,您可以使用预配吞吐量来预留吞吐量。如果数据可以在多个区域或国家/地区之间共享,您可以使用全局端点。 |
Spanner Graph | Spanner 旨在实现高数据可用性和全球可伸缩性。为帮助确保可用性,即使在区域中断期间也能正常运行,Spanner 提供了多区域配置,可在多个区域的多个可用区中复制数据。除了这些内置的弹性功能之外,Spanner 还提供以下功能来支持全面的灾难恢复策略:
如需了解详情,请参阅灾难恢复概览。 |
Cloud Run functions | Cloud Run 是区域级服务。数据跨一个区域内的多个可用区同步存储。流量在可用区之间自动进行负载均衡。如果可用区服务中断,Cloud Run 将继续运行,并且数据不会丢失。如果区域服务中断,该服务将停止运行,直到 Google 解决服务中断问题。 |
Cloud Storage | 您可以在以下三种位置类型之一中创建 Cloud Storage 存储分区:单区域、双区域或多区域。存储在区域级存储分区中的数据会跨一个区域内的多个可用区同步复制。为了获得更高的可用性,您可以使用双区域或多区域存储桶,其中数据会跨区域异步复制。 |
Pub/Sub | 为避免在消息流量出现瞬时峰值期间发生错误,您可以在发布方设置中配置流控制,以限制发布请求的速率。 如需处理失败的发布尝试,请根据需要调整重试请求变量。如需了解详情,请参阅重试请求。 |
此架构中的所有产品 | 在 Google Cloud中部署工作负载后,您可以使用 Active Assist 获取建议,以进一步优化云资源的可靠性。查看建议,并根据您的环境应用这些建议。如需了解详情,请参阅在 Recommendation Hub 中查找建议。 |
如需了解特定于 AI 和机器学习工作负载的可靠性原则和建议,请参阅 Well-Architected Framework 中的 AI 和机器学习视角:可靠性。
费用优化
本部分将指导您优化您使用此参考架构构建的 Google Cloud 拓扑的设置和操作费用。
产品 | 设计注意事项和建议 |
---|---|
Vertex AI | 为了分析和管理 Vertex AI 费用,我们建议您创建每秒查询次数 (QPS) 和每秒令牌数 (TPS) 的基准,并在部署后监控这些指标。基准还有助于进行容量规划。例如,基准有助于您确定何时需要预配吞吐量。 为生成式 AI 应用选择合适的模型 是一项关键决策,会直接影响费用和性能。为了确定在性能和费用之间实现最佳平衡的模型,请针对您的特定应用场景迭代测试模型。建议您从最具成本效益的模型开始,然后逐步升级到更强大的选项。 提示(输入)和生成的回答(输出)的长度会直接影响性能和费用。撰写简短、直接且提供充分背景信息的提示。设计提示,以便从模型中获得简洁的回答。例如,可使用“用两句话总结”或“列出 3 个要点”等短语。 如需了解详情,请参阅提示设计最佳实践。 如需减少包含重复内容及大量输入词元的请求的费用,请使用上下文缓存。 在相关情况下,请考虑使用批量预测。批处理请求的费用低于标准请求。 |
Spanner Graph | 使用托管式自动扩缩器,根据 CPU 利用率和存储需求动态调整 Spanner 图数据库的计算容量。即使是小型工作负载,通常也需要最低容量。 对于可预测、稳定或基准计算容量,请购买承诺使用折扣 (CUD)。CUD 可提供大幅折扣,以换取您承诺在计算容量方面达到一定的每小时支出。 将备份复制到不同区域以实现灾难恢复或合规性时,请考虑网络出站流量费用。为帮助降低费用,请仅复制必要的备份。 |
Cloud Run functions | 创建 Cloud Run functions 函数时,您可以指定要分配的内存量和 CPU 量。如需控制费用,请从默认(最小)CPU 和内存分配开始。如需提升性能,您可以通过配置 CPU 限制和内存限制来增加分配量。如需了解详情,请参阅以下文档: 如果您可以预测 CPU 和内存要求,则可以通过承诺使用折扣 (CUD) 来节省资金。 |
Cloud Storage | 对于数据注入子系统中的 Cloud Storage 存储桶,请根据工作负载对数据保留和访问频率的要求来选择适当的存储类别。例如,如需控制存储费用,您可以选择 Standard 类别并使用 对象生命周期管理。这样,系统就会根据指定的条件将对象自动降级为费用较低的存储类别或自动删除对象。 |
Cloud Logging | 如需控制存储日志的费用,您可以执行以下操作: |
此架构中的所有产品 | 在 Google Cloud中部署工作负载后,您可以使用 Active Assist 获取建议,以进一步优化云资源的费用。查看建议,并根据您的环境应用这些建议。如需了解详情,请参阅在 Recommendation Hub 中查找建议。 |
如需估算 Google Cloud 资源的费用,请使用Google Cloud 价格计算器。
如需了解特定于 AI 和机器学习工作负载的费用优化原则和建议,请参阅 Well-Architected Framework 中的 AI 和机器学习视角:费用优化。
性能优化
本部分介绍了设计注意事项和建议,以帮助您在 Google Cloud 中设计满足工作负载性能要求的拓扑。
产品 | 设计注意事项和建议 |
---|---|
Vertex AI |
为生成式 AI 应用选择合适的模型 是一项关键决策,会直接影响费用和性能。为了确定在性能和费用之间实现最佳平衡的模型,请针对您的特定应用场景迭代测试模型。建议您从最具成本效益的模型开始,然后逐步升级到更强大的选项。 提示(输入)和生成的回答(输出)的长度会直接影响性能和费用。撰写简短、直接且提供充分背景信息的提示。设计提示,以便从模型中获得简洁的回答。例如,可使用“用两句话总结”或“列出 3 个要点”等短语。 如需了解详情,请参阅提示设计最佳实践。 借助 Vertex AI 提示优化器,您可以快速大规模地改进和优化提示效果,而无需手动重写提示。优化器可帮助您高效地调整不同模型的提示。 |
Spanner Graph | 如需了解优化 Spanner Graph 性能的相关建议,请参阅以下文档: |
Cloud Run functions | 默认情况下,系统会为每个 Cloud Run 函数实例分配一个 CPU 和 256 MiB 的内存。您可以根据性能要求配置 CPU 和内存限制。 如需了解详情,请参阅以下文档: 如需了解更多性能优化指南,请参阅 Cloud Run 常规开发技巧。 |
Cloud Storage | 如需上传大型文件,您可以使用并行复合上传。使用此策略时,大文件会拆分为各个块。这些块会并行上传到 Cloud Storage,然后数据会在云中重新组合。如果网络带宽和磁盘速度不是限制因素,则并行复合上传可能比常规上传操作更快。不过,此策略存在一些限制和费用影响。如需了解详情,请参阅并行复合上传。 |
此架构中的所有产品 | 在 Google Cloud中部署工作负载后,您可以使用 Active Assist 获取建议,以进一步优化云资源的性能。查看建议,并根据您的环境应用这些建议。如需了解详情,请参阅在 Recommendation Hub 中查找建议。 |
如需了解特定于 AI 和机器学习工作负载的性能优化原则和建议,请参阅 Well-Architected Framework 中的 AI 和机器学习视角:性能优化。
部署
如需了解 GraphRAG 在 Google Cloud中的运作方式,请从 GitHub 下载并运行以下 Jupyter 笔记本: Google Cloud 上的 GraphRAG - 使用 Spanner Graph 和 Vertex AI Agent Engine。
后续步骤
- 使用 Spanner Graph 和 LangChain 构建 GraphRAG 应用
- 为生成式 AI 应用选择模型和基础设施
- 使用 Vertex AI 和 Vector Search 且支持 RAG 的生成式 AI 的基础设施
- 使用 Vertex AI 和 AlloyDB for PostgreSQL 的生成式 AI 的 RAG 基础设施
- 使用 GKE 和 Cloud SQL 且支持 RAG 的生成式 AI 基础设施
- 使用 Google Agentspace 和 Vertex AI 的生成式 AI 的 RAG 基础设施
- 如需了解 Google Cloud中 AI 工作负载的架构原则和建议,请参阅 Well-Architected Framework:AI 和机器学习视角。
- 如需查看更多参考架构、图表和最佳实践,请浏览 Cloud 架构中心。
贡献者
作者:
- Tristan Li | AI/机器学习首席架构师
- Kumar Dhanagopal | 跨产品解决方案开发者
其他贡献者:
- Ahsif Sheikh | AI 客户工程师
- Ashish Chauhan | AI 客户工程师
- Greg Brosman | 产品经理
- Lukas Bruderer | Cloud AI 产品经理
- Nanditha Embar | AI 客户工程师
- Piyush Mathur | 产品经理,Spanner
- Smitha Venkat | AI 客户工程师