1. מבוא
בעולם הקמעונאות המודרני, הנתונים שלכם הם מערכת אקולוגית מגוונת ורחבת היקף. יש לכם נתונים טרנזקציוניים אמינים (מחירים ומלאי), קטלוגים פולימורפיים 'מבולגנים' (מפרטים של מוצרי אלקטרוניקה לעומת מידות של בגדים) ופטה-בייט של יומני התנהגות. הכפייה של כל אלה למונולית יחיד לא רק יוצרת חוב טכני, אלא גם פוגעת בחוויית המשתמש.
ב-Codelab הזה תלמדו איך לתכנן מערכת Polyglot Powerhouse שמשלבת בין:
- AlloyDB: עמוד השדרה העסקי שלכם לעקביות במהירות גבוהה ולהטמעות של תמונות.
- MongoDB Atlas ב-Google Cloud: שכבת הקטלוג הגמישה והאגנוסטית לסכימה.
- Cloud Storage: המוח האנליטי שלכם לחיזוי מגמות בזמן אמת.
- BigQuery: מחסן נתונים דיגיטלי ברזולוציה גבוהה.
הרוטב הסודי? תשתמשו ב-MCP Toolbox for Databases כדי לתזמר ולאחד בצורה חכמה את מקורות הנתונים שפועלים ב-Cloud Run כגשר סמנטי, ואז תפרסו אפליקציית צ'אט מרובת סוכנים באמצעות Agent Development Kit (ADK). אתם לא רק בונים סרגל חיפוש, אלא מוח קמעונאי חכם שמבין את ההקשר, מכבד את המגבלות ומגשר על הפער בין נתונים גולמיים לבין כוונת המשתמש.
שאילתת משתמש בלתי אפשרית
סוכני מסחר אלקטרוני רגילים לא מצליחים לבצע נימוק רב-ממדי (שילוב של אילוצים שליליים, דמיון חזותי ומלאי בזמן אמת). לדוגמה, בדרך כלל אני רוצה לדבר עם אתר קמעונאי כזה:
"היי, אני מתכנן טיול לצילום בגובה רב. תציג לי כמה תרמילים עמידים בפני מזג אוויר, בסגנון דומה ל-AeroGlow Pro, אבל בלי רכיבי עור. בנוסף, אשמח לדעת אם המוצר נמצא במלאי ואם צלמים אחרים התלוננו בביקורות על העמידות של הרצועה".
למה השאילתה הזו נקראת 'הסוכן הקטלני':
- דמיון חזותי (AlloyDB + Vector Search): כדי ליצור תמונה בסגנון דומה ל-AeroGlow Pro, צריך להשוות הטמעה של תמונות.
- אילוץ שלילי (MongoDB): כדי לסנן לפי 'בלי עור' צריך להשתמש במאפיינים גמישים ומקוננים, שלא מופיעים בדרך כלל בסכימת SQL סטנדרטי.
- מלאי בזמן אמת (AlloyDB): כדי לדעת אם מוצר מסוים נמצא במלאי, צריך לבצע בדיקה טרנזקציונלית בזמן אמת (ולא להסתמך על אינדקס חיפוש לא עדכני).
- סינתזה סמנטית (BigQuery + Multi-Agent): כדי לנתח ביקורות בנושא 'עמידות הרצועה', הסוכן צריך לסכם משוב לא מובנה מ-BigQuery תוך כדי תנועה.
רוב הבוטים הקמעונאיים יראו רק 'תרמיל' ו'עור' ויציגו 10 תרמילי עור. איך אנחנו מונעים את זה?
כי אנחנו לא מתאימים רק מילות מפתח. אנחנו משתמשים ב-MCP Toolbox כדי לאפשר לסוכנים שלנו'להסיק מסקנות' מכל המקורות האלה, מהנתונים העסקיים ב-AlloyDB וממאפיינים גמישים ב-MongoDB בו-זמנית. בואו נבנה אותו.
הפעולות שתבצעו:
- הקצאת אשכול AlloyDB לנתוני מוצרים מרכזיים
- הגדרת MongoDB Atlas ב-Google Cloud לאחסון פרטי מוצרים חצי מובנים
- יצירת קטגוריה של Cloud Storage להצגת תמונות מוצרים
- פריסה של MCP Toolbox for Databases ב-Cloud Run לגישה אחידה לנתונים
- הפעלת תהליכי ETL כדי להעביר נתונים אל BigQuery לצורך ניתוח
- לנהל שיחה עם סוכן AI בשפה טבעית.

דרישות מוקדמות
- דפדפן אינטרנט כמו Chrome
- פרויקט ב-Google Cloud שהחיוב בו מופעל
- חשבון MongoDB Atlas ב-Google Cloud בחינם
2. לפני שמתחילים
יצירת פרויקט ב-Google Cloud
- במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים פרויקט ב-Google Cloud או יוצרים פרויקט.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
הפעלת Cloud Shell
Cloud Shell היא סביבת שורת פקודה שפועלת ב-Google Cloud וכוללת מראש את הכלים הנדרשים.
- לוחצים על Activate Cloud Shell בחלק העליון של מסוף Google Cloud.
- אחרי שמתחברים ל-Cloud Shell, מאמתים את האימות:
gcloud auth list - מוודאים שהפרויקט מוגדר:
gcloud config get project - אם הפרויקט לא מוגדר כמו שציפיתם, מגדירים אותו:
export PROJECT_ID=<YOUR_PROJECT_ID> gcloud config set project $PROJECT_ID
הפעלת ממשקי ה-API הנדרשים
מריצים את הפקודה הבאה כדי להפעיל את כל ממשקי ה-API הנדרשים:
gcloud services enable \
alloydb.googleapis.com \
bigquery.googleapis.com \
storage.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com \
compute.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
3. הגדרת Cloud Storage
Cloud Storage משמש כמאגר עצום של נכסי מדיה לא מובְנים, כמו תמונות מוצרים.
- ב-Google Cloud Console, עוברים אל Cloud Storage ולוחצים על Create bucket.
- נותנים לקטגוריה שם ייחודי באופן גלובלי (לדוגמה,
ecommerce-app-images). - לוחצים על יצירה.
- כדי לאפשר לאפליקציית ההדגמה לגשת לתמונות בלי אימות, מבטלים את הסימון באפשרות Enforce public access prevention on this bucket ולוחצים על Confirm.
- עוברים לכרטיסייה Permissions.
- בקטע הרשאות, לוחצים על מתן גישה.
- בשדה New principals, מזינים
allUsers. - ברשימת התפקידים Select a role בוחרים באפשרות Cloud Storage > Storage Object User.
- לוחצים על שמירה ואז על מתן גישה לכולם כדי לאשר שהמשאב יהיה ציבורי.
העלאת תמונות placeholder
בסרטון BRK2-149-multidb-ecommerce נעשה שימוש בתמונות placeholder כדי להעניק חוויה חזותית מיטבית.
- ב-Cloud Shell, משכפלים את המאגר
next-26-sessions:git clone https://github.com/GoogleCloudPlatform/next-26-sessions.git - עוברים לתיקייה
UploadImages:cd next-26-sessions/BRK2-149-multidb-ecommerce/UploadImages - במסוף Google Cloud, עוברים אל Cloud Storage ולוחצים על Buckets.
- לוחצים על השם של הקטגוריה החדשה שיצרתם.
- לוחצים על העלאה > העלאת קבצים, בוחרים את תמונות הדוגמה שהורדתם ולוחצים על פתיחה.
4. הגדרת AlloyDB
AlloyDB משמש כמקור האמת היחיד לנתונים מובְנים, טרנזקציונליים וקריטיים כמו מזהי מוצרים, שמות, מק"טים, מחירים ומלאי. AlloyDB גם מפעיל את סוכן ה-AI עם יכולות חיפוש דמיון להמלצות ולשאילתות בשפה טבעית.
הקצאת משאבים לאשכול AlloyDB
- במסוף Google Cloud, עוברים אל AlloyDB ל-PostgreSQL.
- לוחצים על יצירת אשכול.
- בשדה מזהה האשכול, מזינים
ecommerce-cluster. - מגדירים סיסמה חזקה למשתמש
postgres. למטרות למידה, אפשר להשתמש ב-alloydb. - בשדה Database Version (גרסת מסד הנתונים), משאירים את ברירת המחדל.
- בשדה Region, בוחרים באפשרות
us-central1(או באזור המועדף).
הגדרת המכונה הראשית
- בשדה Instance ID, מזינים
ecommerce-cluster-primary. - בקטע זמינות אזורית, בוחרים באפשרות אזור יחיד.
- בקטע Machine Type (סוג המכונה), בוחרים סוג מכונה קטן (למשל, N2, 4 vCPU, 32 GB RAM).
- בקטע Private IP Connectivity (קישוריות של כתובות IP פרטיות), בוחרים באפשרות Private Services Access (PSA) (גישה לשירותים פרטיים) ובוחרים את הרשת
default.אם לא מוגדרת רשת ברירת מחדל, לוחצים על Confirm network setup (אישור הגדרת הרשת) כדי ליצור רשת כזו. - בקטע Public IP Connectivity, מסמנים את התיבה Enable Public IP כדי שכלי ה-MCP יתחברו בצורה תקינה ב-codelab הזה.
- בקטע Authorised external networks, מזינים את הערך
0.0.0.0/0. מסמנים את תיבת הסימון I acknowledge the risks (אני מאשר/ת את הסיכונים) ולוחצים על Save (שמירה). - לוחצים על יצירת אשכול.
הערה: חשוב לרשום את כתובת ה-IP הציבורית (היא נראית בערך כך: 34.124.240.26).
הפעלת מסד הנתונים
- בתפריט הניווט הימני, לוחצים על AlloyDB Studio.
- בתפריט הנפתח Database, בוחרים באפשרות
postgres. - בוחרים באפשרות אימות מובנה כדי להיכנס למסד הנתונים.
- בשדה שם משתמש, משתמשים בערך
postgresuser. - בקטע סיסמה, מזינים את הסיסמה שהגדרתם קודם.
- לוחצים על אימות.
- בתצוגת העריכה, פותחים כרטיסייה חדשה של שאילתה ללא שם.
- מעתיקים את ה-DDL הבא ולוחצים על Run:
CREATE TABLE products_core_table ( product_id UUID PRIMARY KEY, name VARCHAR(255) NOT NULL, sku VARCHAR(50) UNIQUE NOT NULL, price NUMERIC(10, 2) NOT NULL, stock INT NOT NULL ); - ב-Cloud Shell, עוברים לתיקייה
BRK2-149-multidb-ecommerce:cd next-26-sessions/BRK2-149-multidb-ecommerce - פותחים את הקובץ
alloydb_insert_queries.sqlב-Cloud Shell ומעתיקים את שאילתות ההוספה.cat alloydb_insert_queries.sql - בכרטיסייה חדשה של שאילתה ללא שם, מדביקים רק את ההצהרות
INSERTולוחצים על הפעלה. - בכרטיסייה חדשה של שאילתה ללא שם, מעתיקים את ה-DDL הבא ולוחצים על הפעלה כדי ליצור אינדקס בטבלה
products_core_table:CREATE INDEX idx_products_core_sku ON products_core_table(sku);
יצירת הטמעות של תמונות כדי שסוכן AI יאחזר מוצרים דומים
השילוב של סוכן ה-AI משתמש בהטמעות של תמונות כדי לאחזר מוצרים דומים. ההטמעות נוצרות באמצעות מודל multimodalembedding@001 ונשמרות במסד הנתונים של AlloyDB. ההטמעות הן וקטורים עם 1,408 ממדים והן מאוחסנות בעמודה img_embeddings.
כדי שנוכל ליצור הטבעות, אנחנו צריכים להקצות לחשבון השירות של AlloyDB את התפקידים הנדרשים כדי לגשת ל-Cloud Storage.
הענקת תפקידים לחשבון השירות של AlloyDB כדי לגשת ל-Cloud Storage
אנחנו מקצים לחשבון השירות של AlloyDB את התפקידים 'משתמש באובייקט אחסון' ו'צפייה באובייקט אחסון' כדי לאפשר לו לקרוא אובייקטים מהקטגוריה של Cloud Storage.
- עוברים אל IAM and admin (ניהול הרשאות גישה).
- לוחצים על הענקת גישה.
- בשדה New principals, מזינים את חשבון השירות של AlloyDB. חשבון השירות נראה דומה ל-
service-991742412753@gcp-sa-alloydb.iam.gserviceaccount.com. - לוחצים על בחירת תפקיד.
- מחפשים את התפקיד משתמש באובייקט אחסון ובוחרים בו.
- לוחצים על Add another role ובוחרים את התפקיד Storage Object Viewer.
- לוחצים על Add another role ובוחרים את התפקיד Vertex AI User.
- לוחצים על שמירה.
הפעלת תוספים
כדי לבנות את האפליקציה הזו, נשתמש בתוספים pgvector ו-google_ml_integration. התוסף pgvector מאפשר לכם לאחסן הטמעות וקטוריות ולחפש אותן. התוסף google_ml_integration מספק פונקציות שמשמשות לגישה לנקודות קצה של חיזוי ב-Vertex AI כדי לקבל חיזויים ב-SQL. כדי להפעיל את התוספים האלה, מריצים את פקודות ה-DDL הבאות:
- במסוף Google Cloud, עוברים אל AlloyDB ל-PostgreSQL.
- בתפריט הניווט הימני, לוחצים על AlloyDB Studio.
- בתצוגת העריכה, פותחים כרטיסייה חדשה של שאילתה ללא שם.
- מעתיקים את ה-DDL הבא ולוחצים על Run:
CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS google_ml_integration;
הפעלת אתחול של מסד הנתונים עם הטמעות
- מוסיפים את העמודה img_embeddings ל-
products_core_table.ALTER TABLE products_core_table ADD COLUMN img_embeddings vector(1408); - יוצרים הטמעות לתמונות ומאחסנים אותן בעמודה
img_embeddings. מחליפים אתUPDATE products_core_table SET img_embeddings = google_ml.image_embedding( model_id => 'multimodalembedding@001', image => 'gs://<STORAGE_BUCKET_NAME>/' || sku || '.jpg', mimetype => 'image/jpeg') WHERE sku IN ( SELECT sku FROM products_core_table WHERE img_embeddings IS NULL AND sku IS NOT NULL LIMIT 10 );בשם הקטגוריה שלכם ב-Cloud Storage. - כדי ליצור הטמעות של תמונות לכל קבוצת התמונות, צריך לחזור על השאילתה הקודמת לפחות 5 פעמים, כי יש מגבלה של 5 דקות ב-Studio. אם חלף הזמן הקצוב לתפוגה של השאילתה הזו, משנים את
LIMITל-5ומריצים מחדש את השאילתה עשר פעמים. השלב הזה עשוי להימשך כמה דקות.
5. הגדרת MongoDB Atlas ב-Google Cloud
ב-MongoDB מאוחסנים פרטי מוצרים עשירים ומובְנים למחצה ונתוני התנהגות משתמשים גמישים (כמו קליקים וצפיות).
יצירת אשכול MongoDB
- עוברים אל MongoDB Atlas ב-Google Cloud ובוחרים חשבון ברמת שירות חינמית.
- בוחרים את רמת האשכול Free (חינם) ומזינים שם לאשכול, למשל
ecommerce-cluster. - בוחרים באפשרות Google Cloud כספק ומוודאים שהאזור תואם לאזור Google Cloud (למשל,
us-central1). - לוחצים על יצירת פריסה.
- לוחצים על סגירה.
הגדרת גישה לרשת
- במסוף Atlas, עוברים אל Database & Network Access (גישה למסד נתונים ולרשת).
- לוחצים על רשימת כתובות IP לגישה.
- לוחצים על הוספת כתובת IP.
- מוסיפים את
0.0.0.0/0, שמאפשר גישה מכל מקום. - לוחצים על אישור.
יצירת משתמש במסד נתונים
- במסוף Atlas, עוברים אל Database & Network Access (גישה למסד נתונים ולרשת).
- לוחצים על משתמשי מסד נתונים.
- לוחצים על הוספת משתמש חדש במסד הנתונים.
- בוחרים באפשרות סיסמה כשיטת האימות.
- מזינים שם משתמש
store-userוסיסמהstoreuser. - לוחצים על Add Built In Role (הוספת תפקיד מובנה) ובוחרים באפשרות Read and write to any database (קריאה וכתיבה בכל מסד נתונים).
- לוחצים על הוספת משתמש.
קבלת מחרוזת החיבור
- עוברים אל מסד נתונים > אשכולות > התחברות.
- בקטע Connect your application (חיבור האפליקציה), לוחצים על Drivers (דרייברים).
- מעתינים את מחרוזת החיבור שמוצגת בקטע הוספת מחרוזת החיבור לקוד האפליקציה. המחרוזת נראית בערך כך:
מחליפים אתmongodb+srv://store-user:<db_password>@ecommerce-cluster.g8vaekh.mongodb.net/?appName=ecommerce-clusterdb_passwordבסיסמה שלכם ל-MongoDB. ב-Codelab הזה, הואstoreuser.
שומרים את מחרוזת החיבור. תשתמשו בו בהמשך בשביל משתנה הסביבה MONGODB_CONNECTION_STRING.
יצירת מסד נתונים ואוסף
- במסוף Atlas, עוברים אל Database > Clusters > Browse Collections (מסד נתונים > אשכולות > עיון באוספים).
- לוחצים על יצירת מסד נתונים ומזינים את הפרטים:
- שם מסד הנתונים:
ecommerce_db - שם האוסף:
product_details_collection
- שם מסד הנתונים:
- לוחצים על יצירת מסד נתונים.
- בכלי לבדיקת נתונים, בוחרים את שם האוסף.
- לוחצים על סמל הוספת נתונים (+) ואז על הוספת מסמך.
- מעתיקים את תוכן ה-JSON מהקובץ product_details_export.json ומדביקים אותו בתיבת הדו-שיח של העורך Insert Document.
- לוחצים על הוספה כדי להוסיף את מערך המסמכים ומוודאים ש-192 מסמכים נוספו.
- בסייר הנתונים, לוחצים על יצירת אוסף (+) לצד מסד הנתונים
ecommerce_db. - מזינים
user_interactions_collectionבשם האוסף ולוחצים על יצירת אוסף. - בכלי לבדיקת נתונים, בוחרים את האוסף
user_interactions_collection. - לוחצים על סמל הוספת נתונים (+) ואז על הוספת מסמך.
- מעתיקים את תוכן ה-JSON מהקובץ user_interactions_export.json ומדביקים אותו בתיבת הדו-שיח של העורך Insert Document.
- לוחצים על הוספת מסמך.
6. הגדרת BigQuery
מערכת BigQuery מצברת ומנתחת את היסטוריית ההתנהגות של המשתמשים כדי ליצור דוחות והמלצות חכמים.
יצירת מערך הנתונים
- ב-Google Cloud Console, עוברים אל BigQuery.
- לצד מזהה הפרויקט בחלונית Explorer, לוחצים על סמל האפשרויות הנוספות (3 נקודות) ובוחרים באפשרות Create dataset (יצירת קבוצת נתונים).
- מזינים
ecommerce_analyticsבשדה Dataset ID. - לוחצים על יצירת מערך נתונים.
יצירת טבלת Analytics
- פותחים שאילתה חדשה בסביבת העבודה של BigQuery.
- מריצים את הצהרת ה-SQL הבאה כדי ליצור את טבלת הסיכום שמקשרת בין משתמשים לבין אינטראקציות עם מוצרים:
CREATE TABLE ecommerce_analytics.user_product_interactions (
user_id STRING DEFAULT 'any user',
product_id STRING,
interaction_score INT
);
הענקת תפקידים לחשבון השירות של Compute עבור MCP Toolbox
אנחנו מקצים תפקידים לחשבון השירות של Compute שמשמש את ערכת הכלים שלנו. הפעולה הזו מתבצעת כדי לאפשר ל-MCP Toolbox לגשת ל-BigQuery, ל-Secret Manager ולשירותי ענן אחרים.
כדי להקצות תפקידים:
- עוברים אל IAM and admin (ניהול הרשאות גישה).
- לוחצים על הענקת גישה.
- בשדה New principals, מזינים את חשבון השירות שמוגדר כברירת מחדל של Compute, שנקרא
YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com. מחליפים אתYOUR_PROJECT_NUMBERבמספר הפרויקט ב-Google Cloud. - לוחצים על בחירת תפקיד.
- מחפשים את התפקיד BigQuery Data Editor ובוחרים אותו.
- לוחצים על Add another role ובוחרים את התפקיד BigQuery Job User.
- לוחצים על Add another role ובוחרים את התפקיד Secret Manager Secret Accessor.
- לוחצים על Add another role ובוחרים את התפקיד Editor.
- לוחצים על שמירה.
7. הסבר על התהליך המלא של הגשת הבקשה
כדי להבין איך כל רכיב פועל עם רכיבים אחרים, ניצור אפליקציה פשוטה למסחר אלקטרוני שמשתמשת במספר מסדי נתונים ושירותים. האפליקציה בנויה עם קצה עורפי (backend) של Python (Flask) ומשלבת מספר שירותים ומסדי נתונים של Google Cloud.
הסבר על מבנה הספריות
בקטע הבא, תשכפלו את מאגר BRK2-149-multidb-ecommerce ותשתמשו בו כדי להריץ את האפליקציה באופן מקומי. אחרי שנבדוק את האפליקציה באופן מקומי, נבצע פריסה של MCP Toolbox ושל האפליקציה ב-Cloud Run.
בודקים את הקבצים שהורדו בספרייה הזו. הספריות הבאות ברמה העליונה קיימות:
-
UploadImages: מאחסן נכסי תמונות, שמשמשים בעיקר לתיעוד או לתוכן ויזואלי בקטלוג מוצרים של מסחר אלקטרוני. -
static: מאחסן את נכסי האינטרנט הסטטיים של האפליקציה, כמו קובצי CSS ו-JavaScript, שמשמשים לעיצוב ולהוספת אינטראקטיביות לממשק המשתמש ( מקור). -
templates: מאחסן את תבניות ה-HTML (כנראה Jinja2 ל-Flask) שבהן משתמשת אפליקציית Python כדי להציג באופן דינמי דפי אינטרנט לקטלוג המסחר האלקטרוני ( מקור). -
toolbox-implementation: מאחסן פרטים על ההגדרה וההטמעה של Model Context Protocol (MCP) Toolbox, ומאפשר אינטראקציות עם מסדי נתונים מרובים באמצעות כלים מוגדרים מראש.
הקבצים במאגר הזה פועלים יחד כדי ליצור, להגדיר ולפרוס אפליקציית מסחר אלקטרוני עם כמה מסדי נתונים. קבצים מרכזיים כמו app.py מתזמנים את העורף על ידי שילוב של מקורות נתונים מגוונים שמוגדרים בקובצי SQL ו-JSON, בעוד שקבצי הגדרות מבטיחים פריסה חלקה בסביבות ענן:
-
app.py: מתאם בין קצה העורפי של Flask ושילובים של מסדי נתונים מרובים. -
agentengine.py: לוגיקה מרכזית לאתחול ולהגדרה של סוכני Vertex AI. -
.env: מאחסן סודות לחיבורים למסד נתונים ולאחסון. -
tools.yaml: הגדרת MCP Toolbox לפעולות במסדי נתונים מרובים. -
Dockerfile: מגדיר את קובץ האימג' של הקונטיינר ואת הגדרת הסביבה. -
requirements.txt: מציג רשימה של ספריות Python שנדרשות להרצת האפליקציה. -
tools.yaml: הגדרות של MCP Toolbox. -
Procfile: מציין פקודות להרצת ייצור לצורך פריסה. -
alloydb_insert_queries.sql: מכיל שאילתות SQL לנתונים יחסיים. -
product_details_export.jsonו-user_interactions_export.json: מספקים נתוני JSON לדוגמה למסד נתונים של NoSQL. -
README.md: מדריך להגדרה, לפריסה ולהבנת הפרויקט.
תהליך מלא של הגשת הבקשה
- הגדרת AlloyDB: הקצאת אשכול עם ביצועים גבוהים ושימוש בסקריפטים של SQL שסופקו כדי ליצור את הטבלה products_core_table עם עמודות וקטוריות להטמעות של תמונות.
- הגדרה של MongoDB Atlas: פריסת אשכול ב-Google Cloud לאחסון מאפייני מוצר דינמיים ב-product_details ולתיעוד של נתוני קליקים בזמן אמת ב-user_interactions.
- BigQuery Analytics: יצירת מערך נתונים לצורך צבירה של יומני אינטראקציות, כדי לאפשר שאילתות אנליטיות מורכבות שמזהות את 5 הפריטים המובילים במגמת עלייה מתוך מיליוני אירועים.
- מאגר Cloud Storage: יוצרים קטגוריה ציבורית לאחסון תמונות מוצרים ברזולוציה גבוהה, ומוודאים שכל נכס נגיש דרך כתובת URL חתומה או ציבורית לקצה הקדמי.
- פריסת MCP Toolbox: פריסת Toolbox ב-Cloud Run, והגדרתו כגשר מרכזי מבוסס-RESTful שמתרגם כוונות בשפה טבעית לשאילתות במספר מסדי נתונים.
- הגדרה של Tools.yaml: מגדירים את הכלים, כמו get_product_core_data או get_top_5_views, וממפים פעולות ספציפיות ב-SQL וב-NoSQL לשמות פשוטים שהסוכן יכול לקרוא.
- לוגיקת קצה עורפי של Flask: הטמעת מסלולים ב-app.py שמקיימים אינטראקציה עם MCP Toolbox, ניהול התיאום של אחזור הנתונים ושימוש כ-API לממשק המשתמש.
- Multi-Agent Orchestration: הגדרת סוכני ADK בקוד כדי להסיק את כוונת המשתמש, ולבחור את ה'כלי' המתאים לפתרון שאילתות מורכבות של קמעונאים שמגיעות ממקורות שונים.
- שילוב קצה קדמי: יוצרים ממשק index.html שכולל את קטלוג המוצרים עם תכונת תיעוד האינטראקציות, כרטיסיית Analytics להבנת ניתוח ביצועי המוצרים וכרטיסייה ייעודית של סוכן שמשתמשת בצ'אט מרובה סוכנים של ADK כדי לספק חוויית קנייה חלקה בשיחה.
עכשיו נטמיע את התיאום והפריסות.
8. הגדרת MCP Toolbox ופריסה ל-Cloud Run
ה-MCP Toolbox מבצע הפשטה של מקורות הנתונים הרבים שלנו, ומאפשר לאפליקציה שלנו לאחזר ולכתוב נתונים באופן אחיד.
התקנה מקומית של MCP Toolbox
- ב-Cloud Shell, עוברים לתיקייה
toolbox-implementation:cd next-26-sessions/BRK2-149-multidb-ecommerce/toolbox-implementation - מורידים את הקובץ הבינארי של MCP Toolbox והופכים אותו לקובץ הפעלה:
export VERSION=0.29.0 curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox chmod +x toolbox
הגדרת הקובץ tools.yaml
צריך להגדיר את ההפשטות עבור AlloyDB, MongoDB ו-BigQuery. קובץ tools.yaml אומר ל-MCP Toolbox איך לתקשר אחד עם השני.
- יוצרים ועורכים את הקובץ
tools.yamlבאמצעות העורך המוטמע: אפשר למצוא את קובץcloudshell edit tools.yamltools.yamlהמלא במאגר GitHub. מעתיקים את התוכן שלו לקובץtools.yamlהחדש. - מעדכנים את המארח, המשתמש, הסיסמאות, מזהי הפרויקטים ומחרוזות החיבור כך שיתאימו לתשתית שהקציתם בשלבים הקודמים:
מסד נתונים
שדה
ערך לדוגמה
AlloyDB/BigQuery
project_idYOUR_PROJECT_IDAlloyDB
regionus-central1AlloyDB
clusterecommerce-clusterAlloyDB
instanceecommerce-cluster-primaryAlloyDB
databasepostgresAlloyDB
passwordalloydbMongoDB
connection_stringmongodb+srv://store-user:storeuser@ecommerce-cluster.urcxr6q.mongodb.net
הענקת תפקידים לחשבון השירות של Compute עבור MCP Toolbox
אנחנו מקצים תפקידים לחשבון השירות של Compute שמשמש את ערכת הכלים שלנו. הפעולה הזו מתבצעת כדי לאפשר ל-MCP Toolbox לגשת ל-AlloyDB.
- עוברים אל IAM and admin (ניהול הרשאות גישה).
- לוחצים על הענקת גישה.
- בשדה New principals, מזינים את חשבון השירות שמוגדר כברירת מחדל של Compute, שנקרא
YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com. מחליפים אתYOUR_PROJECT_NUMBERבמספר הפרויקט ב-Google Cloud. - לוחצים על בחירת תפקיד.
- מחפשים את התפקיד BigQuery Data Editor ובוחרים אותו.
- לוחצים על Add another role ובוחרים את התפקיד AlloyDB Client.
- לוחצים על Add another role ובוחרים את התפקיד Service Usage Consumer.
- לוחצים על Add another role ובוחרים את התפקיד Storage Object Viewer.
- לוחצים על שמירה.
בדיקת ממשק המשתמש של הכלי
- בטרמינל של Cloud Shell, מריצים את ארגז הכלים באופן מקומי כדי להציג את ממשק המשתמש:
./toolbox --ui - פותחים את התצוגה המקדימה באינטרנט ב-Cloud Shell ביציאה 5000 ועוברים לדף הכלים. לדוגמה, בהתאם לכתובת ה-URL של הסשן, אפשר לראות אותה בכתובת:
https://5000-cs-71152278760-default.cs-asia-southeast1-cash.cloudshell.dev/ui
ממשק המשתמש של כלי ה-MCP נראה כך:

פריסה ב-Cloud Run
פורסים את MCP Toolbox ב-Cloud Run כדי להפוך אותו לשירות מנוהל ומאובטח שהאפליקציה יכולה להשתמש בו כדי לשלוח שאילתות למסדי הנתונים. כדי להגן על פרטי החיבור הרגישים, נאחסן את ההגדרה ב-Secret Manager.
- פותחים סשן חדש ב-Cloud Shell.
- עוברים לתיקייה
toolbox-implementation:cd next-26-sessions/BRK2-149-multidb-ecommerce/toolbox-implementation - מעלים את קובץ ההגדרות
tools.yamlאל Google Secret Manager: הערה: כדי להוסיף גרסה חדשה לסוד הקיים, משתמשים בפקודה הבאה:gcloud secrets create tools --data-file=tools.yamlgcloud secrets versions add tools --data-file=tools.yaml - פריסה באמצעות קובץ האימג' הציבורי של קונטיינר MCP Toolbox:
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:0.29.0 export PROJECT_ID=$(gcloud config get-value project) gcloud run deploy toolbox \ --image $IMAGE \ --region us-central1 \ --service-account $(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --set-secrets "/app/tools.yaml=tools:latest" \ --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080","--ui" \ --allow-unauthenticated - אחרי הפריסה, רושמים את כתובת ה-URL של שירות Cloud Run שמופיעה. הוא אמור להיראות כך:
https://toolbox-*********-uc.a.run.app/ui
9. הגדרת אפליקציית המסחר האלקטרוני ופריסה ב-Cloud Run
אחרי שמריצים את מסדי הנתונים ופורסים את האבסטרקציה של MCP Toolbox, אפשר להריץ את אפליקציית האינטרנט של Flask.
כדי להציג את קטלוג המוצרים, אפליקציית Flask מעבדת את הנתונים באמצעות השלבים הבאים:
- אחזור נתוני ליבה: אחזור הרשימה המלאה של המוצרים מ-AlloyDB (
list_products_core). - אחזור פרטים מורחבים: אחזור כל פרטי המוצרים מ-MongoDB (
list_all_product_details). - שילוב רשימות: שרשור של שתי הרשימות.
- הוספת מדיה: מוסיף את כתובת ה-URL של התמונה ב-Cloud Storage לכל פריט.
יצירת נתיב אפליקציה של מנוע נימוקים
כדי לאתחל ולרשום סוכן AI באמצעות מנוע הנימוקים של Vertex AI מבית Google Cloud, מריצים את הפקודה הבאה:
- בטרמינל של Cloud Shell, עוברים לתיקייה
BRK2-149-multidb-ecommerce.cd next-26-sessions/BRK2-149-multidb-ecommerce - מריצים את הקובץ requirements.txt כדי להתקין את יחסי התלות
pip install -r requirements.txt - מריצים את הסקריפט
agentengine.pyכדי ליצור את נתיב האפליקציה של מנוע הנימוקים:python agentengine.py
הפלט ייראה כך:
projects/991742412753/locations/us-central1/reasoningEngines/4933254136889081856
הגדרת משתני הסביבה
- יוצרים קובץ
.envועורכים אותו:cloudshell edit .env - מחליפים את הערכים בחיבורי מסד הנתונים הספציפיים ובכתובת ה-URL החדשה של Cloud Run Toolbox:
# 1. MongoDB Connection String MONGODB_CONNECTION_STRING="mongodb+srv://<db_user>:<db_password>@cluster0.mongodb.net" # 2. MCP Toolbox Server Location # Must match the address where you run the toolbox server MCP_TOOLBOX_SERVER_URL="https://toolbox-*********-uc.a.run.app" # 3. Google Cloud Storage Bucket Name GCS_PRODUCT_BUCKET="ecommerce-app-images" # 4. Fallback image URL FALLBACK_IMAGE_URL="https://storage.googleapis.com/ecommerce-media-bold-circuit-492711-n9/fallback.jpg" # 5. Google Gen AI Vertex AI flag GOOGLE_GENAI_USE_VERTEXAI=TRUE # 6. Project ID PROJECT_ID=codelab-project-491117 # 7. Google Cloud Location of AlloyDB, BigQuery databases GOOGLE_CLOUD_LOCATION=us-central1 # 8. Reasoning engine application path APP_NAME=projects/991742412753/locations/us-central1/reasoningEngines/4933254136889081856 # 9. Model ID MODEL=gemini-1.5-flash-lite
פריסת חזית האתר ב-Cloud Run
- כדי להשלים את הארכיטקטורה, פורסים את אפליקציית האינטרנט ב-Cloud Run:
מחליפים את הערכים הבאים:gcloud run deploy polyglot --source . --platform managed \ --region us-central1 \ --allow-unauthenticated \ --set-env-vars \ MONGODB_CONNECTION_STRING="<MONGODB_CONNECTION_STRING>", \ MCP_TOOLBOX_SERVER_URL="<MCP_TOOLBOX_SERVER_URL>", \ GCS_PRODUCT_BUCKET="<GCS_PRODUCT_BUCKET>", \ FALLBACK_IMAGE_URL="<FALLBACK_IMAGE_URL>", \ GOOGLE_GENAI_USE_VERTEXAI=TRUE, \ PROJECT_ID="YOUR_PROJECT_ID", \ GOOGLE_CLOUD_LOCATION=us-central1, \ APP_NAME="<YOUR_REASONING_ENGINE_APP_PATH>", \ MODEL="gemini-1.5-flash-lite"YOUR_PROJECT_ID: מזהה הפרויקט ב-Google Cloud.-
YOUR_REASONING_ENGINE_APP_PATH: הפלט מהרצתpython agentengine.py, לדוגמה,projects/991742412753/locations/us-central1/reasoningEngines/4933254136889081856. -
MCP_TOOLBOX_SERVER_URL: כתובת ה-URL של שרת ארגז הכלים של ה-MCP, לדוגמהhttps://toolbox-*********-uc.a.run.app. -
GCS_PRODUCT_BUCKET: השם של קטגוריית Google Cloud Storage, לדוגמהecommerce-app-images. -
MONGODB_CONNECTION_STRING: מחרוזת החיבור למסד הנתונים שלכם ב-MongoDB, לדוגמהmongodb+srv://store-user:storeuser@ecommerce-cluster.g8vaekh.mongodb.net -
FALLBACK_IMAGE_URL: כתובת ה-URL של תמונת הגיבוי, לדוגמהhttps://storage.googleapis.com/ecommerce-app-images/fallback.jpg
הבקשה שלך פורסמה! פותחים את כתובת ה-URL של השירות שסופקה על ידי Cloud Run כדי לראות את קטלוג המסחר האלקטרוני של Multidb. כתובת ה-URL תהיה דומה ל-https://polyglot-*********-uc.a.run.app/.
10. סקירת האפליקציה
- לוחצים על קטלוג מוצרים כדי לראות את כל המוצרים.

- לוחצים על סמל של מוצר כדי לראות את פרטי המוצר. אפשר לראות שהתמונות מגיעות מ-Cloud Storage, פרטי המוצרים מגיעים מ-MongoDB ומלאי המוצרים מגיע מ-AlloyDB.

- אינטראקציה עם קטלוג המוצרים כדי ליצור תצוגות ופעולות כתיבה מדומה שנשלחות אל MongoDB.
- לוחצים על ETL וניתוח נתונים כדי לראות את ניתוח הנתונים של המוצר. תראו שהניתוח של המוצר נשלף מ-BigQuery.

- לוחצים על הכרטיסייה סוכן AI כדי ליצור אינטראקציה עם סוכן ה-AI. אפשר לשאול שאלות בשפה טבעית, למשל:
I'm planning a high-altitude photography trip. Show me some weather-resistant backpacks similar in style to aero glow pro but without any leather components. Also, let me know if they are actually in stock and if other photographers have complained about the strap durability in the reviews.
אפשר לראות שתוצאת החיפוש היא בדיוק מה שביקשנו – תרמיל ללא רכיבי עור, שנמצא במלאי ושאין ביקורות לגבי העמידות של הרצועות שלו.

11. הסרת המשאבים
כדי להימנע מחיובים שוטפים בחשבון Google Cloud, מוחקים את המשאבים שנוצרו במהלך ה-codelab הזה.
מריצים את הפקודות הבאות ב-Cloud Shell:
gcloud run services delete toolbox --region us-central1 --quiet
gcloud run services delete multi-db-app --region us-central1 --quiet
bq rm -r -f -d $PROJECT_ID:ecommerce_analytics
gcloud storage rm --recursive gs://ecommerce-app-images
gcloud alloydb clusters delete ecommerce-cluster --region us-central1 --force --quiet
לחלופין, כדי למחוק את כל הפרויקט בענן של Google ואת כל המשאבים שלו, מריצים את הפקודה הבאה:
gcloud projects delete $PROJECT_ID
12. מזל טוב
מעולה! יצרתם בהצלחה ארכיטקטורת Multidb חוצת-ענן.
הדגמתם איך MCP Toolbox משמש כדבק הארכיטקטוני לאפליקציה מודרנית וייעודית. התאמת מסד הנתונים הנכון לעבודה הנכונה מאפשרת:
- כתיבת נתונים גמישה: MongoDB ליומני אירועים.
- עקביות טרנזקציונלית: ב-AlloyDB יש עקביות טרנזקציונלית כדי לשמור על שלמות הנתונים.
- ניתוח נתונים ברמה גבוהה: BigQuery לבינה עסקית.
- פיתוח מאוחד: קצה עורפי יחיד של Python שמבצע הפשטה של כל המורכבות באמצעות MCP Toolbox.
מסמכים לדוגמה
מידע נוסף על מוצרים קשורים של Google Cloud ועל סדנאות ה-codelab האלה:
- AlloyDB AI: קדימה, מתחילים: הטמעת וקטורים באמצעות AlloyDB AI
- AlloyDB AI: הטמעות מולטי-מודאליות ב-AlloyDB
- MCP Toolbox: התקנה והגדרה של MCP Toolbox for Databases ב-AlloyDB
למידע נוסף על המוצרים שבהם נעשה שימוש בסדנת ה-Codelab הזו, אפשר לעיין במקורות הבאים: