使用 AlloyDB 和 Vertex AI Agent Builder 打造智慧購物助理 - 第 1 部分

1. 總覽

在現今快速變化的零售環境中,提供卓越的客戶服務並打造個人化購物體驗至關重要。我們將帶您踏上技術之旅,瞭解如何建立知識驅動的聊天應用程式,回答顧客問題、引導產品探索,以及提供量身打造的搜尋結果。這項創新解決方案結合了 AlloyDB 的資料儲存功能、用於瞭解情境的內部分析引擎、用於驗證相關性的 Gemini (大型語言模型),以及用於快速啟動智慧對話式助理的 Google 代理程式建構工具。

挑戰:現代零售業顧客期望獲得即時回覆,以及符合個人偏好的產品推薦。傳統的搜尋方法往往無法提供這種程度的個人化服務。

解決方案:Google 的知識導向即時通訊應用程式可直接解決這項挑戰。這項功能會運用從零售資料衍生的豐富知識庫,瞭解顧客意圖、智慧回覆,並提供極為相關的結果。

建構項目

在本實驗室 (第 1 部分) 中,您將:

  1. 建立 AlloyDB 執行個體並載入電子商務資料集
  2. 在 AlloyDB 中啟用 pgvector 和生成式 AI 模型擴充功能
  3. 根據產品說明生成嵌入
  4. 針對使用者搜尋文字執行即時餘弦相似度搜尋
  5. 在無伺服器 Cloud Run 函式中部署解決方案

實驗室的第二部分將介紹 Agent Builder 的步驟。

需求條件

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

2. 架構

資料流程:讓我們進一步瞭解資料在系統中的流動方式:

擷取

第一步是將零售資料 (庫存、產品說明、顧客互動) 擷取至 AlloyDB。

Analytics Engine:

我們將使用 AlloyDB 做為分析引擎,執行下列作業:

  1. 擷取背景資訊:引擎會分析 AlloyDB 中儲存的資料,瞭解產品、類別、消費者行為等之間的關係 (如適用)。
  2. 建立嵌入:系統會為使用者查詢和 AlloyDB 中儲存的資訊產生嵌入 (文字的數學表示)。
  3. 向量搜尋:引擎會執行相似度搜尋,比較查詢嵌入項目與產品說明、評論和其他相關資料的嵌入項目。這會找出 25 個最相關的「最鄰近項目」。

Gemini 驗證:

這些可能的回覆會傳送給 Gemini 評估。Gemini 會判斷這些資訊是否確實相關,以及是否適合分享給使用者。

生成回覆:

經過驗證的回應會建構為 JSON 陣列,整個引擎則會封裝到無伺服器 Cloud Run 函式中,並從 Agent Builder 叫用。

對話式互動:

Agent Builder 會以自然語言格式向使用者呈現回覆,方便進行來回對話。我們會在後續實驗室中說明這部分內容。

3. 事前準備

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能
  3. 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境,預先載入了 bq。點選 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。
gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

除了使用 gcloud 指令,您也可以透過控制台搜尋各項產品,或使用這個連結

如果遺漏任何 API,您隨時可以在導入過程中啟用。

如要瞭解 gcloud 指令和用法,請參閱說明文件

4. 資料庫設定

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

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

建立叢集和執行個體

  1. 在 Cloud 控制台中前往 AlloyDB 頁面。如要在 Cloud 控制台尋找大部分的頁面,只要使用控制台的搜尋列搜尋即可。
  2. 在該頁面中選取「建立叢集」:

f76ff480c8c889aa.png

  1. 畫面上會顯示類似下方的內容。使用下列值建立叢集和執行個體
  • 叢集 ID:「shopping-cluster
  • 密碼:「alloydb
  • 與 PostgreSQL 15 相容
  • 區域:「us-central1
  • 網路:「default

538dba58908162fb.png

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

e06623e55195e16e.png

請務必將執行個體 ID 變更為「shopping-instance"」。

請注意,建立叢集約需 10 分鐘。成功後,畫面應會顯示類似下方的訊息:

24eec29fa5cfdb3e.png

5. 資料擷取

現在要新增包含商店資料的表格。前往 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;

建立資料表

使用下列 DDL 陳述式建立資料表:

CREATE TABLE
 apparels ( id BIGINT,
   category VARCHAR(100),
   sub_category VARCHAR(50),
   uri VARCHAR(200),
   image VARCHAR(100),
   content VARCHAR(2000),
   pdt_desc VARCHAR(5000),
   embedding vector(768) );

成功執行上述指令後,您應該就能在資料庫中查看資料表。螢幕截圖範例如下:

908e33bbff58a6d.png

擷取資料

在本實驗室中,我們在 SQL 檔案中提供約 200 筆記錄的測試資料。其中包含 id, category, sub_category, uri, imagecontent。其他欄位會在實驗室的後續部分填寫。

從該處複製 20 行/插入陳述式,然後將這些行貼到空白的編輯器分頁中,並選取「執行」。

如要查看資料表內容,請展開「Explorer」專區,直到看到名為 apparels 的資料表為止。選取三點圖示 (⋮),即可查看查詢資料表的選項。系統會在新編輯器分頁中開啟 SELECT 陳述式。

b31ece70e670ab89.png

授予權限

執行下列陳述式,將 embedding 函式的執行權授予使用者 postgres

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

前往 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"

6. Context

返回 AlloyDB 執行個體頁面。

如要建立嵌入內容,我們需要 context,也就是要納入單一欄位的所有資訊。我們會建立產品說明 (以下稱為 pdt_desc) 來完成這項作業。在本範例中,我們會使用每項產品的所有資訊,但您使用自己的資料時,可以隨意設計資料,只要對您的業務有意義即可。

從新建立執行個體的 AlloyDB Studio 執行下列陳述式。這會使用情境資料更新 pdt_desc 欄位:

UPDATE
 apparels
SET
 pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
 id IS NOT NULL;

這項 DML 會使用資料表中的所有可用欄位和其他依附元件 (如果您的用途有這些依附元件) 的資訊,建立簡單的內容摘要。如要更精確地分類資訊和建立情境,請隨意設計資料,找出對貴商家有意義的資料。

7. 為情境建立嵌入

電腦處理數字比處理文字容易得多。嵌入系統會將文字轉換為一系列浮點數,這些數字應代表文字,無論文字的措辭、使用的語言等為何。

例如描述海邊的地點。例如「水上」、「海濱」、「從房間走到海邊」、「sur la mer」、「на берегу океана」等。這些字詞看起來不同,但語意或機器學習術語 (即嵌入) 應該非常接近。

資料和內容都準備就緒後,我們將執行 SQL,將產品說明的嵌入內容新增至 embedding 欄位中的資料表。您可以使用多種嵌入模型。我們使用 Vertex AI 的 text-embedding-004。請務必在整個專案中使用相同的嵌入模型!

注意:如果您使用先前建立的 Google Cloud 專案,可能需要繼續使用舊版文字嵌入模型,例如 textembedding-gecko。

UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-004',
   pdt_desc)
WHERE
 TRUE;

再次查看 apparels 表格,即可看到一些嵌入內容。請務必重新執行 SELECT 陳述式,查看變更。

SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 apparels;

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

c69c08d085389f74.png

注意:在免費方案下建立的 Google Cloud 專案,可能會遇到配額問題,也就是每秒允許的嵌入要求數量。建議您使用 ID 的篩選查詢,然後在產生嵌入內容時,選擇性地選取 1 到 5 筆記錄等。

8. 執行向量搜尋

資料表、資料和嵌入都已準備就緒,現在就來對使用者搜尋文字執行即時向量搜尋。

假設使用者提出以下問題:

「I want womens tops, pink casual only pure cotton.」(我想要女裝上衣,粉紅色休閒款,材質為純棉。)

您可以執行下列查詢來找出相符項目:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
  'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;

讓我們詳細瞭解這項查詢:

在這項查詢中,

  1. 使用者的搜尋文字為:「I want womens tops, pink casual only pure cotton.」(我想要女裝上衣,僅限粉紅色休閒純棉上衣)。
  2. 我們要在 embedding() 方法中使用模型 text-embedding-004,將其轉換為嵌入。上一個步驟中,我們已將嵌入函式套用至表格中的所有項目,因此這個步驟應該很熟悉。
  3. <=>」代表使用「餘弦相似度」距離方法。如要查看所有可用的相似度測量方式,請參閱 pgvector 說明文件
  4. 我們會將嵌入方法的結果轉換為向量型別,使其與資料庫中儲存的向量相容。
  5. LIMIT 5 代表我們要為搜尋文字擷取 5 個最鄰近的項目。

結果如下所示:

4193a68737400535.png

如您在結果中看到的,相符項目與搜尋文字相當接近。請嘗試變更顏色,看看結果會如何變化。

重要注意事項:

假設我們現在想使用 ScaNN 索引,提高這項向量搜尋結果的效能 (查詢時間)、效率和召回率。請參閱這篇網誌中的步驟,比較有索引和沒有索引的結果差異。為方便您操作,以下列出建立索引的步驟:

  1. 由於我們已建立叢集、例項、內容和嵌入,因此只需使用下列陳述式安裝 ScaNN 擴充功能:

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

  1. 接下來,我們要建立索引 (ScaNN):

CREATE INDEX apparel_index ON apparels

USING scann (embedding cosine)

WITH (num_leaves=54);

在上述 DDL 中,apparel_index 是索引的名稱

「apparels」是我的表格

「scann」是索引方法

「embedding」是我要建立索引的表格欄

「cosine」是我要用於索引的距離方法

「54」是要套用至這個索引的分區數量。請設為 1 到 1048576 之間的任何值。如要進一步瞭解如何決定這個值,請參閱「調整 ScaNN 索引」。

我使用資料點數的平方根,如 ScaNN repo 中建議 (分割時,num_leaves 應約為資料點數的平方根)。

  1. 使用下列查詢檢查索引是否已建立:

SELECT * FROM pg_stat_ann_indexes;

  1. 使用與不含索引時相同的查詢,執行向量搜尋:

select * from apparels

ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))

LIMIT 20

上述查詢與實驗室步驟 8 中使用的查詢相同。不過,現在我們已為該欄位建立索引。

  1. 使用簡單的搜尋查詢測試索引 (方法是捨棄索引):

white tops for girls without any print

在 INDEXED 嵌入項目資料中,使用上述搜尋文字查詢 Vector Search,可獲得優質的搜尋結果並提升效率。使用索引後,效率大幅提升 (執行時間:不使用 ScaNN 時為 10.37 毫秒,使用 ScaNN 時為 0.87 毫秒)。如要進一步瞭解這個主題,請參閱這篇網誌

9. 使用 LLM 進行比對驗證

在繼續操作並建立服務,以便向應用程式傳回最佳相符項目之前,請先使用生成式 AI 模型驗證這些潛在回覆是否確實相關,且可安全地與使用者分享。

確認執行個體已設定為 Gemini

請先檢查叢集和執行個體是否已啟用 Google ML 整合。在 AlloyDB Studio 中,輸入下列指令:

show google_ml_integration.enable_model_support;

如果值顯示為「on」,您可以略過接下來的 2 個步驟,直接設定 AlloyDB 和 Vertex AI 模型整合。

  1. 前往 AlloyDB 叢集的主要執行個體,然後按一下「編輯主要執行個體」

456ffdf292d3c0e0.png

  1. 前往「進階設定選項」中的「Flags」部分。並確認 google_ml_integration.enable_model_support flag 已設為「on」,如下所示:

6a59351fcd2a9d35.png

如果未設為「on」,請設為「on」,然後按一下「UPDATE INSTANCE」按鈕。這個步驟需要幾分鐘才能完成。

整合 AlloyDB 和 Vertex AI 模型

現在您可以連線至 AlloyDB Studio,並執行下列 DML 陳述式,從 AlloyDB 設定 Gemini 模型存取權 (請使用標示位置的專案 ID)。執行指令前,系統可能會警告您有語法錯誤,但指令應該可以正常執行。

首先,我們建立 Gemini 1.5 模型連線,如下所示。請記得將下方指令中的 $PROJECT_ID 替換為您的 Google Cloud 專案 ID。

CALL
 google_ml.create_model( model_id => 'gemini-1.5',
   model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
   model_provider => 'google',
   model_auth_type => 'alloydb_service_agent_iam');

您可以在 AlloyDB Studio 中執行下列指令,檢查設定可存取的模型:

select model_id,model_type from google_ml.model_info_view;        

最後,我們需要授予資料庫使用者執行 ml_predict_row 函式的權限,透過 Google Vertex AI 模型執行預測。執行下列指令:

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

注意:如果您使用現有的 Google Cloud 專案和現有的 AlloyDB 叢集/執行個體,且這些資源是先前建立的,可能需要捨棄對 gemini-1.5 模型舊的參照,並使用上述 CALL 陳述式重新建立,然後再次對函式 ml_predict_row 執行授權,以免在後續呼叫 gemini-1.5 時發生問題。

評估回覆

雖然我們會在下一節中使用一個大型查詢,確保查詢的回應合理,但查詢可能難以理解。我們現在會先瞭解各個部分,並在幾分鐘後看看如何整合。

  1. 首先,我們會向資料庫傳送要求,取得與使用者查詢最接近的 5 個結果。為了簡化操作,我們將查詢硬式編碼,但請放心,稍後我們會將其插入查詢中。我們將納入 apparels 資料表中的產品說明,並新增兩個欄位,一個是說明與索引的組合,另一個則是原始要求。所有資料都會儲存在名為 xyz 的資料表中 (這只是暫時的資料表名稱)。
CREATE TABLE
 xyz AS
SELECT
 id || ' - ' || pdt_desc AS literature,
 pdt_desc AS content,
 'I want womens tops, pink casual only pure cotton.' AS  user_text
FROM
 apparels
ORDER BY
 embedding <=> embedding('text-embedding-004',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

這項查詢的輸出內容會是與使用者查詢最相似的 5 列。新資料表 xyz 會包含 5 個資料列,每個資料列都會有下列資料欄:

  • literature
  • content
  • user_text
  1. 為判斷回覆的有效性,我們會使用複雜的查詢,說明如何評估回覆。並在 xyz 資料表中,將 user_textcontent 用於查詢。
"Read this user search text: ', user_text, 
' Compare it against the product inventory data set: ', content, 
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
  1. 接著,我們將使用該查詢,檢查 xyz 資料表中的回應「品質」。
CREATE TABLE
  x AS
SELECT
  json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
      request_body => CONCAT('{
 "contents": [ 
        { "role": "user", 
          "parts": 
             [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match." 
             } ]
         } 
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
    xyz;
  1. predict_row 會以 JSON 格式傳回結果。程式碼「-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"」用於從該 JSON 擷取實際文字。如要查看實際傳回的 JSON,可以移除這段程式碼。
  2. 最後,如要取得 LLM 欄位,只要從 x 資料表擷取即可:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. 這可以合併為單一的下一個查詢,如下所示。

如果您已執行上述查詢來檢查中繼結果,請先從 AlloyDB 資料庫中刪除/移除 xyz 和 x 資料表,再執行這項查詢。

SELECT
 LLM_RESPONSE
FROM (
 SELECT
 json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
     request_body => CONCAT('{
     "contents": [
       { "role": "user",
         "parts":
            [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
            } ]
        }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
   FROM (
         SELECT
           id || ' - ' || pdt_desc AS literature,
           pdt_desc AS content,
         'I want womens tops, pink casual only pure cotton.' user_text
         FROM
           apparels
         ORDER BY
             embedding <=> embedding('text-embedding-004',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

雖然這可能還是有點複雜,但希望您能從中瞭解更多資訊。結果會顯示是否有相符的內容、相符的百分比,以及評分的說明。

請注意,Gemini 模型預設會啟用串流功能,因此實際回覆會分散在多行:14e74d71293b7b9.png

10. 將應用程式帶到網頁

準備好將這個應用程式帶到網路上嗎?請按照下列步驟,使用 Cloud Run 函式將這個知識引擎設為無伺服器:

  1. 前往 Google Cloud 控制台的 Cloud Run Functions,建立新的 Cloud Run Function,或使用連結:https://console.cloud.google.com/functions/add
  2. 選取「Cloud Run function」做為環境。提供函式名稱「retail-engine」,並選擇「us-central1」做為區域。將「驗證」設為「允許未經驗證的叫用」,然後按一下「下一步」。選擇「Java 17」做為執行階段,並選擇「Inline Editor」做為原始碼。
  3. 根據預設,進入點會設為「gcfv2.HelloHttpFunction」。請將 Cloud Run 函式 HelloHttpFunction.javapom.xml 中的預留位置程式碼,分別換成 Java 檔案XML 中的程式碼。
  4. 請記得在 Java 檔案中,將 $PROJECT_ID 預留位置和 AlloyDB 連線憑證換成您的值。AlloyDB 憑證是我們在本程式碼研究室一開始使用的憑證。如果使用不同的值,請在 Java 檔案中修改。
  5. 按一下「Deploy」(部署)

部署完成後,為了允許 Cloud 函式存取 AlloyDB 資料庫執行個體,我們將建立 VPC 連接器

重要步驟:

設定部署作業後,您應該就能在 Google Cloud Run Functions 控制台中看到函式。搜尋新建立的函式 (retail-engine),點選該函式,然後按一下「編輯」並變更下列項目:

  1. 前往「執行階段、建構作業、連線和安全性設定」
  2. 將逾時時間增加至 180 秒
  3. 前往「連線」分頁:

4e83ec8a339cda08.png

  1. 在 Ingress 設定下方,確認已選取「允許所有流量」。
  2. 在「輸出設定」下方,按一下「網路」下拉式選單,然後選取「新增虛擬私有雲連接器」選項,並按照彈出式對話方塊中顯示的操作說明進行操作:

8126ec78c343f199.png

  1. 提供 VPC 連接器的名稱,並確認區域與執行個體相同。將「網路」值保留為預設值,並將「子網路」設為「自訂 IP 範圍」,IP 範圍為 10.8.0.0 或類似的可用範圍。
  2. 展開「顯示縮放設定」,確認設定完全符合下列條件:

7baf980463a86a5c.png

  1. 按一下「建立」,這個連接器現在應該會列在輸出設定中。
  2. 選取新建立的連接器
  3. 選擇透過這個虛擬私有雲連接器轉送所有流量。
  4. 依序點選「NEXT」和「DEPLOY」

11. 測試應用程式

部署更新後的 Cloud 函式後,您應該會看到下列格式的端點:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine

您可以在 Cloud Shell 終端機中執行下列指令進行測試:

gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'

或者,您也可以按照下列步驟測試 Cloud Run 函式:

PROJECT_ID=$(gcloud config get-value project)

curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

結果如下:

88bc1ddfb5644a28.png

大功告成!在 AlloyDB 資料上使用 Embeddings 模型執行相似度向量搜尋,就是這麼簡單。

建構對話式代理!

服務專員是在本實驗室的第 2 部分中建構。

12. 清除所用資源

如果您打算完成本實驗室的第 2 部分,請略過這個步驟,因為這會刪除目前的專案。

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

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

13. 恭喜

恭喜!您已使用 AlloyDB、pgvector 和向量搜尋功能,成功執行相似度搜尋。結合 AlloyDBVertex AIVector Search 的功能,我們在提供情境和向量搜尋服務方面取得重大進展,讓這類服務更易於使用、效率更高,且真正以意義為導向。本實驗室的下一部分將說明如何建構代理程式。