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

1. 總覽

在現今快速變遷的零售環境中,提供出色的客戶服務並打造個人化購物體驗,是首要之務。我們會逐步引導您建立知識導向的即時通訊應用程式,藉此回答客戶問題、引導產品探索,並打造切合需求的搜尋結果。這項創新解決方案結合了 AlloyDB 的功能、可儲存資料的內部數據分析引擎、用於驗證關聯性的內部數據分析引擎、可驗證關聯性的 Gemini (大型語言模型),以及可快速啟動智慧對話助理的 Google Agent Builder。

挑戰:現代零售客戶希望獲得符合自身獨特偏好的即時解答及推薦產品。傳統的搜尋方法通常無法提供這樣的個人化功能。

解決方案:我們知識導向的即時通訊應用程式可協助您克服這項挑戰。AI 會利用從零售資料衍生的豐富知識庫瞭解客戶意圖、以智慧方式回應,並提供高度相關的結果。

建構項目

在這個研究室 (第 2 單元) 中,您將完成以下工作:

  1. 建構 Vertex AI Agent Builder 虛擬服務專員
  2. 將 AlloyDB 工具與代理程式整合

需求條件

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

2. 建築

資料流:讓我們進一步瞭解資料如何在我們的系統中移動:

內容擷取

零售資料 (庫存、產品說明、客戶互動) 會持續載入 AlloyDB。

數據分析引擎:

我們會使用 AlloyDB 做為數據分析引擎執行下列作業:

  1. 情境擷取:引擎會分析 AlloyDB 中儲存的資料,瞭解產品、類別、客戶行為等 (如適用) 之間的關係。
  2. 建立嵌入項目:針對使用者查詢和儲存在 AlloyDB 中的資訊,產生嵌入 (文字的數學表示法)。
  3. Vector Search:引擎會進行相似度搜尋,將嵌入的查詢與產品說明、評論和其他相關資料的嵌入進行比較。這代表最相關的 25 個「最鄰近項目」。

Gemini 驗證:

這些可能的回覆會傳送給 Gemini 進行評估。Gemini 會判斷這些內容是否確實相關且安全,並與使用者分享。

產生回應:

通過驗證的回應會結構化成 JSON 陣列,且整個引擎會封裝至透過 Agent Builder 叫用的無伺服器 Cloud Run 函式。

上述步驟已在本研究室的第 1 部分 中介紹。

我們探討瞭如何建立知識導向數據分析引擎來強化智慧購物助理的技術細節。現在,讓我們一起看看我們如何運用 Agent Builder 的神奇功能,透過對話式介面生動呈現這個引擎。開始進行第 2 部分前,請確認您已備妥端點網址。本研究室將說明以下後續步驟:

對話互動:

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 指令的替代方案,則是透過搜尋每項產品或使用這個連結,透過控制台執行。

如果在導入過程中找不到任何 API,隨時可以啟用。

如要查看 gcloud 指令和使用方式,請參閱說明文件

重要注意事項:此外,請務必完成研究室的第 1 部分,完成這項操作。

4. 建立虛擬服務專員

隆重推出 Agent Builder

Agent Builder 是功能強大、只需編寫少量程式碼的工具,可幫助我們快速有效率地建立對話虛擬服務專員。這可以簡化設計對話流程、整合知識庫及連線至外部 API 的程序。在本範例中,我們將使用 Agent Builder,順暢連線至我們在第 1 部分建立的 Cloud Function 端點,讓購物助理能夠存取我們的零售知識庫,並以智慧方式回應客戶查詢。

建構代理程式

讓我們開始建立這個新代理程式,回答有關服飾產品的使用者問題。

  1. 首先,請登入Agent Builder 平台。如果系統提示您啟用 API,請按一下「繼續」並啟用 API。
  2. 按一下 [建立應用程式]並為代理程式取個清楚易懂的名稱 (例如「零售購物助理」)。
  3. 按一下應用程式類型「Agent」。

462bb48664e9a14e.png

  1. ,直接在 Google Cloud 控制台實際操作。為虛擬服務專員命名,例如「零售購物助理」並將區域設為 us-central1

10eceef44b1600d1.png

  1. 輸入代理程式的詳細資料:
  2. 將虛擬服務專員名稱變更為「Retail Shopping Agent」(零售購物代理)。
  3. 新增下方的「目標」:
You are a shopping assistant agent! Your job is to help the customer search for their ideal apparels, allow them to add items to their cart, remove items from their cart, and review items in their cart. Once a user is done searching, open the search results in a user friendly html page.

537a87a842aae897.png

  1. 請儲存現在的代碼,暫時將說明留白。
  2. 接著按一下導覽選單中的「工具」,然後點選「建立」

2ffae953bbad38e5.png

輸入工具名稱:零售購物工具

輸入工具說明:

This tool refers to the dataset in the backend as the context information for product inventory. It takes as input the user's search text summarized by the agent and matches with the most appropriate list of items and returns as an array of items.

輸入結構定義,並以 YAML 格式開啟 OpenAPI:

這就是我們使用後端端點為代理程式供電的部分。複製下列 OpenAPI 規格,然後將網址預留位置 (夾在角括號中) 替換為您的 Cloud 函式端點

openapi: 3.0.0
info:
 title: AlloyDB Product Matcher
 description: A Cloud Function to query AlloyDB for product matches based on user search text.
 version: 1.0.0
servers:
 - url: <<https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/alloy-gem>>
paths:
 /:
   post:
     summary: Find matching products based on search text.
     operationId: apparelSearch
     requestBody:
       description: JSON object containing the search text.
       required: true
       content:
         application/json:
           schema:
             type: object
             properties:
               search:
                 type: string
                 description: The user's search query for product matching.
     responses:
       '200':
         description: Successful response with a JSON array of matching products.
         content:
           application/json:
             schema:
               type: array
               items:
                 type: object
                 properties:
                   id:
                     type: string
                     description: Product ID.
                   category:
                     type: string
                     description: Product category.
                   sub_category:
                     type: string
                     description: Product sub-category.
                   uri:
                     type: string
                     description: Product URI or URL.
                   description:
                     type: string
                     description: Product description.
                   literature:
                     type: object
                     description: JSON object containing match information from the ML model.
                     properties:
                       MATCH:
                         type: string
                         description: Whether the product matches the search query (YES/NO).
                       PERCENTAGE:
                         type: string
                         description: Percentage of match.
                       DIFFERENCE:
                         type: string
                         description: Description of differences between the search and product.
       '500':
         description: Internal server error.

其餘設定則保留預設值,然後點選「儲存」。

  1. 我們想要新增「工具」,因此請返回代理程式。設為代理程式的「操作說明」在操作說明預留位置中加入下方文字 (請注意,縮排對於定義流程很重要):
- Greet the user and answer their question to the best of your knowledge.
- Summarize the user's request and ask them to confirm that you understood correctly.
   - Check if the request has details like gender, color, material, style and other key apparel details already.
   - If not, seek clarifying details.
   - If the search request is very broad, then ask the user to narrow down the request with specific details that you believe could be personal preferences.
   - Once all the necessary details are met, summarize your final understanding of the request with the user.
- Use ${TOOL: Retail Shopping Tool} to help the user with their task.
- If the request has unrelated input text, gracefully convey that you don't have information on that topic.
- Do not give product availability information outside the source that is provided to you in ${TOOL: Retail Shopping Tool}.
- Do not assist with any information unless you are certain that you know the answer and it is grounded in the source of truth.
- Thank the user for their business and say goodbye.

確認工具「零售購物工具」在「可用工具」中選取專區,然後再次儲存代理程式

5. 測試代理程式

右側窗格中應會顯示「Preview Agent」部分,讓您測試代理程式。

如下方的螢幕截圖所示,我已聯絡使用者,在即時通訊中要求穿著藍色印花的白色襯衫:

63ac3ef6d1f0f614.png

以下是 JSON 回應:

acf3cb0e2be2ed91.png

這是來自 Cloud 函式的原始 JSON 結果,該函式會處理 AlloyDB 相似度搜尋。大功告成!服務專員現在已完成所有設定。

6. 對話流程範例

此時,您可以測試並疊代對話方塊 (對話) 代理程式的流程:

User: I'm looking for women's boots for winter. 

Agent: (OpenAPI call to Cloud Function that works with AlloyDB Similarity Search) 

Cloud Function: (Processes query, returns JSON array) 

Agent: Based on your preferences, here are some options: [Product 1, Product 2, Product 3]. Would you like to see more details about any of these?

User: No, That is all. Bye!

Agent: Have a good day!

少量樣本提示

現在,假設您想要在對話式代理程式中,以特定圖形格式查看結果,包括圖片和連結。我們會利用「少量畫面提示」這類對話的範例來達成這個目的。

這意味著我們要在代理程式建構工具中新增幾個範例,讓結果格式保持一致。

這是先前「Test the Agent」(測試代理程式) 的螢幕截圖部分中,代理程式的回覆會顯示為「I see.你在找有藍色印花的白色襯衫...」請前往該回應,或從代理程式的右側窗格中建立新的測試對話:

  1. 在「輸入使用者輸入內容」中輸入下方內容區段:

dc8c010c36400e64.png

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

e31d9f53bf5564c8.png

以及 API 端點傳回的 JSON 陣列。

  1. 現在,按一下預覽區邊界的「探員名稱」(如下圖中以紅色勾號標示),系統會醒目顯示即時通訊預覽區段中的所有分頁。接著,按一下「儲存範例」。介面外觀如下:

1e0a9f6815f63bf9.png

  1. 使用顯示名稱「回覆含有圖片」來儲存對話或類似文字,然後點選 [建立]
  2. 接著前往上圖中以黑色勾號標示的回應分頁,然後替換「我看到。你在找黃色涼鞋。對嗎?」取代為:
I see you are looking for yellow sandals. Here are a few options for you:
<!DOCTYPE html>
<html>
<body>

<h2>Featured Sandals</h2>

<table style="overflow-x: auto; white-space: nowrap;">
    <tr>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/d27dbd8e9666b9af2d72fbfde315f76d_images.jpg" alt="Yellow sandals from Estd. 1977" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b7a479fe5f56457e930541a789c5df68_images.jpg" alt="Yellow sandals from Gliders" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b6c813734b29b89d1055fd000ea50743_images.jpg" alt="Yellow sandals from Rocia" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/ee0e918c229e76e0e7e61712e9d2ecb3_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/5bdd4c9e739205e28ee134ff7849bc60_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
    </tr>
</table>

</body>
</html>
  1. 按一下 [儲存]也就是頂部

您可以視需求重複執行這個程序,比如讓各種範例都加入不同的對話變化版本和流程。

現在,請透過使用者輸入內容進行測試:

450166a929645353.png

以下列舉一些其他類型的回應:

be8908c99cd33730.png

就是這麼簡單!我們已成功為零售應用程式建立及測試對話代理程式。

7. 部署和整合

如果您對代理程式感到滿意,就可以使用 Agent Builder 的整合功能,輕鬆將其部署至各種管道。您可以將徽章嵌入自家網站、與熱門訊息平台整合,甚至建構專屬的行動應用程式。也可以直接在我們的網路用戶端應用程式中使用 Agent Builder API,詳情請參閱這個網誌

8. 清除所用資源

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

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

9. 恭喜

恭喜!我們整合了強大的分析引擎功能,以及 Agent Builder 的直覺式介面,打造了智慧型零售購物助理,提供個人化體驗、正確回答問題,最終提升客戶滿意度和銷售量。我們結合 AlloyDBVertex AIVector Search 的功能,大幅提高語境和向量搜尋的效率、效率、意義明確,以及建立人性化的搜尋體驗。