קבוצת הקשר היא אוסף של מידע ספציפי למסד נתונים שמאפשר לכלים כמו QueryData ליצור שאילתות ברמת דיוק גבוהה. ערכות הקשר יכולות לכלול תבניות, היבטים וחיפושים של ערכים שעוזרים ל-QueryData להבין את סכימת מסד הנתונים ואת הלוגיקה העסקית של האפליקציות.
אלה מסדי הנתונים הנתמכים:
- AlloyDB ל-PostgreSQL
- Cloud SQL ל-MySQL
- Cloud SQL ל-PostgreSQL
- Spanner
- Firestore עם תאימות ל-MongoDB
מהן קבוצות הקשרים
כדי לבנות אפליקציות יעילות שמבוססות על סוכנים, כלים כמו QueryData צריכים להבין את הארגון של הנתונים והלוגיקה העסקית שלכם. אתם מספקים את המידע הזה בצורה של קבוצת הקשר.
מגדירים את ההקשר בקבצים שמכילים אובייקטים בפורמט JSON לכל סוג הקשר. אתם יכולים ליצור את קובצי ההקשר האלה בעזרת סוכן הנדסת ההקשר. לאחר מכן מעלים את קובץ ההקשר לערכת הקשר שיוצרים במסוף Google Cloud. התהליך הזה מאפשר לכלים כמו QueryData ללמוד את הסכימה הספציפית של מסד הנתונים ואת הלוגיקה העסקית של האפליקציה.
קובץ ההקשר נראה כך:
{
"templates": [
{
"nl_query": "Count prague loan accounts",
"sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
"intent": "How many accounts associated with loans are located in the Prague region?",
"manifest": "How many accounts associated with loans are located in a given city?",
"parameterized": {
"parameterized_intent": "How many accounts associated with loans are located in $1",
"parameterized_sql": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});",
}
}
],
"facets": [
{
"sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 10000 }",
"intent": "Average salary between 6000 and 10000",
"manifest": "Average salary between a given number and a given number",
"parameterized": {
"parameterized_intent": "Average salary between $1 and $2",
"parameterized_sql_snippet": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
}
}
],
"value_searches": [
{
"query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport IATA Code",
"description": "Exact match (standard MQL) for 3-letter airport codes"
},
{
"query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Regex match for partial airport names"
},
{
"query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Full-text search for airport names"
}
]
}
פורמט קובץ קבוצת הקשרים
קובץ של הגדרות הקשר מורכב מקבוצה שנבחרה בקפידה של תבניות, היבטים וחיפושי ערכים בפורמט JSON, שמנחים כלים כמו QueryData בתרגום שאלות בשפה טבעית לשאילתות למסד נתונים ספציפי. הגדרת ההקשר מבטיחה דיוק גבוה ביצירת שאילתות בשפת MQL (שפת שאילתות שתואמת ל-MongoDB) למבני שאילתות נפוצים.
כדי להשיג את רמת הדיוק הגבוהה ביותר, חשוב לוודא שההקשר שהוגדר מדויק ומקיף, וכולל את כל השאילתות הצפויות של האפליקציה.
אפשר ליצור קבוצות הקשר באזורים us-central1, us-east1, europe-west4 ו-asia-southeast1.
תבניות של שאילתות
תבניות של שאילתות הן אוסף של שאלות מייצגות בשפה טבעית עם שאילתות MQL תואמות. הם כוללים גם הסברים שמספקים נימוק דקלרטיבי ליצירת MQL משפה טבעית.
אובייקט של תבנית שאילתה נראה כך:
{
"templates": [
{
"nl_query": "Count prague loan accounts",
"sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
"intent": "How many accounts associated with loans are located in the Prague region?",
"manifest": "How many accounts associated with loans are located in a given city?",
"parameterized": {
"parameterized_intent": "How many accounts associated with loans are located in $1",
"parameterized_sql": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});"
}
}
],
...
}
הרכיבים העיקריים של אובייקט ה-JSON של תבנית השאילתה הם:
-
nl_query: דוגמה לשאילתה בשפה טבעית שכלים כמו QueryData מטפלים בה. -
sql: שאילתת MQL לשאילתה בשפה טבעית. למרות השם של המפתחsql, הוא מכיל MQL. -
intent: המטרה של השאילתה בשפה טבעית. אם לא מגדירים את הערך הזה, ברירת המחדל היא השאילתה בשפה טבעית. -
manifest: צורה כללית של הכוונה שנוצרה אוטומטית. -
parameterized_intent: טופס של הכוונה שנוצר אוטומטית באמצעות תבנית, עם פרמטרים במקום ערכי ישויות. parameterized_sql: תבנית של שאילתת MQL שנוצרה אוטומטית, שתואמת ל-intent שמכיל פרמטרים. למרות השם של המפתחparameterized_sql, הוא מכיל MQL.
היבטים של שאילתות
היבטי שאילתה הם קבוצה שנבחרה בקפידה של תנאים מייצגים בשפה טבעית עם פרדיקטים תואמים של MQL. ההיבטים מנהלים את הסינון ואת התנאים, וכך מאפשרים לתבניות של שאילתות לבצע חיפושים לפי היבטים.
אובייקט של היבט שאילתה נראה כך:
{
...
"facets": [
{
"sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 10000 }",
"intent": "Average salary between 6000 and 10000",
"manifest": "Average salary between a given number and a given number",
"parameterized": {
"parameterized_intent": "Average salary between $1 and $2",
"parameterized_sql_snippet": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
}
}
]
}
הרכיבים העיקריים של אובייקט ה-JSON של הפנים הם:
sql_snippet: קטע קוד של MQL. למרות השם של המפתחsql_snippet, הוא מכיל MQL. כדי למנוע אי-בהירות, צריך להוסיף לשמות השדות את שמות המסמכים (לדוגמה,doc_name.field_name).-
intent: הסבר על הפרדיקט של MQL. -
manifest: צורה כללית של הכוונה שנוצרה אוטומטית. parameterized_intent: תבנית שנוצרת אוטומטית של ה-intent, שבה ערכי הישויות מוחלפים בפרמטרים.-
parameterized_sql_snippet: תבנית שנוצרה אוטומטית של sql_snippet שתואמת לכוונה עם הפרמטרים. למרות השם של המפתחparameterized_sql_snippet, הוא מכיל MQL.
שאילתות חיפוש של ערכים
שאילתות חיפוש ערכים הן שאילתות שמוגדרות על ידי מפתחים ומשתמשות בפונקציות התאמה כדי למצוא ערכים ואת ההקשר שלהם במסד נתונים. הקישור לערכים משתמש בתוצאות של השאילתות האלה כדי לזהות אילו טבלאות ועמודות מכילות ערך תואם, להבין את סוג הקונספט של הערך ולתקן שגיאות איות.ה-API QueryData משתמש בקישור ערכים כדי להמיר שפה טבעית ל-MQL בצורה מדויקת יותר. באמצעות שאילתות חיפוש של ערכים, ה-API יכול לתקן שגיאות איות ולפתור סוגי ערכים על סמך ערכי מסד נתונים, וכך לשפר את דיוק ההמרות.
קישור ערכים משפר את הדיוק של ההמרה משפה טבעית ל-MQL. לדוגמה, אם משתמש שואל "האם יש טיסות מנתב"ג?", יכול להיות שבמסד הנתונים שם שדה התעופה יהיה "נמל התעופה בן גוריון". בלי קישור ערכים, יכול להיות שה-MQL שנוצר יסנן לפי
{ "name": "Heathrow" }
ולא יחזיר תוצאות. שאילתות חיפוש ערכים עוזרות לסוכן למפות את הערך 'הית'רו' למסד הנתונים הנכון 'הית'רו בלונדון' ולמיקום הסכימה שלו (airports.name), וכך לוודא ששאילתת ה-MQL שנוצרה מדויקת.
דוגמה לשאילתת חיפוש של ערך:
{
...
"value_searches": [
{
"query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport IATA Code",
"description": "Exact match (standard MQL) for 3-letter airport codes"
},
{
"query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Regex match for partial airport names"
},
{
"query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Full-text search for airport names"
}
]
}
הרכיבים העיקריים של אובייקט ה-JSON של חיפוש הערכים הם:
-
query: הצהרת MQL עם פרמטרים שמגדירה את הלוגיקה להתאמה בין ביטוי ערך לבין הערכים שמאוחסנים במסד נתונים. בדרך כלל, קבוצת התוצאות מציגה את הערך התואם, את מיקום הסכימה, את סוג המושג ומדד מרחק מנורמל (בין 0 ל-1). -
concept_type: תווית סמנטית שמוקצית לערך, למשלdistrictאוloan_status. התווית הזו עוזרת לקשר בין הערכים, ובסופו של דבר עוזרת לכלים כמו QueryData API להבין את התפקיד של ביטוי הערך בסכימה. הוא גם עוזר ליצור הצהרת MQL שמכוונת למושג של הערך, וגם לטבלה ולעמודה שבהן מופיע ביטוי הערך. -
description: תיאור של לוגיקת החיפוש.
מגבלות
יש כמה מגבלות לגבי קבוצות של הקשרים:
- הגדרות הקשר למסדי נתונים תומכות רק בתבניות, בהיבטים ובחיפושי ערכים.
- קבוצות הקשר למסדי נתונים משמשות רק את נקודת הקצה
QueryDataב-Conversational Analytics API.