使用 Vertex AI 建構 Google 等級的搜尋系統

1. 事前準備

繼續本程式碼研究室前,請注意以下事項。

必要條件

  • 對 LLM 有基本瞭解
  • 對 RAG 系統有基本瞭解

課程內容

  • 如何建構符合 Google 品質的搜尋引擎,根據您上傳的資料回答問題
  • 如何建立 Vertex AI 資料儲存庫
  • 如何建立 Vertex AI 代理程式
  • 如何利用 CloudRun 部署應用程式

軟硬體需求

  • Google Cloud 帳戶
  • Google Cloud 專案
  • 含有終端機的 IDE

簡介

Google 搜尋是一款功能強大的工具,可利用龐大的網頁和其他內容索引,為使用者查詢提供相關結果。這項技術稱為檢索增強生成 (RAG),是現代 AI 的重要技術。

RAG 必須先從文件語料庫擷取相關段落,我們會使用各種方法,例如關鍵字比對、語意相似度和機器學習。擷取相關段落後,系統會使用這些段落產生摘要,或回答使用者的查詢。

RAG 的主要優點是能讓語言模型避免幻覺。「幻覺」這個詞是用於描述文件語料庫中證據不支援的文字生成方式。當語言模型無法區分相關和不相關的資訊時,就可能發生這種情況。

RAG 會確保生成的文字一律以文件語料庫中的證據為依據,避免出現幻覺回覆。因此可提供更可靠且值得信賴的資訊。

RAG 是一項強大技術,應用於各種應用程式,包括搜尋引擎、聊天機器人和回答系統。在未來幾年,這項技術在 AI 領域的角色可能會越來越重要。

以下列舉幾個實際運用 RAG 技術的範例:

  • 許多搜尋系統會使用 RAG 產生與使用者查詢相關的搜尋結果。
  • 聊天機器人會使用 RAG 技術,針對使用者的問題產生有用且引人入勝的回覆。
  • 問答系統會使用 RAG,為使用者的問題產生準確且完整的答案。

RAG 是一項多用途的技術,可用於產生各種領域和應用程式的文字。這項強大的工具可協助 AI 技術變得更聰明,並提供更多資訊。

在本程式碼研究室中,我們將建構 RAG 系統,協助您使用上傳的提供語料庫來解答問題。Vertex AI Search/Agent Builder 是立即可用的 RAG 平台,可協助您加快 RAG 系統的建構作業,避免您需要手動收集文件、剖析、分割、產生嵌入項目、擴充查詢、擷取候選項目並進行排名。雖然立即可用的 RAG 系統可協助您快速上手,但 Google Cloud 也提供獨立的 API,可用於建構自己的 DIY RAG 系統,讓您根據業務需求微調 RAG 系統。

建構項目

完成本程式碼研究室後,您將部署可運作的 RAG 系統,該系統可根據事實資訊回答您的問題,並引用正確的參考資料。

您也能更加瞭解如何運用 Vertex AI Search API,在 Google Cloud 中建構這個 RAG 架構。除此之外,您還會瞭解如何在 Cloud Run 上部署這個 RAG 架構應用程式 (含前端和後端),Cloud Run 是無伺服器平台,可將應用程式以容器的形式部署在 Google Cloud 上。

2d055ded874603a6.png

應用程式的運作方式

  • 上傳資料:使用者可以上傳自己的資料集,例如 PDF 檔案做為輸入內容。
  • 在搜尋列中提問:使用者可以根據已上傳的資料資料庫,在搜尋列中提問。
  • 擷取答案:使用者可以根據查詢的關聯性,擷取搜尋結果/候選答案,並檢查擷取的答案是否符合事實/有根據。

2. 環境設定

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 請確認 Google Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能
  3. 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境。如要使用這個叢集,請按一下 Google Cloud 控制台頂端的「啟用 Cloud Shell」。

1829c3759227c19b.png

  1. 連線至 Cloud Shell 後,請使用下列指令來檢查是否已通過驗證,以及專案是否已設為專案 ID:
gcloud auth list
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
  1. 如果您尚未設定專案,請使用下列指令進行設定:
gcloud config set project <YOUR_PROJECT_ID>
  1. 請確認已啟用下列 API:
  • Cloud Run
  • Vertex AI
  • Cloud Storage

除了使用 gcloud 指令,您也可以透過這個連結前往主控台。如要瞭解 gcloud 指令和使用方式,請參閱說明文件

3. 步驟 1:建立 GCP 值區

  • 前往控制台,在搜尋列中輸入「Cloud Storage」。
  • 從建議結果中選取 Cloud Storage。21d2bc910e71f7ec.png
  • 按一下「建立值區」

adf5c0382f6c3540.png

  • 為值區提供全域不重複的名稱
  • 按一下「繼續」
  • 在「位置類型」中選取「多區域」
  • 請務必在下拉式選單中選取 us (multiple regions in United States) 選項

731aead7d8497725.png

  • 按一下「建立值區」

f7ac409ed9c4af21.png

4. 步驟 2:建立 Vertex AI Datastore

  • 在控制台頁面的搜尋列中,輸入「Vertex AI Agent Builder」
  • 選取第一個產品「Agent Builder」

c4a67b92bb7900e3.png

  • 在「Agent Builder」頁面中,按一下左側導覽列中的「資料儲存庫」

f86f67d344d398fb.png

  • 按一下「建立資料儲存庫」

e64e771f33543f46.png

  • 選取 Cloud Storage 做為資料儲存庫
  • 按一下「Cloud Storage」圖示下方的「選取」

3a8d22888e7eedc2.png

  • 在「資料夾」選項下方的分頁中,按一下「瀏覽」按鈕
  • 選取您在步驟 1 中建立的值區
  • 在下方選項中,請務必選取「連結的非結構化文件 (內含中繼資料的 JSONL)」
  • 按一下「Continue」(繼續)

13876b5d12dbe1fb.png

  • 在「Configuration」(設定) 頁面上,選取「global」(全球) 做為資料儲存庫的位置
  • 為資料儲存庫提供可識別的名稱
  • 按一下「建立」

618b7a456fbffad4.png

Brownie:

  • 在「建立」按鈕上方,您可以看到文件處理選項。
  • 您可以嘗試使用不同的剖析器,例如數位、OCR 或版面配置剖析器
  • 您也可以啟用進階分塊功能,以及提供自己的自訂區塊大小限制

38471c1d3411610d.png

5. 步驟 3:建立代理程式

  • 建立資料儲存庫後,請在左側導覽列中按一下應用程式,然後選擇「應用程式」。
  • 按一下「Create App」(建立應用程式) 按鈕
  • 選取「搜尋」做為應用程式類型 (您也可以建立服務機器人、對話式機器人、推薦內容等)

ae5294e33f63567c.png

  • 請務必選取「內容」下方的「一般」。您也可以根據資料儲存庫,以及您要建立的資料和系統類型,選取「媒體」或「推薦內容」。
  • 務必同時啟用 Enterprise 版和進階 LLM 功能
  • 提供應用程式名稱
  • 提供貴公司名稱

f8a41c9751f7a8d3.png

  • 務必將區域設為「全球」
  • 按一下「繼續」ed17b18e094ba59a.png
  • 在下一個畫面中,選取您在步驟 2 中建立的資料儲存庫
  • 按一下「建立」

bc77006e0025ae9e.png

6. 步驟 4:將應用程式轉換為 Docker 映像檔

  • 在 Google Cloud 控制台中開啟終端機
  • 使用下列指令複製存放區 <sample_repository_link>

git clone https://github.com/kkrishnan90/vertex-ai-search-agent-builder-demo

  • 變更目錄,並使用下列指令前往複製的存放區

cd vertex-ai-search-agent-builder-demo

  • 資料夾結構
  • 後端:這個類別會保留以 Python 為基礎的 API 實作,協助建立前端可互動的 RESTful 端點。
  • 前端:會保留以 React 為基礎的應用程式,並提供 UI。這也會包含透過 REST 端點對後端發出的必要應用程式層級呼叫
  • Dockerfile - 這個檔案會包含建立 Docker 容器的所有相關指令
  • 在存放區目錄的根目錄中,執行下列指令,以便建構 Docker 映像檔 (注意:在使用 M1、M2 等 Apple Silicon 晶片的 MacBook 中建構 Docker 容器時,請務必使用 - - platform 標記。如果您使用 Windows 機器建構,或是 CPU 架構是 Intel 架構,則不需要使用這個標記)

docker build --platform linux/amd64 -t your-image-name .

  • Docker 容器建構作業完成後,請執行下列指令,為容器加上正確的標記,確保您提供的映像檔版本正確無誤。請注意,應用程式可能會有多個版本,因此 Docker 容器中會有多個版本標記。從開發運作的角度來看,確保一律使用最新的穩定版本是不錯的做法。

docker tag your-image-name REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

  • 成功標記 Docker 容器映像檔後,現在即可將映像檔推送至 Google Artifact Registry (GAR)。GAR 是 Google 提供的全代管平台,可協助管理及控管 Docker 容器的版本。執行下列指令,將上述標記的容器推送至 GAR。如需瞭解詳情,請參閱以下連結 [https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling]

docker push REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

7. 步驟 5:在 Cloud Run 上部署應用程式

  • 將終端機最小化。在 Google Cloud 控制台搜尋列中搜尋 Cloud Run
  • 按一下建議的 Cloud Run 產品

592103eb61c16738.png

  • 按一下 [建立服務]
  • 在下一頁中,確認已選取「透過現有的容器映像檔部署單一修訂版本」
  • 按一下下方的「選取」
  • 接著會出現提示,其右側會顯示導覽列。
  • 請務必確認是否已選取「Artifact Registry」分頁
  • 請務必確認所選專案是否正確
  • 按一下箭頭,展開已部署容器映像檔連結的摺疊式面板
  • 選取容器標記並展開 (請一律選取已部署的最新標記,例如 v1、v2 等)
  • 按一下容器標記名稱下方的容器映像檔

aac35d55d7dd874e.png

  • 在「設定」區域中
  • 為 Cloud Run 應用程式提供服務名稱 (在 Cloud Run 上部署應用程式時,這會是網址的一部分)
  • 選取適當的區域 (在本例中為 us-central1 或您選擇的任何區域)
  • 在「驗證」下方
  • 確認已選取「Allow unauthenticated invocations」(允許未經驗證的叫用)
  • 在「CPU 分配和定價」下方
  • 選取「只在要求處理期間分配 CPU」
  • 將服務自動調整資源配置功能修改為 1 (為了在實際工作環境中運作,建議您將運作的執行個體數量下限設為 1,甚至保留 0,即 0 等)
  • 將「Ingress Control」設為「All」,允許來自網際網路的流量存取應用程式
  • 按一下「建立」
  • 這會部署 Cloud Run 執行個體,而佈建作業需要幾分鐘的時間

b8b147265b8d457b.png

  • 部署完成後,您就能看到可用於存取網頁應用程式的公開網址

1dfdb007c52581a1.png

8. 運作方式

  • 進入應用程式主畫面後,按一下「上傳文件」按鈕
  • 上傳 PDF 檔案
  • 上傳完成後
  • 按一下網頁頂端的搜尋列
  • 開始搜尋與上傳文件相關的查詢
  • 輸入查詢並點選「搜尋」後,系統應會顯示你剛上傳的文件中所有相關的答案
  • 您可以查看後端程式碼,並新增下列設定:
  • 新增文字片段
  • 新增擷取區隔
  • 新增答案
  • 調整前 K 個搜尋結果,協助 LLM 生成答案摘要,就像 Google 搜尋的 AI 總覽一樣
  • 作為外掛程式,你也可以在上傳文件時新增中繼資料標記。這有助於產生切面和可篩選的類別

9. 清理

如要避免系統向您的 Google Cloud 帳戶收取本程式碼研究室所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後點按「刪除」。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  4. 您也可以前往控制台的「Cloud Run」,選取您剛部署及刪除的服務。

10. 恭喜

恭喜!您已成功使用 Google 提供的最新模型,快速建構現成 RAG 系統,為您的搜尋查詢提供 Google 品質的結果。本程式碼研究室僅供示範,實際用途需要設定更多安全防護措施和安全邊界。完整存放區的連結在此。只要善用 Google Cloud,並完成 5 個步驟,我們就能在幾分鐘內產生端對端 RAG 系統,為您提供 Google 品質的即用型結果。隨著生成式 AI 和大型語言模型的演進,建構這類 RAG 系統也有助於避免出現幻覺和未引述的資訊。

雖然這只是起點,但我們可以透過完全可自訂的 DIY RAG API 發揮奇效,為您提供更透明、強大且有效率的工具,有效處理管道程序的每個部分。