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

1. 事前準備

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

必要條件

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

課程內容

  • 如何打造 Google 優質的搜尋引擎,以便根據您上傳的資料回答問題
  • 如何建立 Vertex AI Datastore
  • 如何建立 Vertex AI 代理程式
  • 如何使用 CloudRun 部署應用程式

軟硬體需求

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

簡介

Google 搜尋是一款強大的工具,能夠運用龐大的網頁索引和其他內容,針對使用者的查詢提供相關結果。實際應用的技術則是「檢索增強生成」(RAG),這是現代 AI 的重要技術。

RAG 會先從文件語料庫擷取相關段落,這項工具會使用各種方法完成,例如關鍵字比對、語意相似度和機器學習。擷取到相關段落後,即可根據這些段落產生使用者查詢的摘要或答案。

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

RAG 可以確保生成的文字一律根據文件語料庫的證據,避免產生幻覺。這使得資訊來源更加可靠且可靠。

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

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

  • 許多搜尋系統會使用 RAG 產生與使用者查詢相關的搜尋結果。
  • 聊天機器人會利用 RAG 生成內容豐富、更具吸引力的使用者問題回覆。
  • 問答系統採用 RAG 技術針對使用者問題產生正確詳盡的答案。

RAG 是一種多功能技術,可用來在各種網域和應用程式中產生文字。這項強大工具可讓 AI 變得更聰明實用。

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

建構項目

完成本程式碼研究室之後,您就能部署可正常運作的 RAG 系統,透過事實資訊、以正確的參考資料為基準,來回答問題。

您也能更加瞭解如何運用 Vertex AI Search API,在 Google Cloud 中建構這個 RAG 架構。另外,您也會瞭解如何在 CloudRun 上部署這個 RAG 架構應用程式 (含前端和後端),這種無伺服器平台會在 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」頁面中,點選左側導覽列中顯示的「Data Stores」

f86f67d344d398fb.png

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

e64e771f33543f46.png

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

3a8d22888e7eedc2.png

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

13876b5d12dbe1fb.png

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

618b7a456fbffad4.png

布朗尼:

  • 文件處理選項位於「建立」按鈕上方。
  • 你可以運用數位、OCR 或版面配置剖析器等不同的剖析器進行實驗
  • 您也可以啟用進階分塊功能,以及提供自己的自訂區塊大小限制

38471c1d3411610d.png

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

  • 建立資料儲存庫後,請在左側導覽列中按一下應用程式,然後選擇「應用程式」
  • 按一下 [Create App] (建立應用程式) 按鈕
  • 選取要設為「搜尋」的應用程式類型 (也可以建立代理程式、對話式機器人、建議等)

ae5294e33f63567c.png

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

f8a41c9751f7a8d3.png

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

bc77006e0025ae9e.png

6. 步驟 4:使用 Dockerize 應用程式

  • 在 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 實作,有助於建立靜息的端點,以供您的前端進行互動。
  • 前端 - 這會保留回應型應用程式,並提供 UI。這也會包含透過靜態端點向後端提出必要的應用程式層級呼叫
  • Dockerfile - 這個檔案會包含建立 Docker 容器的所有相關指令
  • 在存放區目錄的根目錄中執行下列指令,有助於建構 Docker 映像檔 (注意:在使用 M1、M2 等 Apple Silicon 晶片的 Macbooks 中建構 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

  • 按一下 [建立服務]
  • 在下一頁中,確認已選取「Deploy one from an existing container image」(從現有的容器映像檔部署修訂版本)
  • 點按下方的「選取」
  • 接著會出現提示,其右側會顯示導覽列。
  • 請務必檢查已選取 Artifact Registry 的分頁
  • 務必檢查是否已正確選取專案
  • 按一下箭頭,展開已部署容器映像檔連結的畫面。
  • 選取容器代碼並展開 (請一律選取部署的最新代碼,例如 v1、v2 等最新代碼)。
  • 點選容器標記名稱下方顯示的容器映像檔

aac35d55d7dd874e.png

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

b8b147265b8d457b.png

  • 部署完成後,您將會看到一個公開可用網址,您可以從中存取自己的網頁應用程式

1dfdb007c52581a1.png

8. 運作方式

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

9. 清除所用資源

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

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

10. 恭喜

恭喜!您已成功使用由 Google 技術支援的藝術模型建立立即可用的 RAG 系統,並針對您的搜尋查詢提供 Google 品質結果。本程式碼研究室僅供示範之用,您必須為實際工作環境用途設定更多安全防護和防護機制。這裡提供完整存放區的連結。使用 Google Cloud 搭配 5 個步驟,我們就能產生端對端 RAG 系統,可在幾分鐘內立即提供 Google 品質成果。隨著生成式 AI 和大型語言模型的發展,建構這類 RAG 系統也能幫助我們避免產生幻覺及未註明引用資訊的陷阱。

雖然這只是第一步,但我們可以發現許多可完全自訂的 DIY RAG API,以更透明、更強大、有效率的方式,有效處理管道程序的各個環節。