在 Cloud Run 上使用 Gemini CLI,透過 AlloyDB 適用的 MCP 工具箱加快資料導向開發速度

1. 總覽

還記得我們如何使用 AlloyDB 打造動態混合式零售體驗,結合多面向篩選和向量搜尋嗎?該應用程式充分展現了現代零售業的需求,但要達到這個目標並反覆改進,需要投入大量開發工作。對全端開發人員來說,程式碼編輯器和資料庫工具之間不斷來回切換,往往會造成瓶頸,拖慢創新速度和瞭解資料的重要程序。

解決方案

這正是加速應用程式開發的強大之處,因此我非常樂意分享 MCP (現代雲端平台) 工具箱如何透過直覺式的 Gemini CLI 存取,成為我工具箱中不可或缺的一部分。想像一下,您可以在整合式開發環境 (IDE) 中,直接與 AlloyDB 執行個體互動、編寫查詢,以及瞭解資料集。這不僅是為了方便,更是為了從根本上減少開發生命週期中的阻礙,讓您專注於建構創新功能,不必費心處理外部工具。

在零售電子商務應用程式的背景下,我們需要有效查詢產品資料、處理複雜的篩選條件,並運用向量搜尋的細微差異,因此快速疊代資料庫互動的能力至關重要。MCP Toolbox 採用 Gemini CLI,不僅簡化這項程序,還能加快速度,徹底改變我們探索、測試及調整應用程式基礎資料庫邏輯的方式。讓我們深入瞭解這項顛覆性的組合,如何讓全端開發變得更快、更聰明,也更有趣。

學習內容與建構項目

零售搜尋應用程式:在 IDE 中使用 MCP 工具箱,並透過 Gemini CLI 運作。說明涵蓋以下項目:

  1. 如何將 MCP 工具箱直接整合至 IDE,順暢地與 AlloyDB 互動。
  2. 實用範例:使用 Gemini CLI 針對零售資料編寫及執行 SQL 查詢。
  3. 運用 Gemini CLI 與零售電子商務資料集互動,撰寫通常需要使用其他工具的查詢,並立即查看結果。
  4. 透過 IDE 內熟悉的指令列介面,以全新方式探查及瞭解資料,包括檢查資料表結構和快速執行資料健全性檢查。
  5. 這個加速資料庫工作流程如何直接加快全端開發週期,進而實現快速原型設計和疊代。

Techstack

我們使用:

  • AlloyDB for PostgreSQL
  • MCP Toolbox,可從應用程式中抽象化資料庫的進階生成式和 AI 功能
  • Cloud Run,用於無伺服器部署作業。
  • 使用 Gemini CLI 瞭解及分析資料集,並建構零售電子商務應用程式的資料庫部分。

需求條件

  • ChromeFirefox 瀏覽器
  • 啟用計費功能的 Google Cloud 專案。

2. 事前準備

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能

Google Cloud 抵免額:如要取得 Google Cloud 抵免額,協助您開始使用,請按一下這個連結 兌換抵免額。請按照 這篇文章 的指示兌換。

  1. 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境。按一下 Google Cloud 控制台上方的「啟用 Cloud Shell」。

「啟用 Cloud Shell」按鈕圖片

  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:按照這個連結啟用 API。

或者,您也可以使用 gcloud 指令執行這項操作。如要瞭解 gcloud 指令和用法,請參閱說明文件

3. 資料庫設定

在本實驗室中,我們將使用 AlloyDB 做為電子商務資料的資料庫。並使用「叢集」保存所有資源,例如資料庫和記錄檔。每個叢集都有一個「主要執行個體」,可做為資料的存取點。資料表會保存實際資料。

我們來建立 AlloyDB 叢集、執行個體和資料表,以便載入電子商務資料集。

建立叢集和執行個體

  1. 在 Cloud 控制台中前往 AlloyDB 頁面。如要在 Cloud 控制台中尋找大部分頁面,最簡單的方法是使用控制台的搜尋列搜尋。
  2. 從該頁面選取「建立叢集」

f76ff480c8c889aa.png

  1. 畫面上會顯示類似下方的內容。使用下列值建立叢集和執行個體 (如果您要從存放區複製應用程式碼,請確保值相符):
  • 叢集 ID:「vector-cluster
  • password: "alloydb"
  • PostgreSQL 15 / 最新建議版本
  • Region:「us-central1
  • 網路:「default

538dba58908162fb.png

  1. 選取預設網路後,你會看到如下畫面。

選取「設定連線」

7939bbb6802a91bf.png

  1. 然後選取「使用系統自動分配的 IP 範圍」,並按一下「繼續」。確認資訊後,選取「建立連結」。768ff5210e79676f.png
  2. 設定網路後,即可繼續建立叢集。按一下「建立叢集」,完成叢集設定,如下所示:

e06623e55195e16e.png

重要注意事項:

  1. 請務必變更執行個體 ID (您可以在設定叢集 / 執行個體時找到),改為**vector-instance**。如果無法變更,請記得在所有後續參照中 **使用執行個體 ID**。
  2. 請注意,叢集建立作業約需 10 分鐘。成功後,畫面上會顯示您剛建立的叢集總覽。

4. 資料擷取

現在請新增包含商店資料的表格。前往 AlloyDB,選取主要叢集,然後選取 AlloyDB Studio:

847e35f1bf8a8bd8.png

您可能需要等待執行個體建立完成。完成後,請使用建立叢集時建立的憑證登入 AlloyDB。使用下列資料向 PostgreSQL 進行驗證:

  • 使用者名稱:「postgres
  • 資料庫:「postgres
  • 密碼:「alloydb

成功驗證 AlloyDB Studio 後,即可在編輯器中輸入 SQL 指令。如要新增多個編輯器視窗,請按一下最後一個視窗右側的加號。

91a86d9469d499c4.png

您會在編輯器視窗中輸入 AlloyDB 指令,並視需要使用「執行」、「格式化」和「清除」選項。

啟用擴充功能

我們會使用 pgvectorgoogle_ml_integration 擴充功能建構這個應用程式。pgvector 擴充功能可讓您儲存及搜尋向量嵌入。google_ml_integration 擴充功能提供多種函式,可存取 Vertex AI 預測端點,在 SQL 中取得預測結果。執行下列 DDL,啟用這些擴充功能:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

如要查看資料庫中已啟用的擴充功能,請執行下列 SQL 指令:

select extname, extversion from pg_extension;

建立資料表

您可以在 AlloyDB Studio 中使用下列 DDL 陳述式建立資料表:

CREATE TABLE apparels ( 
  id BIGINT, 
  category VARCHAR(100), 
  sub_category VARCHAR(50), 
  uri VARCHAR(200), 
  gsutil_uri VARCHAR(200),
  image VARCHAR(100), 
  content VARCHAR(2000), 
  pdt_desc VARCHAR(5000), 
  color VARCHAR(2000),
  gender VARCHAR(200),
  embedding vector(768),
  img_embeddings vector(1408),
  additional_specification VARCHAR(100000));

嵌入資料欄可儲存文字的向量值。

授予權限

執行下列陳述式,授予「embedding」函式的執行權:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

為 AlloyDB 服務帳戶授予 Vertex AI 使用者角色

Google Cloud IAM 控制台中,授予 AlloyDB 服務帳戶 (格式如下:service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com)「Vertex AI 使用者」角色存取權。PROJECT_NUMBER 會顯示您的專案編號。

或者,您也可以從 Cloud Shell 終端機執行下列指令:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

將資料載入資料庫

  1. 從試算表中的 insert scripts sql 複製 insert 查詢陳述式,然後貼到上述編輯器。您可以複製 10 到 50 個插入陳述式,快速展示這個用途。「Selected Inserts 25-30 rows」(選取的插入內容 25-30 列) 分頁中會列出選取的插入內容。
  2. 按一下「執行」。查詢結果會顯示在「結果」表格中。

重要注意事項:

請務必只複製 25 到 50 筆記錄來插入,並確認記錄來自類別、子類別、顏色和性別類型範圍。

5. 為資料建立嵌入

現代搜尋的真正創新之處在於理解意義,而不只是關鍵字。這時嵌入和向量搜尋技術就能派上用場。

我們使用預先訓練的語言模型,將產品說明和使用者查詢轉換為高維度數值表示法,也就是「嵌入」。這些嵌入會擷取語意,讓我們尋找「語意相似」的產品,而不只是包含相符的字詞。一開始,我們對這些嵌入項目進行直接向量相似度搜尋實驗,建立基準,展現語意理解的強大功能,即使在進行成效最佳化之前也是如此。

嵌入資料欄可儲存產品說明文字的向量值。img_embeddings 欄可儲存圖片嵌入 (多模態)。這樣一來,您也可以使用以文字與圖片距離為依據的搜尋功能。但我們只會在本次實驗室中使用文字嵌入。

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

這應該會傳回嵌入向量 (看起來像是浮點數陣列),用於查詢中的範例文字。如下所示:

25a1d7ef0e49e91e.png

更新 abstract_embeddings 向量欄位

執行下列 DML,使用對應的嵌入更新資料表中的內容說明:

UPDATE apparels SET embedding = embedding('text-embedding-005',pdt_desc)::vector 
WHERE pdt_desc IS NOT NULL;

如果您使用 Google Cloud 的試用額度帳單帳戶,可能無法產生超過幾個 (最多 20 到 25 個) 嵌入內容。因此請限制插入指令碼中的資料列數。

如要生成圖片嵌入項目 (用於執行多模態情境搜尋),請一併執行下列更新:

update apparels set img_embeddings = ai.image_embedding(
  model_id => 'multimodalembedding@001',
  image => gsutil_uri,
  mimetype => 'image/jpg')       
where gsutil_uri is not null

6. MCP Toolbox for Databases (AlloyDB)

在幕後,強大的工具和結構良好的應用程式可確保運作順暢。

MCP (模型上下文協定) 資料庫 Toolbox 可簡化生成式 AI 和 Agentic 工具與 AlloyDB 的整合程序。這項工具可做為開放原始碼伺服器,簡化連線集區、驗證程序,並安全地向 AI 代理程式或其他應用程式公開資料庫功能。

在應用程式中,我們使用 MCP Toolbox for Databases 做為所有智慧型混合搜尋查詢的抽象層。

請按照下列步驟,為我們的用途設定及部署 Toolbox:

您可以看到 MCP Toolbox for Databases 支援的資料庫之一是 AlloyDB,而我們已在上一節中佈建該資料庫,因此請繼續設定 Toolbox。

  1. 前往 Cloud Shell 終端機,確認專案已選取並顯示在終端機提示中。在 Cloud Shell 終端機中執行下列指令,即可前往專案目錄:
mkdir gemini-cli-project

cd gemini-cli-project
  1. 執行下列指令,在新的資料夾中下載及安裝工具箱:
# see releases page for other versions
export VERSION=0.7.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

這應該會在目前目錄中建立工具箱。複製工具箱的路徑。

  1. 前往 Cloud Shell 編輯器 (程式碼編輯模式),在專案根資料夾「gemini-cli-project」中新增名為「tools.yaml」的檔案。
sources:
    alloydb:
        kind: "alloydb-postgres"
        project: "<<YOUR_PROJECT_ID>>"
        region: "us-central1"
        cluster: "vector-cluster"
        instance: "vector-instance"
        database: "postgres"
        user: "postgres"
        password: "alloydb"


tools:
   get-apparels:
    kind: postgres-sql
    source: alloydb
    description: Get all apparel data.
    statement: |
      select id, content, uri, category, sub_category,color,gender from apparels;

讓我們瞭解 tools.yaml:

來源代表工具可互動的不同資料來源。來源代表工具可互動的資料來源。您可以在 tools.yaml 檔案的來源區段中,將來源定義為對應。一般來說,來源設定會包含連線及與資料庫互動所需的任何資訊。

工具會定義代理程式可執行的動作,例如讀取及寫入來源。工具代表代理程式可執行的動作,例如執行 SQL 陳述式。您可以在 tools.yaml 檔案的 tools 區段中,將工具定義為對應。一般來說,工具需要來源才能執行動作。

如要進一步瞭解如何設定 tools.yaml,請參閱這份說明文件

如上方的 Tools.yaml 檔案所示,「get-apparels」工具會列出資料庫中所有服飾的詳細資料。

7. 設定 Gemini CLI

在 Cloud Shell 編輯器中,於 gemini-cli-project 資料夾內建立名為 .gemini 的新資料夾,並在其中建立名為 settings.json 的新檔案。

{
  "mcpServers": {
"AlloyDBServer": {
  "command": "/home/user/gemini-cli-project/toolbox",
  "args": ["--tools-file", "tools.yaml", "--stdio"]
}
  }
}

在上述程式碼片段的指令部分中,將「/home/user/gemini-cli-project/toolbox」替換為工具箱的路徑。

安裝 Gemini CLI

最後,請在 Cloud Shell 終端機中,於相同目錄 gemini-cli-project 執行下列指令,安裝 Gemini CLI:

sudo npm install -g @google/gemini-cli

設定專案 ID

確認您已在環境中設定有效專案 ID:

export GOOGLE_CLOUD_PROJECT=<<YOUR_PROJECT_ID>>

開始使用 Gemini CLI

在指令列中輸入下列指令:

gemini

您應該會看到類似下方的回應:

94f16dd7b5e2ca77.png

完成驗證並繼續下一個步驟。

8. 開始與 Gemini CLI 互動

使用 /mcp 指令列出已設定的 MCP 伺服器。

83e1c54ec68add5c.png

您應該會看到我們設定的 2 個 MCP 伺服器:GitHub 和 MCP Toolbox for Databases,以及列出的工具。

84b59c3027d370e2.png

就我的情況而言,我還有更多工具。因此請暫時忽略。您應該會在 AlloyDB MCP 伺服器中看到 get-apparels 工具。

透過 MCP Toolbox 開始查詢資料庫

現在請嘗試提出自然語言問題,擷取我們使用的資料集的回應和查詢:

> How many types of genders the apparel dataset has?

ae24caa625ef871b.png

> Give me the SQL that I can use to find the number of apparels that are footwear 

b75da65679031c7.png

> What are the unique sub categories that are there?
that I can use to find the number of apparels that are footwear 

c04fd9e113a4ed95.png

假設我根據洞察資料和許多類似查詢,想出詳細的查詢內容並想測試一下。假設資料庫工程師已為您建構 Tools.yaml,如下所示:

sources:
    alloydb:
        kind: "alloydb-postgres"
        project: "<<YOUR_PROJECT_ID>>"
        region: "us-central1"
        cluster: "vector-cluster"
        instance: "vector-instance"
        database: "postgres"
        user: "postgres"
        password: "alloydb"

tools:
   get-apparels:
    kind: postgres-sql
    source: alloydb
    description: Get all apparel data.
    statement: |
      select id, content, uri, category, sub_category,color,gender from apparels;

   filtered-vector-search:
    kind: postgres-sql
    source: alloydb
    description: Get the list of facet filter values from the retail dataset.
    parameters:
      - name: categories
        type: array
        description: List of categories preferred by the user.
        items:
          name: category 
          type: string
          description: Category value. 
      - name: subCategories
        type: array
        description: List of sub-categories preferred by the user.
        items:
          name: subCategory 
          type: string
          description: Sub-Category value.
      - name: colors
        type: array
        description: List of colors preferred by the user.
        items:
          name: color 
          type: string
          description: Color value.
      - name: genders
        type: array
        description: List of genders preferred by the user for apparel fitting.
        items:
          name: gender 
          type: string
          description: Gender name.
      - name: searchtext
        type: string
        description: Description of the product that the user wants to find database matches for.    
    statement: |
      SELECT id, content, uri, category, sub_category,color,gender FROM apparels 
      where category = ANY($1) and sub_Category = ANY($2) and color = ANY($3) and gender = ANY($4)
      order by embedding <=> embedding('text-embedding-005',$5)::vector limit 10

現在來試試自然語言搜尋:

> How many yellow shirts are there for boys?

5c3890cf69e3dacb.png

4ec79f49b2eaebbd.png

很酷吧?現在我可以在加速的時間表內,繼續在應用程式中提供新功能,同時修正 YAML 檔案,進一步提升查詢功能。

9. 加速應用程式開發

透過 Gemini CLI 和 MCP Toolbox,直接在 IDE 中使用資料庫功能,不僅是理論上的優勢,這可轉換為實際的加速工作流程,特別是對於混合式零售體驗等複雜應用程式。以下列舉幾個情境:

1. 快速疊代產品篩選邏輯

假設我們剛推出「夏季運動服」的新促銷活動,我們想測試多面向篩選器 (例如依品牌、尺寸、顏色、價格範圍) 與這個新類別的互動方式。

不整合 IDE:

我可能會切換到另一個 SQL 用戶端,撰寫查詢、執行查詢、分析結果、返回 IDE 調整應用程式程式碼、切換回用戶端,然後重複上述步驟。這種情境切換會造成重大阻礙。

使用 Gemini CLI 和 MCP:

我可以在 IDE 中繼續作業,還能:

  • 查詢:我可以在 yaml 中快速更新查詢 (假設的資料集)「SELECT DISTINCT brand FROM products WHERE category = ‘activewear' AND season = ‘summer'」,並直接在終端機中試用。
  • 資料探索:立即查看傳回的品牌。如果需要查看特定品牌和尺寸的產品供應情形,可以執行另一個快速查詢:「SELECT COUNT(*) FROM products WHERE brand = ‘SummitGear' AND size = ‘M' AND category = ‘activewear' AND season = ‘summer'」。
  • 整合程式碼:根據這些快速的 IDE 內資料洞察,我隨即調整前端篩選邏輯或後端 API 呼叫,大幅縮短意見回饋循環。

2. 微調 Vector Search,提供產品建議

我們的混合搜尋功能會根據向量嵌入,提供相關的產品建議。假設「男士慢跑鞋」建議的點閱率下滑。

不整合 IDE:

我會在資料庫工具中執行自訂指令碼或查詢,分析建議鞋款的相似度分數,並與使用者互動資料進行比較,嘗試找出任何關聯模式。

使用 Gemini CLI 和 MCP:

  • 分析嵌入:我可以直接查詢產品嵌入及其相關中繼資料:「SELECT product_id, name, vector_embedding FROM products WHERE category = ‘running shoes' AND gender = ‘male' LIMIT 10」
  • 交叉參照:我也可以直接快速檢查所選產品與建議之間的實際向量相似度。舉例來說,如果系統向看過產品 B 的使用者推薦產品 A,我可以執行查詢來擷取並比較這兩項產品的向量嵌入。
  • 偵錯:這有助於加快偵錯和假設測試的速度。嵌入模型是否如預期運作?資料中是否有異常情形,導致推薦內容品質受到影響?不必離開程式設計環境,就能獲得初步解答。

3. 瞭解新功能的結構定義和資料分布

假設我們打算新增「顧客評論」功能,撰寫後端 API 之前,我們需要瞭解現有的顧客資料,以及評論的結構。

不整合 IDE:

我需要連線至資料庫用戶端,在 customers 和 orders 等資料表上執行 DESCRIBE 指令,然後查詢範例資料,瞭解關係和資料類型。

使用 Gemini CLI 和 MCP:

  • 結構定義探索:我只要查詢 YAML 檔案中的表格,然後直接在終端機中執行即可。
  • 資料取樣:接著,我可以提取樣本資料,瞭解顧客人口統計資料和購買記錄:「SELECT customer_id, name, signup_date, total_orders FROM customers ORDER BY signup_date DESC LIMIT 5」
  • 規劃:快速存取結構定義和資料分配情形,有助於我們做出明智決策,決定如何設計新的評論資料表、要建立哪些外部鍵,以及如何有效將評論連結至顧客和產品,完全不必為新功能編寫任何應用程式程式碼。

以上僅列舉幾個例子,但都突顯了核心優勢:減少摩擦並提升開發人員速度。Gemini CLI 和 MCP Toolbox 可直接在 IDE 中與 AlloyDB 互動,協助我們更快建構更優質、回應速度更快的應用程式。

10. 清除

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

  1. 前往 Google Cloud 控制台的資源管理員頁面。
  2. 在專案清單中選取要刪除的專案,然後點按「刪除」。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  4. 或者,您也可以點選「DELETE CLUSTER」按鈕,刪除我們剛為這個專案建立的 AlloyDB 叢集 (如果您在設定叢集時未選擇 us-central1,請變更這個超連結中的位置)。

11. 恭喜

恭喜!您已成功將 MCP Toolbox 直接整合至 IDE,順暢地與 AlloyDB 互動,並運用 Gemini CLI 與零售電子商務資料集互動,撰寫通常需要使用其他工具的查詢。您已學會探查及瞭解資料的新方法,包括檢查資料表結構和執行快速資料健全性檢查,而且全都在 IDE 內熟悉的指令列介面中完成。

請繼續複製 repo,並分析您是否使用 Gemini CLI 和 MCP Toolbox for Databases 強化應用程式。

如要進一步瞭解如何使用 Gemini CLI 和 MCP 建構這類資料驅動應用程式,並部署至無伺服器執行階段,請報名參加即將推出的 Code Vipassana 課程,透過講師帶領的實作課程和更多程式碼研究室,深入瞭解相關知識!