本文件提供參考架構,可協助您設計基礎架構,使用 Google Kubernetes Engine (GKE)、Cloud SQL 和 Ray、Hugging Face 和 LangChain 等開放原始碼工具,執行採用檢索增強生成 (RAG) 的生成式 AI 應用程式。為協助您試用這個參考架構,GitHub 提供範例應用程式和 Terraform 設定。
本文件適用於想使用開放原始碼工具和模型,快速建構及部署支援 RAG 的生成式 AI 應用程式的開發人員。本課程假設您具備 GKE 和 Cloud SQL 的使用經驗,並對 AI、機器學習 (ML) 和大型語言模型 (LLM) 有概念上的瞭解。本文不提供如何設計及開發生成式 AI 應用程式的指引。
架構
下圖概略呈現 Google Cloud中支援 RAG 的生成式 AI 應用程式架構:
這個架構包含服務子系統和嵌入子系統。
- 服務子系統會處理應用程式和使用者之間的要求/回覆流程。子系統包含前端伺服器、推論伺服器和負責任 AI (RAI) 服務。服務子系統會透過向量資料庫與嵌入子系統互動。
- 嵌入子系統在架構中的用途,是提供 RAG 功能。這個子系統會執行下列動作:
- 從 Google Cloud、地端部署和其他雲端平台的資料來源擷取資料。
- 將擷取的資料轉換為嵌入向量。
- 將嵌入儲存至向量資料庫。
下圖詳細呈現架構:
如上圖所示,前端伺服器、推論伺服器和嵌入服務會部署在 Autopilot 模式的區域性 GKE 叢集中。RAG 的資料是透過 Cloud Storage bucket 擷取。這個架構使用 PostgreSQL 適用的 Cloud SQL 執行個體,並搭配 pgvector 擴充功能,來儲存嵌入向量及執行語意搜尋。
以下各節會針對架構內的子系統說明各個元件和資料流程。
嵌入子系統
以下是嵌入子系統中的資料流程:
- 使用者或程式會將外部和內部來源的資料上傳至 Cloud Storage bucket。上傳的資料可能位於檔案、資料庫或串流資料中。
- (未顯示在架構圖中)。資料上傳活動會觸發事件,並發布至 Pub/Sub 等訊息服務。訊息服務會傳送通知給嵌入服務。
- 嵌入服務收到資料上傳事件通知時,會執行下列操作:
- 透過 Cloud Storage FUSE CSI 驅動程式,從 Cloud Storage bucket 擷取資料。
- 讀取上傳的資料,並使用 Ray Data 預先處理。預先處理作業可能包括將資料分塊,並轉換成適合生成嵌入的格式。
- 執行 Ray 工作,使用部署在相同叢集的開放原始碼模型,建立預先處理資料的嵌入向量。
- 將嵌入向量寫入 PostgreSQL 適用的 Cloud SQL 向量資料庫。
如下一節所述,服務子系統處理使用者要求時,會使用嵌入向量擷取相關的特定領域資料。
服務子系統
以下是服務子系統中的要求/回覆流程:
- 使用者透過網頁式對話介面,向前端伺服器提交自然語言要求。前端伺服器在 GKE 上執行。
- 前端伺服器會執行 LangChain 程序,執行下列操作:
- 使用與嵌入服務相同的模型和參數,將自然語言要求轉換為嵌入向量。
- 對向量資料庫中的嵌入執行語意搜尋,擷取相關的基準資料。
- 結合原始要求和擷取的基準資料,建構含有背景資訊的提示。
- 將含有背景資訊的提示傳送至推論伺服器 (在 GKE 執行)。
- 推論伺服器會使用 Hugging Face TGI 服務架構,提供 Mistral-7B-Instruct 或 Gemma 等開放模型。
LLM 會生成提示詞的回覆,推論伺服器則會將回覆傳送至前端伺服器。
您可以在 Cloud Logging 儲存及查看要求/回覆活動的記錄,並使用 Cloud Monitoring 設定記錄指標監控。您也可以將生成的回覆載入 BigQuery,進行離線分析。
前端伺服器會叫用 RAI 服務,對回覆套用必要的安全篩選器。您可以使用 Sensitive Data Protection 和 Cloud Natural Language API 等工具,探索、篩選、分類及去識別化回覆中的機密內容。
前端伺服器將篩選後的回覆傳送給使用者。
使用的產品
以下摘要說明上述架構使用的 Google Cloud 和開放原始碼產品:
Google Cloud 產品
- Google Kubernetes Engine (GKE):這項 Kubernetes 服務可讓您透過 Google 的基礎架構,大規模部署及操作容器化應用程式。
- Cloud Storage:適用於多種資料類型的物件儲存庫,成本低廉且沒有限制。資料在 Google Cloud內外都能存取,且會複製到多個位置,以便提供備援機制。
- Cloud SQL:全代管關聯式資料庫服務,可協助您在 Google Cloud上佈建、操作及管理 MySQL、PostgreSQL 和 SQL Server 資料庫。
開放原始碼產品
- Hugging Face Text Generation Inference (TGI):用於部署及提供 LLM 的工具包。
- Ray:開放原始碼的整合式運算框架,可協助您擴充 AI 和 Python 工作負載。
- LangChain:用於開發及部署 LLM 輔助應用程式的框架。
用途
RAG 是提升 LLM 生成輸出內容品質的有效技術。本節提供一些範例,說明如何使用具備 RAG 功能的生成式 AI 應用程式。
個人化的產品推薦內容
線上購物網站可能會使用 LLM 輔助的聊天機器人,協助顧客尋找產品或取得購物相關協助。系統可利用使用者購買行為和網站互動模式的歷來資料,強化使用者提出的問題。這些資料可能包括儲存在非結構化資料儲存庫中的使用者評論和意見回饋,或儲存在網站數據分析資料倉儲中的搜尋相關指標。接著,LLM 會處理增強後的問題,生成更符合使用者需求、更具吸引力的個人化回覆。
臨床輔助系統
醫院的臨床醫師需要查看並彙整病患的健康資訊,才能做出明智的照護決策。生成式 AI 應用程式採用 MedGemma 等醫療基礎模型,可協助臨床醫師總結臨床記錄,並查看醫療背景資訊。應用程式生成的回覆可根據歷來病患記錄,方法是使用醫院電子健康記錄 (EHR) 資料庫或 PubMed 等外部知識庫的資料,為提示提供脈絡。
有效率地研究法律
律師可運用生成式 AI 法律研究功能,快速查詢大量法規和判例法,找出相關法律先例或總結複雜的法律概念。律師可以從律師事務所的專屬合約語料庫、過往法律通訊和內部案件記錄中擷取資料,並將這些資料加入提示,藉此提升這類研究的輸出內容品質。這種設計方法有助於生成與律師專業法律領域相關的回覆。
設計替代方案
本節介紹其他設計方法,供您在 Google Cloud中建構具備 RAG 功能的生成式 AI 應用程式時參考。
全代管向量搜尋
如果架構需要使用全代管向量搜尋產品,可以採用 Gemini Enterprise Agent Platform 和向量搜尋,這項服務提供最佳化的服務基礎架構,可執行超大規模的向量搜尋。詳情請參閱「使用 Gemini Enterprise Agent Platform 和向量搜尋建構生成式 AI 的 RAG 基礎架構」。
其他 RAG 架構
如要瞭解 RAG 工作負載的其他架構選項,請參閱「採用 RAG 的生成式 AI」。
設計須知
本節提供指引,協助您開發及執行 GKE 託管、支援 RAG 的生成式 AI 架構,滿足您在安全性、法規遵循、可靠性、成本和效能方面的特定需求。本節提供的指引僅供參考,視應用程式的特定需求,以及您使用的 Google Cloud 產品和功能而定,您可能需要考量其他設計因素和權衡取捨。
如需本參考架構中開放原始碼工具的設計指南,請參閱這些工具的說明文件。
安全性、隱私權和法規遵循
本節說明在 Google Cloud 中設計及建構支援 RAG 的生成式 AI 應用程式時,應考量的因素,以符合安全性、隱私權和法規遵循要求。
| 產品 | 設計須知 |
|---|---|
| GKE |
在 Autopilot 作業模式中,GKE 會預先設定叢集,並依據安全性最佳做法管理節點,讓您專注於工作負載專屬的安全性。詳情請參閱「GKE Autopilot 安全措施」。 如要確保在 GKE 中執行的應用程式具有更強大的存取控管機制,您可以使用 Identity-Aware Proxy (IAP)。IAP 與 GKE Ingress 資源整合,可確保只有通過驗證且具備正確 Identity and Access Management (IAM) 角色的使用者才能存取應用程式。詳情請參閱「為 GKE 啟用 IAP」。 根據預設,GKE 會使用 Google-owned and Google-managed encryption keys,將靜態和傳輸中的資料加密。如要為機密資料多添一層安全防護,您可以使用自己擁有並透過 Cloud KMS 管理的金鑰,在應用程式層加密資料。詳情請參閱「在應用程式層加密 Secret」。 如果您使用標準 GKE 叢集,則可使用下列額外的資料加密功能:
|
| Cloud SQL |
架構中的 Cloud SQL 執行個體不需要透過公開網際網路存取。如需外部存取 Cloud SQL 執行個體,可以使用 SSL/TLS 或 Cloud SQL Auth Proxy 連接器加密外部連線。Auth Proxy 連接器會使用 IAM 提供連線授權。連接器會使用 TLS 1.3 連線和 256 位元 AES 加密,驗證用戶端和伺服器身分,並加密資料流量。如果是使用 Java、Python、Go 或 Node.js 建立的連線,請使用適當的語言連接器,而非 Auth Proxy 連接器。 Cloud SQL 預設會使用 Google 自有和 Google 代管的資料加密金鑰 (DEK) 和金鑰加密金鑰 (KEK),將靜態資料加密。如要使用您控管及管理的 KEK,可以採用客戶自行管理的加密金鑰 (CMEK)。 如要防止未經授權的使用者存取 Cloud SQL Admin API,您可以使用 VPC Service Controls 建立 service perimeter。 如要瞭解如何設定 Cloud SQL,以符合資料落地規定,請參閱「資料落地總覽」。 |
| Cloud Storage |
根據預設,儲存在 Cloud Storage 中的資料會使用 Google-owned and Google-managed encryption keys加密。如有需要,您可以使用 CMEK,或透過外部管理方法 (例如客戶提供的加密金鑰 (CSEK)) 自行管理金鑰。詳情請參閱「資料加密選項」。 Cloud Storage 支援兩種方法,可控管使用者對 bucket 和物件的存取權:IAM 和存取控管清單 (ACL)。在多數情況下,建議您使用 IAM,在 bucket 和專案層級授予權限。詳情請參閱「存取控管總覽」。 您透過 Cloud Storage 載入嵌入子系統的資料可能包含機密資料。如要保護這類資料,您可以使用 Sensitive Data Protection 探索、分類及去識別化資料。詳情請參閱「搭配運用 Cloud Storage 和 Sensitive Data Protection」。 如要降低 Cloud Storage 資料遭竊取的風險,可以使用 VPC Service Controls 建立 service perimeter。 Cloud Storage 可協助您遵守資料落地規定。資料會儲存或複製到您指定的區域。 |
| 這個架構中的所有產品 |
根據預設,此參考架構中使用的所有 Google Cloud 服務都會啟用管理員活動稽核記錄。您可以透過 Cloud Logging 存取記錄。您可以使用這些記錄,監控 API 呼叫或修改 Google Cloud 資源設定或中繼資料的其他動作。 資料存取稽核記錄也預設為啟用,適用於這個架構中的所有 Google Cloud 服務。您可以使用這些記錄監控下列項目:
在 Google Cloud中部署應用程式後,您可以使用 Active Assist 取得建議,進一步提升安全性。請查看建議,並視環境情況套用。詳情請參閱「在 Active Assist 中查看建議」。 |
如需 AI 和機器學習工作負載專屬的安全原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:安全性」。
可靠性
本節說明在Google Cloud中,建構及操作具備 RAG 功能的生成式 AI 應用程式可靠基礎架構時,應考量的設計因素。
| 產品 | 設計須知 |
|---|---|
| GKE |
在這個架構中,GKE 採用 Autopilot 模式,提供下列內建可靠性功能:
為確保 GKE 叢集自動調度資源時,有足夠的 GPU 容量可用,您可以建立並使用預留項目。預留項目可確保特定資源在特定可用區中具有容量。預留項目可以專屬於某項專案,也可以由多項專案共用。即使未佈建或使用預留資源,仍須支付費用。詳情請參閱「耗用預留的可用區資源」。 採用最佳化資料載入、映像檔串流和快速啟動節點等技術,盡可能縮短推論伺服器的啟動時間。詳情請參閱「最佳化推論工作負載的冷啟動延遲時間」。 |
| Cloud SQL |
為確保向量資料庫能抵禦資料庫故障和可用區中斷,請使用高可用性設定的 Cloud SQL 執行個體。如果主要資料庫故障或可用區中斷,Cloud SQL 會自動容錯移轉至其他可用區的待命資料庫。您不需要變更資料庫端點的 IP 位址。 為確保 Cloud SQL 執行個體符合服務水準協議,請遵循建議的操作指南。例如,請確保 CPU 和記憶體大小適合工作負載,並啟用自動增加儲存空間。詳情請參閱操作指南。 |
| Cloud Storage | 您可以在下列其中一種位置類型建立 Cloud Storage bucket:單一區域、雙區域或多區域。儲存在區域 bucket 中的資料,會同步複製到區域內的多個可用區。如要提高可用性,可以使用雙區域或多區域值區,資料會以非同步方式在不同區域之間複製。 |
| 架構中的所有產品 | 在 Google Cloud部署應用程式後,您可以使用 Active Assist 取得建議,進一步提升可靠性。請查看建議,並視環境情況套用。詳情請參閱「在 Active Assist 中查看建議」。 |
如需 AI 和機器學習工作負載專屬的可靠性原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:可靠性」。
成本最佳化
本節提供指引,協助您在 Google Cloud中設定及執行具備 RAG 功能的生成式 AI 應用程式,並盡可能降低成本。
| 產品 | 設計須知 |
|---|---|
| GKE |
在 Autopilot 模式下,GKE 會根據工作負載需求,盡可能提升叢集基礎架構的效率。您不必持續監控資源使用率或管理容量,即可控管成本。 如果您能預測 GKE Autopilot 叢集的 CPU、記憶體和臨時儲存空間用量,就能透過承諾使用折扣節省費用。詳情請參閱「GKE 承諾使用折扣」。 如要降低執行應用程式的費用,可以為 GKE 節點使用 Spot VM。Spot VM 的價格比標準 VM 低,但可能會遭到先占。 如需更多成本最佳化指南,請參閱下列資源: |
| Cloud SQL |
高可用性 (HA) 設定有助於在可用區或執行個體無法使用時,縮短 Cloud SQL 資料庫的停機時間。不過,設定高可用性的執行個體費用高於獨立執行個體。如果向量資料庫不需要高可用性,可以改用獨立執行個體來降低成本,但這類執行個體無法抵禦可用區中斷。 您可以偵測 Cloud SQL 執行個體是否過度佈建,並使用 Active Assist 提供的 Cloud SQL 成本洞察和建議,將帳單費用最佳化。詳情請參閱「減少超額佈建的 Cloud SQL 執行個體」。 如果您能預測 Cloud SQL 執行個體的 CPU 和記憶體需求,則可透過承諾使用折扣節省費用。詳情請參閱「Cloud SQL 承諾使用折扣」。 |
| Cloud Storage | 針對用於將資料載入嵌入子系統的 Cloud Storage bucket,請選擇適當的儲存空間級別。選擇儲存空間級別時,請考量工作負載的資料保留和存取頻率需求。舉例來說,如要控管儲存空間費用,您可以選擇 Standard 級別,並使用物件生命週期管理功能。這樣一來,系統就會根據您設定的條件,自動將物件降級至費用較低的儲存空間級別,或刪除物件。 |
| 架構中的所有產品 | 在 Google Cloud部署應用程式後,您可以使用 Active Assist 取得建議,進一步提高成本效益。請查看建議,並視環境情況套用。詳情請參閱「在 Active Assist 中查看建議」。 |
如要估算 Google Cloud 資源的費用,請使用Google Cloud Pricing Calculator。
如要瞭解 AI 和機器學習工作負載專屬的成本最佳化原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:成本最佳化」。
效能最佳化
本節說明在 Google Cloud 中設計及建構支援 RAG 的生成式 AI 應用程式時,應考量的因素,以確保應用程式符合效能需求。
| 產品 | 設計須知 |
|---|---|
| GKE |
根據工作負載的效能需求,為 Pod 選擇合適的運算類別。對於執行推論伺服器和嵌入服務的 Pod,建議您使用 GPU 機器類型,例如 nvidia-l4。 |
| Cloud SQL |
如要最佳化 Cloud SQL 執行個體的效能,請確保分配給執行個體的 CPU 和記憶體足以處理工作負載。詳情請參閱「最佳化佈建不足的 Cloud SQL 執行個體」。 如要縮短近似近鄰 (ANN) 向量搜尋的回應時間,請使用反向檔案與平面壓縮 (IVFFlat) 索引或 Hierarchical Navigable Small World (HNSW) 索引 Cloud SQL 提供查詢洞察工具,可協助您分析及改善資料庫的查詢效能。您可以使用這項工具監控效能,並追蹤有問題的查詢來源。詳情請參閱「使用查詢洞察功能提升查詢效能」。 如要查看資料庫狀態和效能的總覽,以及尖峰連線數和磁碟使用率等詳細指標,可以使用 System Insights 資訊主頁。詳情請參閱「使用系統深入分析功能提升系統效能」。 |
| Cloud Storage | 如要上傳大型檔案,可以使用平行複合上傳方法。這項策略會將大型檔案分割成多個區塊。這些區塊會平行上傳至 Cloud Storage,然後在雲端重新組合。如果網路頻寬和磁碟速度不是限制因素,平行複合上傳作業的速度可能會比一般上傳作業快。不過,這項策略有一些限制和費用影響。 詳情請參閱「平行複合上傳」。 |
| 架構中的所有產品 | 在 Google Cloud中部署應用程式後,您可以使用 Active Assist 取得建議,進一步提升效能。請查看建議,並視環境情況套用。詳情請參閱「在 Active Assist 中查看建議」。 |
如要瞭解 AI 和機器學習工作負載專屬的效能最佳化原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點:效能最佳化」。
部署作業
如要部署以這個參考架構為基礎的拓撲,您可以下載並使用 GitHub 存放區中的開放原始碼程式碼範例。程式碼範例不適用於正式環境。您可以使用程式碼,嘗試為支援 RAG 的生成式 AI 應用程式設定 AI 基礎架構。
程式碼範例會執行下列作業:
- 佈建 PostgreSQL 適用的 Cloud SQL 執行個體,做為向量資料庫。
- 將 Ray、JupyterHub 和 Hugging Face TGI 部署至您指定的 GKE 叢集。
- 將範例網頁式聊天機器人應用程式部署至 GKE 叢集,以便驗證 RAG 功能。
如需使用程式碼範例的操作說明,請參閱程式碼的 README。如果使用程式碼範例時發生任何錯誤,且 GitHub 問題中沒有相關記錄,請在 GitHub 中建立問題。
程式碼範例會部署計費 Google Cloud 資源。使用完程式碼後,請移除不再需要的資源。
後續步驟
- 請參閱下列 GKE 最佳做法指南:
- 在 GKE 上使用 GPU 搭配 Hugging Face TGI 提供 Gemma 開放式模型。
- 使用 Agent Platform 和向量搜尋建構生成式 AI 的 RAG 基礎架構。
- 使用 Agent Platform 和 AlloyDB for PostgreSQL 建構生成式 AI 的 RAG 基礎架構。
- 使用 Gemini Enterprise 和 Agent Platform 建構生成式 AI 的 RAG 基礎架構。
- 使用 Agent Platform 和 Spanner Graph 建構生成式 AI 的 GraphRAG 基礎架構。
- 如要概略瞭解 Google Cloud中 AI 和機器學習工作負載專屬的架構原則和建議,請參閱 Well-Architected Framework 中的「AI 和機器學習觀點」一文。
- 如要查看更多參考架構、圖表和最佳做法,請瀏覽 Cloud Architecture Center。
貢獻者
作者:Kumar Dhanagopal | 跨產品解決方案開發人員
其他貢獻者:
- Anna Berenberg | 工程研究員
- Ali Zaidi | 解決方案架構師
- Bala Narasimhan | 產品群經理
- Bill Bernsen | 資安工程師
- Brandon Royal | 對外產品經理
- Cynthia Thomas | 產品經理
- Geoffrey Anderson | 產品經理
- Gleb Otochkin | Cloud Advocate, Databases
- Jack Wotherspoon | 開發人員服務代表
- Julie Amundson | 資深軟體工程師
- Kent Hua | 解決方案經理
- Kavitha Rajendran | AI/機器學習專家、解決方案架構師
- Mark Schlagenhauf | 網路技術文件撰稿者
- Megan O'Keefe | 開發人員服務代表
- Mofi Rahman | Google Cloud Advocate