במדריך הזה מוסבר איך להגדיר את QueryData ב-Cloud SQL ל-MySQL ולהשתמש בו באמצעות Google Cloud המסוף, ואיך לשלב אותו באפליקציה. במאמר הזה מוסבר איך ליצור קובץ של קבוצת הקשר, ליצור קבוצת הקשר שמשתמשת בקובץ של קבוצת הקשר, להשתמש ב-MCP Toolbox כדי לקרוא ל-QueryData API כדי ליצור שאילתות SQL לשאלות בשפה טבעית ולשלב אותה באפליקציה.
מידע נוסף זמין במאמר סקירה כללית על QueryData.
מטרות
- יוצרים טבלאות במסד הנתונים ומאכלסים אותן בנתונים.
- יוצרים קובץ של קבוצת הקשר באמצעות סוכן הנדסת ההקשר.
- יוצרים קבוצה של הקשרים ומעלים קובץ של קבוצת הקשרים.
- בודקים את QueryData ויוצרים שאילתות SQL ב-Studio.
- משלבים את QueryData עם האפליקציה באמצעות הכלי Gemini Data Analytics QueryData ב-MCP Toolbox.
- הוספת ביסוס לתשובות של מודלים גדולים של שפה (LLM) באמצעות שאילתות לחיפוש ערכים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
משתמשים חדשים ב- Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.
כדי להימנע מחיובים נוספים, מוחקים את המשאבים שיצרתם כשמסיימים את המשימות שמתוארות במסמך הזה. מידע נוסף זמין במאמר בנושא הסרת המשאבים.
לפני שמתחילים
לפני שיוצרים קבוצת הקשרים, צריך לוודא שמתקיימות הדרישות המוקדמות הבאות.
הפעלת שירותים נדרשים
מפעילים את השירותים הבאים בפרויקט:הכנת מכונה של Cloud SQL
- מוודאים שיש לכם גישה למופע קיים של Cloud SQL או יוצרים מופע חדש. מידע נוסף זמין במאמר יצירת מופעים ל-Cloud SQL.
- מוודאים שיוצרים מסד נתונים במופע שבו ייצרו את הטבלאות. מידע נוסף זמין במאמר יצירת מסד נתונים במכונת Cloud SQL.
תפקידים והרשאות נדרשים
- מוסיפים חשבון שירות או משתמש IAM ברמת המופע. מידע נוסף זמין במאמר בנושא הוספת קשר בין מדיניות IAM לבין משתמש, חשבון שירות או קבוצה.
- מקצים את התפקידים
cloudsql.studioUser, cloudsql.instanceUserו-geminidataanalytics.queryDataUserלמשתמש IAM או לחשבון השירות ברמת הפרויקט. מידע נוסף זמין במאמר הוספת קשירת מדיניות IAM לפרויקט. - משתמש עם הרשאות אדמין צריך לתת הרשאות למסד הנתונים למשתמש IAM או לחשבון השירות.
GRANT SELECT PRIVILEGES ON * TO "IAM_USERNAME";.
מידע נוסף זמין במאמר איך נותנים הרשאות למסד הנתונים למשתמש IAM או לחשבון שירות ספציפיים.
מתן הרשאה ל-executesql למופע Cloud SQL
כדי להעניק את ההרשאה executesql למכונת Cloud SQL ולהפעיל את Cloud SQL Data API, מריצים את הפקודה הבאה:
gcloud config set project PROJECT_ID gcloud components update gcloud beta sql instances patch INSTANCE_ID --data-api-access=ALLOW_DATA_API
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
INSTANCE_ID: המזהה של מופע Cloud SQL.
יצירת הסכימה והטבלאות flights ו-airports
בקטע הזה יוצרים את טבלאות מסד הנתונים flights ו-airports למדריך הזה.
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות אימות של ניהול זהויות והרשאות גישה (IAM).
לוחצים על אימות. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
לוחצים על New SQL editor tab או על New tab כדי לפתוח כרטיסייה חדשה.
כדי ליצור את הטבלה ואת הסכימה
airports, מריצים את הצהרת ה-SQL הבאה:CREATE TABLE IF NOT EXISTS airports ( id INT PRIMARY KEY, iata TEXT, name TEXT, city TEXT, country TEXT );יוצרים את הטבלה
flightsואת הסכימה:CREATE TABLE IF NOT EXISTS flights ( id INT PRIMARY KEY, airline VARCHAR(10), flight_number INT, departure_airport VARCHAR(5), arrival_airport VARCHAR(5), departure_time TIMESTAMP, arrival_time TIMESTAMP, departure_gate VARCHAR(10), arrival_gate VARCHAR(10) );
מאכלסים את הטבלאות flights ו-airports
בקטע הזה, מאכלסים את הטבלאות flights ו-airports באמצעות סקריפטים של SQL שמופיעים כאן.
מאכלסים את הטבלה
airports.מאכלסים את הטבלה
flights.מריצים את השאילתה הבאה כדי לוודא שהטבלאות מכילות נתונים:
SELECT * FROM flights LIMIT 10; SELECT * FROM airports LIMIT 10;
הכנת מסד הנתונים לחיפושים של ערכים
כדי להשתמש בחיפושים סמנטיים ובחיפושי ערכים של טריגרמות, צריך להגדיר את מכונת Cloud SQL ל-MySQL כך שתתמוך בהטמעות וקטוריות ובהוספת אינדקסים של n-גרמות.
כדי לאפשר למכונת Cloud SQL ל-MySQL לבצע חיפושים סמנטיים של ערכים, צריך להפעיל את הדגלים הבאים.
מפעילים את התכונה הניסיונית
cloudsql_vector.gcloud sql instances patch INSTANCE_NAME --database-flags=cloudsql_vector=onמפעילים את התכונה הניסיונית
enable-google-ml-integrationכדי לאפשר למכונת Cloud SQL ל-MySQL להשתלב עם Vertex AI.gcloud sql instances patch INSTANCE_NAME --enable-google-ml-integrationיצירת עמודת וקטורים לאחסון הטמעות של ערים
ALTER TABLE `airports` ADD COLUMN `city_embedding` VECTOR(768);יצירה ואחסון של הטמעות וקטוריות לשמות של ערים
UPDATE `airports` SET `city_embedding` = mysql.ml_embedding('text-embedding-005', `city`) WHERE `city` IS NOT NULL;
כדי לאפשר למכונת Cloud SQL ל-MySQL לבצע חיפושים של ערכי טריגרם, מבצעים את השלבים הבאים.
מפעילים את התכונה הניסיונית
ngram_token_size.gcloud sql instances patch INSTANCE_NAME --database-flags=ngram_token_size=3יצירת אינדקס FULLTEXT להתאמת טריגרמות בשם שדה התעופה
CREATE FULLTEXT INDEX `idx_ngram_airports_name` ON `airports`(`name`) WITH PARSER ngram;
יצירת קבוצה של הקשרים ב-Studio
בקטע הזה, יוצרים קבוצת הקשר בשם flights-assistant. קבוצת ההקשר הזו לא כוללת קובץ של קבוצת הקשר שהועלה אליה.
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות אימות IAM.
בחלונית Explorer, ליד Context sets, לוחצים על View actions.
לוחצים על יצירת קבוצת הקשרים.
בשדה Context set name, מזינים
flights-assistant.לוחצים על יצירה.
בדיקת QueryData ב-Studio
בקטע הזה, תשתמשו בקבוצת ההקשר flights-assistant כדי לשאול שאלות בשפה טבעית וליצור שאילתת SQL. מכיוון שלא הועלה לקבוצת ההקשרים קובץ הגדרת הקשר, גם אחרי ששואלים שאלה עם הקשר כמו nighttime traffic, הכלי QueryData יוצר שאילתה לא אופטימלית.
- בחלונית Explorer, לצד קבוצת ההקשר, לוחצים על View actions (הצגת פעולות).
- לוחצים על בדיקת הגדרת ההקשר.
- בעורך השאילתות, לוחצים על יצירת SQL באמצעות QueryData עם: flights-assistant.
מזינים את השאלה הבאה בשפה טבעית כדי ליצור שאילתת SQL, ולוחצים על יצירה.
Find flights from SFO to JFK.בודקים את שאילתת ה-SQL. שימו לב שהפונקציה QueryData יוצרת את ה-SQL הנכון לשאלה הברורה הזו.
SELECT * FROM "flights" WHERE "departure_airport" = 'SFO' AND "arrival_airport" = 'JFK';בחלון Generate SQL using QueryData with: flights-assistant (יצירת SQL באמצעות QueryData עם: flights-assistant), לוחצים על Edit (עריכה).
מזינים את השאלה הבאה בשפה טבעית כדי ליצור שאילתת SQL, ולוחצים על עדכון.
Tell me flights that can help me beat nighttime traffic if traveling from New Yorkמסד הנתונים לא מבין את המונח תנועה
nighttime. יכול להיות שהדבר ימנע את יצירת שאילתת ה-SQL או יגרום ליצירת שאילתה שמתעלמת מהמונח, כמו שמוצג בשאילתה הבאה.-- The database schema does not contain information about traffic. -- Returning all flights departing from New York airports. SELECT f.airline, f.flight_number, a.name AS departure_airport_name, f.departure_time, b.name AS arrival_airport_name, f.arrival_time FROM flights AS f JOIN airports AS a ON f.departure_airport = a.iata JOIN airports AS b ON f.arrival_airport = b.iata WHERE a.city = 'New York' ORDER BY f.departure_time;בחלון Generate SQL using QueryData with: flights-assistant (יצירת SQL באמצעות QueryData עם: flights-assistant), לוחצים על Edit (עריכה).
מזינים את השאלה הבאה בשפה טבעית כדי ליצור שאילתת SQL, ולוחצים על עדכון.
Find flights heading into Manhattanהלוגיקה של קבוצת ההקשר יוצרת שאילתה כדי למצוא שדה תעופה עם השם 'מנהטן'. מכיוון שאין שדה תעופה או עיר כאלה במסד הנתונים, השאילתה לא תחזיר שורות.
SELECT `skybot`.`flights`.* FROM `skybot`.`flights` JOIN `skybot`.`airports` ON `skybot`.`flights`.`arrival_airport` = `skybot`.`airports`.`iata` WHERE `skybot`.`airports`.`city` = 'Manhattan';
יצירת הקשר לקבוצת ההקשרים
בקטע הזה יוצרים קובץ הקשר שעוזר לשפר את יכולות השאילתות של קבוצת ההקשר.מגדירים את הסביבה
לפני שמתחילים ליצור הקשר, צריך להכין את הסביבה.
כדי להגדיר את הסביבה, פועלים לפי השלבים הבאים:
- מתקינים את Antigravity CLI. מידע נוסף זמין במאמר מדריך למתחילים ל-Antigravity CLI.
- מתקינים את Google Cloud CLI.
הגדרת Application Default Credentials (ADC). מריצים את הפקודות הבאות בטרמינל כדי לבצע אימות ולבחור את הפרויקט:
gcloud auth application-default loginמתקינים את הפלאגין של סוכן הנדסת ההקשר, שכולל תהליכי עבודה ליצירת הקשר. מחליפים את VERSION בגרסה שפורסמה הנדרשת:
agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/VERSIONמוודאים שהגרסה שמתקינים היא
v0.6.0ואילך. כדי לעדכן את הפלאגין של סוכן הנדסת ההקשר, מסירים את הגרסה הישנה ומתקינים את הגרסה החדשה:agy plugin uninstall google-cloud-db-context-engineering agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/NEW_VERSIONבטרמינל, מפעילים את antigravity CLI.
agyמגדירים חיבור למסד נתונים. התוסף דורש חיבור למסד נתונים כדי ליצור הקשר, והחיבור הזה נתמך על ידי MCP Toolbox ומוגדר בקובץ ההגדרות tools.yaml.
כדי ליצור את קובץ ההגדרות
tools.yamlבספרייה הנוכחית, מזינים הנחיה כמוHelp me set up the database connectionופועלים לפי ההוראות שמופיעות במיומנות. מידע נוסף על קובץtools.yamlזמין במסמכי העזרה של MCP Toolbox.כדי לטעון מחדש את התצורה אחרי שיוצרים את הקובץ
tools.yaml, מריצים את הפקודה הבאה ב-Antigravity CLI ופועלים לפי ההוראות לטעינה מחדש של שרת ה-MCP של ארגז הכלים:/mcpבוחרים באפשרות
toolbox.בוחרים באפשרות
Restart.מוודאים שערכת הכלים של MCP והפלאגין של סוכן הנדסת ההקשר מחוברים ומוכנים לשימוש.
/mcp
יצירת הקשר של התבנית
בקטע הזה, כדי לפתור את הבעיה מהקטע הקודם שבה QueryData לא זיהה את המונח nighttime traffic, מגדירים את המונח בקובץ של קבוצת ההקשר כטראפיק שמתרחש בין 5:00 PM ל-7:00 PM.
כדי ליצור הקשר של התבנית:
מזינים את ההנחיה הבאה במעטפת האג'נטית:
Generate a template for the question: "Tell me flights that can help me beat nighttime traffic if traveling from New York" with the following SQL query: SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;הסוכן ממיר את הקלט שלכם לפורמט ספציפי שמשפר את הביצועים של קבוצת ההקשרים במגוון רחב של שאילתות משתמשים. מידע נוסף זמין במאמר סקירה כללית על קבוצות הקשרים.
בודקים את תבנית השאילתה שנוצרה. אפשר לשמור את תבנית השאילתה כקובץ הקשר חדש של הסוכן או לצרף אותה לקובץ הקשר הקיים של הסוכן.
נותנים לסוכן הנחיה
save it to contextset.json. הסוכן יוצר את הקובץ באותה תיקייה, עם התוכן הבא:{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = ? AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?" } } ] }
יצירת הקשר לחיפוש ערכים
בקטע הזה, יוצרים הקשר לחיפוש ערכים כדי לעזור ללוגיקה של הגדרת ההקשר למפות ביטויי ערכים לערכים ספציפיים שמאוחסנים בעמודות של מסד הנתונים. לדוגמה, אם משתמש מבקש "טיסות למנהטן", קודם מנהטן מחולץ כביטוי ערך, והחיפוש של הדמיון הסמנטי משייך את מנהטן ל "ניו יורק", שמאוחסן בעמודה airports.city.
כדי ליצור הקשר לחיפוש ערכים, פועלים לפי השלבים הבאים:
מזינים את ההנחיה הבאה במעטפת האג'נטית:
מזינים
mysqlכדי לבחור ב-MySQL כמסד הנתונים.מזינים את גרסת MySQL שבה רוצים להשתמש. בוחרים באפשרות
defaultכדי לבחור ב-MySQL 8.0.Generate a trigram value search on table "airports" for column "name" with concept "airport name". Then generate a semantic value search on table "airports" for column "city" with concept "airport city" using embedding column "city_embedding".בודקים את הגדרת החיפוש של הערך שנוצרה. אפשר לשמור את הגדרת החיפוש של הערך כקובץ חדש של הגדרות הקשר, או להוסיף אותה לקובץ קיים של הגדרות הקשר.
נותנים הנחיה לסוכן
Append the context to context_set.json. הפעולה הזו מוסיפה את הגדרת החיפוש של הערך לקובץ ההקשר שנוצר בקטע הקודם.מזינים את מופע מסד הנתונים ואת שם מסד הנתונים שעבורם נוצר קובץ הגדרת ההקשר.
קובץ ההקשר הקיים מתעדכן עם הגדרת החיפוש של הערך, עם התוכן הבא:
{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = ? AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?" } } ], "facets": [], "value_searches": [ { "query": "SELECT * FROM ( WITH TrigramMetrics AS ( SELECT T.`name` AS original_value, MATCH(T.`name`) AGAINST($value IN NATURAL LANGUAGE MODE) AS raw_score FROM `airports` AS T WHERE MATCH(T.`name`) AGAINST($value IN NATURAL LANGUAGE MODE) > 0 ORDER BY raw_score DESC LIMIT 10 ), NormalizationParams AS ( SELECT MAX(raw_score) AS max_score FROM TrigramMetrics ) SELECT original_value AS value, 'name' AS `columns`, 'airport city' AS concept_type, (CASE WHEN n.max_score > 0 THEN (1 - (m.raw_score / n.max_score)) ELSE 0 END) AS distance, JSON_OBJECT() AS context FROM TrigramMetrics m, NormalizationParams n) AS wrapped_query ", "concept_type": "airport city", "description": null }, { "query": "SELECT * FROM ( WITH search_embedding AS ( SELECT mysql.ml_embedding('text-embedding-005', $value) AS val ) SELECT T.`city` AS value, 'city' AS `columns`, 'airport name' AS concept_type, COSINE_DISTANCE(T.`city_embedding`, search_embedding.val) AS distance, JSON_OBJECT() AS context FROM `airports` AS T, search_embedding WHERE T.`city_embedding` IS NOT NULL) AS wrapped_query ", "concept_type": "airport name", "description": null } ] }
העלאת קובץ של קבוצת הקשר ל-QueryData
בקטע הזה, תעלו את קובץ הגדרת ההקשר אל QueryData, כדי לשפר את היכולות של QueryData ליצירת SQL במסד הנתונים שלכם.
כדי להעלות את ההקשר, מבצעים את הפעולות הבאות:
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות אימות של ניהול זהויות והרשאות גישה (IAM).
בחלונית Explorer, לצד Context sets (קבוצות של הקשרים), לוחצים על סמל Actions (פעולות) ().
לוחצים על עריכת קבוצת ההקשרים.
אופציונלי: עורכים את תיאור קבוצת ההקשרים.
בקטע העלאת קובץ של קבוצת הקשרים, לוחצים על עיון ובוחרים את קובץ קבוצת ההקשרים שנוצר קודם.
לוחצים על Save.
יצירת שאילתת SQL באמצעות QueryData
בקטע הזה, תשתמשו בקובץ ההקשר שהעליתם כדי לשאול שאלות בשפה טבעית. כך תוכלו לוודא שהכלי QueryData מבין ומחיל נכון הגדרות של מונחים כמו nighttime traffic וביטויים קשורים אחרים
כדי ליצור שאילתות SQL, פועלים לפי השלבים הבאים:
- בחלונית Explorer, ליד קבוצת ההקשר, לוחצים על View actions (הצגת פעולות).
- לוחצים על בדיקת הגדרת ההקשר.
- בעורך השאילתות, לוחצים על יצירת SQL באמצעות QueryData עם: עוזר לטיסות.
מזינים את השאלה הבאה בשפה טבעית כדי ליצור שאילתת SQL, ולוחצים על יצירה.
Tell me flights that can help me beat nighttime traffic if traveling from New Yorkשאילתת ה-SQL שנוצרת נראית כך:
SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;זו אותה שאלה שהוספתם להקשר של QueryData. אפשר לראות שעכשיו QueryData יכול לפרש בצורה מדויקת את המונח
nighttime traffic.למרות שההקשר נובע משאלה מסוימת, הכלי QueryData משתמש בו כדי לשפר את יצירת ה-SQL למגוון רחב של שאלות דומות.
בחלון Generate SQL using QueryData with: flights-assistant (יצירת SQL באמצעות QueryData עם: flights-assistant), לוחצים על Edit (עריכה).
מזינים את השאלה הבאה (או שאלה דומה) כדי ליצור שאילתת SQL, ולוחצים על עדכון.
What are the flights that can help me avoid evening traffic if departing from Bostonמכיוון שהשאלה מחליפה את המונח
nighttime trafficבמונח דומה,evening traffic, QueryData מספקת תשובה עקבית לשאלה הזו על ידי יישום אותה פרשנות.שאילתת ה-SQL שנוצרת נראית כך:
-- What are the flights that can help me avoid evening traffic if departing from Boston SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'Boston' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;בחלון Generate SQL using QueryData with: flights-assistant (יצירת SQL באמצעות QueryData עם: flights-assistant), לוחצים על Edit (עריכה).
בחלון Generate SQL using QueryData with: flights-assistant (יצירת SQL באמצעות QueryData עם: flights-assistant), לוחצים על Edit (עריכה).
מזינים את השאלה הבאה כדי ליצור שאילתת SQL ולוחצים על עדכון.
Find flights heading into Manhattanשאילתת ה-SQL שנוצרת נראית כך:
SELECT * FROM `skybot`.`flights` AS t1 INNER JOIN `skybot`.`airports` AS t2 ON t1.`arrival_airport` = t2.`iata` WHERE t2.`city` = 'New York';שימו לב שעכשיו QueryData יכול לפרש בצורה מדויקת את הקשר בין 'מנהטן' לבין 'ניו יורק' במסד הנתונים באמצעות התאמה סמנטית.
שילוב של QueryData עם האפליקציה
בקטע הזה, יוצרים סוכן QueryData לאפליקציה לחיפוש טיסות. הסוכן QueryData מספק ממשק שיחה לטבלאות flights ו-airports שיצרתם קודם. בנוסף, נסביר איך ליצור את סוכן QueryData ולשלב אותו באפליקציה באמצעות הערכה לפיתוח סוכנים (ADK), הכלי QueryData MCP של Gemini Data Analytics וקבוצת הקשר כדי לשפר את איכות התשובות.
מורידים את MCP Toolbox מגרסה 0.31.0 ואילך. MCP toolbox חושף את סוכן QueryData ככלי שאפליקציות יכולות להתחבר אליו. ערכת הכלים של MCP שונה מסוכן הנדסת ההקשר שהתקנתם קודם, שמייצר הקשר.
מגדירים Application Default Credentials (ADC).
gcloud auth application-default loginמאתרים את מזהה קבוצת ההקשר. מידע נוסף על איתור מזהה ערכת ההקשר
יוצרים את ההגדרה
tools.yamlכדי להתחבר לסוכן QueryData באמצעות MCP Toolbox. מידע נוסף זמין במאמרים בנושא מקור נתונים של Gemini Data Analytics ובנושא הכלי QueryData של Gemini Data Analytics.kind: source name: gda-api-source type: cloud-gemini-data-analytics projectId: "PROJECT_ID" --- kind: tool name: cloud_gda_query_tool type: cloud-gemini-data-analytics-query source: gda-api-source description: Use this tool to send natural language queries to the Gemini Data Analytics API and receive SQL, natural language answers, and explanations. location: "REGION_ID" context: datasourceReferences: cloudSqlReference: databaseReference: engine: "MYSQL" projectId: "PROJECT_ID" region: "REGION_ID" instanceId: "INSTANCE_ID" databaseId: "DATABASE_ID" agentContextReference: contextSetId: "CONTEXT_SET_ID" generationOptions: generateQueryResult: true generateNaturalLanguageAnswer: true generateExplanation: true generateDisambiguationQuestion: trueמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION_ID: האזור של מופע Cloud SQL (לדוגמה, us-central1). -
INSTANCE_ID: המזהה של מופע Cloud SQL. -
DATABASE_ID: השם של מסד הנתונים שאליו רוצים להתחבר. -
CONTEXT_SET_ID: מזהה קבוצת ההקשר. מידע נוסף על איתור מזהה ערכת ההקשר
-
מריצים את שרת ה-MCP Toolbox עם הקובץ
tools.yaml../toolbox --config "tools.yaml"יצירת אפליקציית ADK שמפעילה את הכלי QueryData של Gemini Data Analytics באמצעות Python SDK של MCP Toolbox. מידע נוסף על השימוש ב-Python SDK של MCP Toolbox זמין במדריך למתחילים בנושא Toolbox. מידע נוסף על השימוש ב-Python ADK זמין במדריך למתחילים בנושא ADK.
- יוצרים ספרייה לאחסון האפליקציה, לדוגמה
flight-assistant-app. עוברים לספרייה
flight-assistant-app.mkdir flight-assistant-appcd flight-assistant-appמריצים את הפקודות הבאות בספרייה
flight-assistant-appכדי ליצור סביבה וירטואלית ולהתקין את הרכיבים הנדרשים.python3 -m venv .venvsource .venv/bin/activatepip install toolbox-corepip install google-genaipip install google-adkהגדרת סוכן ADK.
יוצרים סוכן ADK.
adk create my_agentבוחרים את המודל
gemini-2.5-flash.בוחרים באפשרות Google AI ומזינים את מפתח Gemini API. מידע נוסף על איתור מפתח API זמין במאמר שימוש במפתחות API של Gemini.
מחליפים את התוכן של הקובץ
agent.pyבקוד אפליקציה לדוגמה של Flight Data Assistant שמופיע בהמשך.from typing import cast from google.adk.agents.llm_agent import Agent from google.adk.agents.llm_agent import ToolUnion from toolbox_core import ToolboxSyncClient TOOLBOX_URL = "http://127.0.0.1:5000" INSTRUCTION = """ # ROLE You are a friendly and factual flight data assistant. Your goal is to help users find the best flights for their needs by providing accurate information with a helpful, professional tone. - use the Query Data Tool to answer the user's question, if the tool fails to generate a valid query, ask the user to clarify their question. # OPERATIONAL CONSTRAINTS - TOOL LIMITATION: You only have access to the Query Data Tool. Do not claim to have capabilities beyond what this tool provides. - TRANSPARENCY POLICY: Maintain a seamless user experience. Never mention that you are using a tool, querying a database, or generating SQL. Frame all responses as your own direct assistance. - SCOPE MANAGEMENT: If a user asks for something beyond your capabilities, politely state that you cannot perform that specific task. Guide the user towards what you can help with. # COMMUNICATION STYLE - Be concise and scannable when listing answers. - Maintain a helpful, professional persona. ===== # QUERY DATA TOOL Inputs: 1. query: A natural language formulation of a database query. Outputs: (all optional) 1. disambiguation_question: Clarification questions or comments where the tool needs the users' input. 2. generated_query: The generated query for the user query. 3. intent_explanation: An explanation for why the tool produced `generated_query`. 4. query_result: The result of executing `generated_query`. 5. natural_language_answer: The natural language answer that summarizes the `query` and `query_result`. Usage guidance: 1. If `disambiguation_question` is produced, then solicit the needed inputs from the user and try the tool with a new `query` that has the needed clarification. 2. If `natural_language_answer` is produced, use `intent_explanation` and `generated_query` to see if you need to clarify any assumptions for the user. 3. If the tool output indicates failure or empty results, explain that clearly using the provided reasoning. """ client = ToolboxSyncClient(TOOLBOX_URL) mcp_tool = client.load_tool("cloud_gda_query_tool") root_agent = Agent( model="gemini-2.5-flash", name="root_agent", instruction=INSTRUCTION, tools=cast(list[ToolUnion], [mcp_tool]), )
- יוצרים ספרייה לאחסון האפליקציה, לדוגמה
מריצים את הפקודות הבאות בספרייה
flight-assistant-appכדי להפעיל את האפליקציה ולגשת לשרת האינטרנט של ADK בכתובתhttp://127.0.0.1:8000.adk web --port 8000מזינים טקסט כלשהו, כמו
hello, כדי להתחיל אינטראקציה עם הסוכן.סוכן ה-ADK עונה על שאלות כלליות ומפעיל את כלי ה-MCP הנדרשים.
מזינים את השאלה הבאה שקשורה לטיסה.
How many flights depart from the west side?כדי לענות על השאלה הזו, מופעל כלי ה-MCP. עם זאת, המונח
the westהוא דו-משמעי ולא מציין שדות תעופה ספציפיים, ולכן הכלי MCP מחזיר שאלה להסרת דו-משמעות, והסוכן משתמש בה כדי ליצור תגובה.I cannot determine how many flights depart from the 'west side' as the database does not contain information about which airports are considered to be on the 'west side'. However, I can help you with questions like: 1. How many flights depart from a specific airport? 2. What are the departure airports for all flights? 3. How many flights depart from each airport? Would you like to rephrase your question based on these options?מזינים שאלה דומה לזו שבתבנית השאילתה שנוצרה לסוכן.
Help me find flights from San Francisco that avoid the evening rush hour.על סמך ההקשר של QueryData שנוסף קודם, כלי ה-MCP מבין ש-
evening trafficמתרחש בין השעות 17:00 ל-19:00. הכלי MCP מחזיר את הנתונים המשויכים לסוכן כדי שישתמש בהם ליצירת התשובה.Here are the flights departing from San Francisco that avoid the evening rush hour (defined as 5 PM to 7 PM): * UA 1532 departing at 05:50:00 * UA 1158 departing at 05:57:00 * CY 922 departing at 06:38:00 * OO 5441 departing at 07:08:00 * UA 616 departing at 07:14:00 * AA 24 departing at 07:14:00 * B6 434 departing at 08:00:00 * AA 242 departing at 08:18:00 * UA 1739 departing at 08:22:00 * OO 6336 departing at 08:32:00 * US 1784 departing at 08:47:00 * DL 1631 departing at 09:00:00 * DL 1106 departing at 09:06:00 * OO 5427 departing at 09:06:00 * CY 352 departing at 09:25:00מזינים שאלה על סמך סוג המושג שהוספתם בהקשר של הסוכן.
Find flights heading into Manhattanעל סמך הקשר של חיפוש הערך שנוסף קודם לכן, הסוכן מבין ש-
Manhattanמתייחס לעירNew Yorkומחזיר את הנתונים המשויכים כדי שהסוכן יוכל להשתמש בהם ליצירת התשובה.There are 6 flights heading into New York City, specifically arriving at JFK airport, which serves Manhattan. Here are the details for these flights: AA 24 from SFO, departing 2025-01-01 07:14:00 and arriving 2025-01-01 15:46:00. UA 758 from SFO, departing 2025-01-02 07:07:00 and arriving 2025-01-02 15:53:00. AA 24 from SFO, departing 2025-01-02 07:06:00 and arriving 2025-01-02 15:29:00. DL 2040 from SFO, departing 2025-01-02 15:09:00 and arriving 2025-01-02 23:20:00. DL 1370 from SFO, departing 2025-01-02 23:04:00 and arriving 2025-01-03 07:36:00. CY 34 from SFO, departing 2025-01-02 23:15:00 and arriving 2025-01-03 07:54:00.
שיפור הביצועים של הסוכן
ממשק המשתמש האינטרנטי של ADK מאפשר לבדוק את הבקשה והתגובה מכלי ה-MCP של Gemini Data Analytics QueryData. אפשר להשתמש בתשובה הזו כדי לבחון את התשובות של הכלי, כמו שאילתת SQL שנוצרה, קבוצת תוצאות, הסבר על הכוונה, שאלה להסרת דו-משמעות ותשובה בשפה טבעית, כדי לוודא שהתשובות של הסוכן נכונות.
לדוגמה, אם הזנתם קודם את הטקסט How many flights depart from the west side?, לוחצים על בועת הצ'אט של הסוכן. בכרטיסייה אירוע בחלונית הניווט הימנית, מרחיבים את functionResponse כדי לראות את התשובה הבאה.
"{"disambiguationQuestion": ["[NOT_ENOUGH_INFO] The database schema does not
contain information about which airports are on the 'west side'. Therefore, I
cannot determine how many flights depart from the west side.Possible alternative
questions: 1. How many flights depart from a specific airport? 2. What are the
departure airports for all flights? 3. How many flights depart from each
airport?"]}"
שיפור הדיוק של התשובה
כדי לשפר את הדיוק של התשובות שמתקבלות מהכלי Gemini Data Analytics QueryData, אפשר להוסיף הקשר נוסף. משתמשים בסוכן הנדסת ההקשר כדי ליצור הקשר, ואז מעלים את קובץ קבוצת ההקשר המעודכן לסוכן flights-assistant QueryData הקיים. מידע נוסף זמין במאמר בנושא ניהול של קבוצות הקשר ב-Data Agents Studio. המסוף מעבד באופן מיידי את ההקשר החדש אחרי שמעלים אותו, כך שאפשר לשפר את רמת הדיוק של הסוכן בלי שהאפליקציה תושבת.
כמה נציגים
בסביבת הפיתוח, אפשר לבצע בדיקות A/B בכמה הקשרים של סוכן QueryData על ידי הקצאת שמות שונים לכלים בקובץ tools.yaml. לדוגמה, אפשר ליצור הגדרות ייחודיות של tools.yaml על ידי הגדרת שני כלים של cloud-gemini-data-analytics-query עם שמות שונים, כמו cloud_gda_query_tool_v1 ו-cloud_gda_query_tool_v2. ההגדרה הזו מאפשרת לכם להטמיע לוגיקה של אפליקציה שבוחרת באופן פרוגרמטי את גרסת ההקשר הנדרשת על ידי בחירת שם הכלי המתאים.
בדוגמה הבאה tools.yaml אפשר לראות איך מגדירים כמה סוכני QueryData למקור מסד נתונים:
kind: source
name: gda-api-source
type: cloud-gemini-data-analytics
projectId: <var>PROJECT_ID</var>
---
kind: tool
name: cloud_gda_query_tool_v1
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
<var>DB_SOURCE</var>:
databaseReference: ...
agentContextReference:
contextSetId: "V1_YOUR_CONTEXT_SET_ID"
generationOptions: ...
---
kind: tool
name: cloud_gda_query_tool_v2
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
<var>DB_SOURCE</var>:
databaseReference: ...
agentContextReference:
contextSetId: "V2_YOUR_CONTEXT_SET_ID"
generationOptions: ...
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
V1_YOUR_CONTEXT_SET_ID: מזהה קבוצת ההקשר לגרסה 1. -
V2_YOUR_CONTEXT_SET_ID: מזהה קבוצת ההקשר לגרסה 2
הסרת המשאבים
בקטעים הבאים מוסבר איך למחוק את המשאבים והאובייקטים האלה.
מחיקת קבוצת ההקשרים
לפני שמוחקים את המופע, צריך למחוק את קבוצת ההקשר שיצרתם.
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Cloud SQL Studio.
נכנסים ל-Studio באמצעות אימות של ניהול זהויות והרשאות גישה (IAM).
בחלונית Explorer, לצד קבוצת ההקשר, לוחצים על View actions (הצגת פעולות).
בחלון מחיקת קבוצת הקשרים, מזינים
flight-assistantבתיבת האישור.לוחצים על אישור.
מחיקת המכונה
כשמוחקים את המופע שיצרתם בקטע לפני שמתחילים, נמחקים גם כל האובייקטים שיצרתם.
נכנסים לדף Cloud SQL במסוף Google Cloud .
בוחרים מופע מהרשימה.
לוחצים על Delete.
כדי לאשר שרוצים למחוק את המופע, מזינים את שם המופע ולוחצים על מחיקה.