1. סקירה כללית
בסביבה הקמעונאית המשתנה במהירות של ימינו, חשוב מאוד לספק שירות לקוחות יוצא מן הכלל ולאפשר חוויות קנייה בהתאמה אישית. נציג לכם מסע טכני ליצירת אפליקציית צ'אט מבוססת-ידע, שנועדה לענות על שאלות של לקוחות, לעזור להם לגלות מוצרים ולהתאים אישית את תוצאות החיפוש. הפתרון החדשני הזה משלב את היכולות של AlloyDB לאחסון נתונים, מנוע ניתוח נתונים פנימי להבנת הקשר, Gemini (מודל שפה גדול) לאימות הרלוונטיות ו-Agent Builder של Google להפעלה מהירה של עוזר חכם לשיחות.
האתגר: לקוחות קמעונאיים מודרניים מצפים לקבל תשובות מיידיות והמלצות למוצרים שתואמות להעדפות הייחודיות שלהם. שיטות חיפוש מסורתיות לא תמיד מספקות את רמת ההתאמה האישית הזו.
הפתרון: אפליקציית הצ'אט שלנו מבוססת על ידע ונותנת מענה ישיר לאתגר הזה. הוא מתבסס על מאגר ידע עשיר שנוצר מנתוני הקמעונאות שלכם כדי להבין את כוונת הלקוח, להגיב בצורה חכמה ולספק תוצאות רלוונטיות במיוחד.
מה תפַתחו
בשיעור ה-Lab הזה (חלק 2):
- יצירת סוכן ב-Vertex AI Agent Builder
- שילוב כלי AlloyDB בסוכן
דרישות
2. ארכיטקטורה
זרימת הנתונים: נבחן את האופן שבו הנתונים עוברים במערכת שלנו:
הטמעה:
נתוני קמעונאות (מלאי, תיאורי מוצרים, אינטראקציות עם לקוחות) נטענים באופן רציף ל-AlloyDB.
מנוע Analytics:
נשתמש ב-AlloyDB כמנוע לניתוח נתונים כדי לבצע את הפעולות הבאות:
- חילוץ הקשר: המנוע מנתח את הנתונים שמאוחסנים ב-AlloyDB כדי להבין את הקשרים בין מוצרים, קטגוריות, התנהגות לקוחות וכו', לפי הצורך.
- יצירת הטמעה: הטמעות (ייצוגים מתמטיים של טקסט) נוצרות גם עבור השאילתה של המשתמש וגם עבור המידע שמאוחסן ב-AlloyDB.
- חיפוש וקטורי: המנוע מבצע חיפוש דמיון, ומשווה בין ההטמעה של השאילתה לבין ההטמעות של תיאורי מוצרים, ביקורות ונתונים רלוונטיים אחרים. הפונקציה הזו מזהה את 25 השכנים הקרובים הרלוונטיים ביותר.
אימות ב-Gemini:
התשובות הפוטנציאליות האלה נשלחות ל-Gemini להערכה. Gemini קובע אם הן באמת רלוונטיות ובטוחות לשיתוף עם המשתמש.
יצירת תשובה:
התשובות שעברו אימות מובנות כמערך JSON, והמנוע כולו ארוז כפונקציית Cloud Run ללא שרת, שמופעלת מ-Agent Builder.
השלבים שלמעלה כבר מוסברים בחלק 1 של ה-Lab.
הסברנו את הפרטים הטכניים של יצירת מנוע לניתוח נתונים מבוסס-ידע שמפעיל את עוזר הקניות החכם שלנו. עכשיו נראה איך אנחנו משתמשים בקסם של Agent Builder כדי להפעיל את המנוע הזה בממשק שיחה. לפני שמתחילים בחלק 2, צריך לוודא שכתובת ה-URL של נקודת הקצה מוכנה. בשיעור ה-Lab הזה נלמד על השלב הבא:
אינטראקציה שיחתית:
Agent Builder מציג את התשובות למשתמש בפורמט של שפה טבעית, כדי לאפשר דיאלוג הלוך ושוב.
3. לפני שמתחילים
יצירת פרויקט
- ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud ומגיעה עם bq שנטען מראש. לוחצים על 'הפעלת Cloud Shell' בחלק העליון של מסוף Google Cloud.

- אחרי שמתחברים ל-Cloud Shell, בודקים שכבר בוצע אימות ושהפרויקט מוגדר למזהה הפרויקט באמצעות הפקודה הבאה:
gcloud auth list
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
- אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>
- מפעילים את ממשקי ה-API הנדרשים. אפשר גם לחפש כל מוצר במסוף או להשתמש בקישור הזה במקום בפקודת gcloud.
אם פספסתם API כלשהו, תמיד תוכלו להפעיל אותו במהלך ההטמעה.
אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.
הערה חשובה: כדי להשלים את השלב הזה, צריך לוודא שסיימתם את חלק 1 של שיעור ה-Lab.
4. יצירת סוכן
היכרות עם Agent Builder
Agent Builder הוא כלי רב עוצמה עם תכנות מינימלי, שמאפשר לנו ליצור סוכנים בממשק שיחה במהירות וביעילות. הוא מייעל את התהליך של עיצוב תרשימי זרימה של דיאלוגים, שילוב מאגרי ידע וקישור לממשקי API חיצוניים. במקרה שלנו, נשתמש ב-Agent Builder כדי להתחבר בצורה חלקה לנקודת הקצה של Cloud Function שיצרנו בחלק 1, וכך נאפשר לעוזר הקניות שלנו לגשת למאגר הידע הקמעונאי שלנו ולענות בצורה חכמה על שאלות של לקוחות.
יצירת הסוכן
בואו נתחיל ליצור את הסוכן החדש הזה כדי לענות על שאלות של משתמשים לגבי מוצרי הביגוד.
- כדי להתחיל, נכנסים אל פלטפורמת Agent Builder. אם מוצגת בקשה להפעיל את ה-API, לוחצים על 'המשך והפעלת ה-API'.
- לוחצים על 'יצירת אפליקציה' ונותנים לסוכן שם תיאורי (למשל, 'עוזר קניות קמעונאי').
- לוחצים על סוג האפליקציה 'סוכן'.

- . נותנים לסוכן שם תיאורי כמו Retail Shopping Assistant ומגדירים את האזור כ-us-central1

- מזינים את פרטי הנציג:
- משנים את שם הסוכן ל'סוכן חכם לקניות קמעונאיות'.
- מוסיפים את היעד הבא:
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.

- בשלב הזה, שומרים את ההגדרה ומשאירים את ההוראות ריקות.
- בתפריט הניווט, לוחצים על 'כלים' ואז על 'יצירה'.

הזנת שם הכלי: הכלי לקניות קמעונאיות
Enter Tool Description:
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.
Enter Schema — OpenAPI in YAML format:
בשלב הזה אנחנו משתמשים בנקודת הקצה של ה-Backend כדי להפעיל את הסוכן. מעתיקים את מפרט OpenAPI שבהמשך ומחליפים את ה-placeholder של כתובת ה-URL (שמוקף בסוגריים זוויתיים) בנקודת הקצה של Cloud Functions:
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.
משאירים את ערכי ברירת המחדל בשאר ההגדרות ולוחצים על 'שמירה'.
- בשלב הזה, חוזרים אל הסוכן כי רוצים להוסיף את ההגדרה Tool (כלי) אל Instructions (הוראות) של הסוכן. מוסיפים את הטקסט הבא ל-placeholder של ההוראות (חשוב לזכור שההזחות חשובות להגדרת התהליך):
- 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 (תצוגה מקדימה של הסוכן) שמאפשר לכם לבדוק את הסוכן.
כפי שאפשר לראות בצילום המסך שלמטה, פניתי למשתמש לשלום והתחלתי את הצ'אט עם בקשה לחולצה לבנה עם הדפסים כחולים:

זו תגובת ה-JSON:

זו תוצאת ה-JSON הגולמית מפונקציית Cloud Functions שמבצעת את חיפוש הדמיון ב-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!
הנחיות עם כמה דוגמאות
נניח שאתם רוצים לראות את התוצאה בסוכן בממשק שיחה בפורמט גרפי מסוים, כולל תמונות וקישורים. נעשה זאת באמצעות דוגמאות לשיחות, שנקראות גם הנחיות עם דוגמאות.
כלומר, אנחנו רוצים להוסיף כמה דוגמאות לכלי ליצירת סוכנים כדי לקבל פורמט תוצאות עקבי.
באחד מצילומי המסך הקודמים שלנו בקטע בדיקת הסוכן, אפשר לראות את התגובה של הסוכן: "הבנתי. אתה מחפש חולצה לבנה עם הדפסים כחולים...". עוברים לתשובה הזו או יוצרים שיחת בדיקה חדשה בחלונית השמאלית של הסוכן:
- מקלידים את הטקסט הבא בקטע 'הזנת קלט משתמש':

תקבלו תשובה כזו:

בנוסף, יוצג לכם מערך JSON שמוחזר מנקודת קצה ל-API.
- עכשיו לוחצים על שם הנציג (כמו שמוצג בתמונה למטה, מודגש בסימן וי אדום) בשוליים של קטע התצוגה המקדימה, וכל הכרטיסיות בקטע התצוגה המקדימה של הצ'אט יודגשו. עכשיו לוחצים על 'שמירת הדוגמה' בפינה השמאלית העליונה בקטע התצוגה המקדימה. הממשק אמור להיראות כך:

- שומרים את השיחה עם שם תצוגה כמו 'תשובה עם תמונות' או שם דומה, ולוחצים על 'יצירה'.
- עכשיו עוברים לכרטיסיית התשובה שמודגשת בסימן וי שחור בתמונה שלמעלה ומחליפים את הטקסט 'הבנתי. אתה מחפש סנדלים צהובים. זה נכון?" עם הטקסט הבא:
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>
- לוחצים על 'שמירה' בחלק העליון.
חוזרים על התהליך כמה פעמים שרוצים עם דוגמאות שונות ועם וריאציות שונות של השיחה.
עכשיו אפשר לבדוק את זה עם קלט של משתמשים:

סוגים אחרים של תשובות:

זה הכול. יצרנו ובדקנו בהצלחה סוכן וירטואלי לשיחות באפליקציית הקמעונאות שלנו.
7. פריסה ושילוב
אחרי שתהיו מרוצים מהסוכן, תוכלו לפרוס אותו בקלות בערוצים שונים באמצעות השילובים של Agent Builder. אפשר להטמיע אותו באתר, לשלב אותו עם פלטפורמות פופולריות להעברת הודעות או אפילו ליצור אפליקציה ייעודית לנייד. אפשר גם להשתמש ב-Agent Builder API ישירות באפליקציות הלקוח שלנו באינטרנט, כפי שמוסבר בבלוג הזה.
8. הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במאמר הזה:
9. מזל טוב
מעולה! שילבנו את העוצמה של מנוע לניתוח נתונים שפיתחנו במיוחד עם הממשק האינטואיטיבי של Agent Builder, ויצרנו עוזר קניות חכם לקמעונאות שמספק חוויות בהתאמה אישית, עונה על שאלות בצורה מדויקת ובסופו של דבר משפר את שביעות רצון הלקוחות ומגדיל את המכירות. שילוב היכולות של AlloyDB, Vertex AI ו-Vector Search מאפשר לנו לעשות קפיצה משמעותית קדימה ולהפוך את החיפושים ההקשריים והווקטוריים לנגישים, יעילים, מבוססי-משמעות ואקטיביים באמת!