יצירת קבוצות הקשר באמצעות סוכן הנדסת ההקשר

במאמר הזה מוסבר איך ליצור ולבצע אופטימיזציה של קבוצות הקשר שעוזרות להשיג רמת דיוק גבוהה בשאילתות של הכלי QueryData באפליקציות של סוכן הנתונים. הסוכן להנדסת הקשר עוזר לכם ליצור, להעריך ולשפר קבוצות של הקשרים על ידי אוטומציה של היצירה והאופטימיזציה שלהן.

מידע נוסף על קבוצות הקשר ו-QueryData זמין במאמרים סקירה כללית על קבוצות הקשר וסקירה כללית על QueryData.

כדי לפתח אפליקציות נתונים ברמה שמתאימה לארגונים, בדרך כלל צריך להגיע לאיכות של כמעט 100% בדיוק של המודל להמרת טקסט לשאילתה. אם ה-SQL נוצר בצורה שגויה, זה משפיע על השימושיות הכוללת של האפליקציה ועל חוויית המשתמש. כדי לקבל תשובות מוסברות, רלוונטיות לעסק ומדויקות מאוד, צריך לבצע הנדסת הקשר – תהליך של יצירה ואופטימיזציה חוזרת של ההקשר כדי להגיע לדיוק אופטימלי.

כשמספקים ל-QueryData את ההקשר שממוקד לאפליקציה העסקית, מספקים את הכללים העסקיים המדויקים שהמערכת צריכה כדי לזהות כוונת משתמש מורכבת.

סוכן הנדסת הקשר

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

  • הנחיה לדוגמה לניתוח כשלים: "עדכן את ההקשר כדי שנוכל לזהות נכון את שדה התעופה בשאילתות כמו 'טיסות לדיסני וורלד'". הסוכן מנתח את הכישלון, מסיק מסקנות לגבי הפער וממליץ להוסיף פריט הקשר מתאים, כמו שאילתת חיפוש ערכים.
  • פרומפט לדוגמה להצעות תלויות הקשר: "Read my app code and suggest some context to add." הסוכן מנתח את הקוד, מסיק מסקנות לגבי הדומיין של האפליקציה ומציע אילו פריטי הקשר יהיו רלוונטיים.
  • הנחיה לדוגמה לעיבוד בכמות גדולה: "הנה 10 דוגמאות לשאלות ולשאילתות SQL. הפכו אותן לתבניות." הסוכן מעבד את הקלט בכמות גדולה ומעדכן את קבוצת ההקשר.

החשיבות של מערך הנתונים המאומתים

כדי לבצע אופטימיזציה של ההקשר, קודם צריך ליצור קבוצת נתונים שתואמת לקלט בשפה טבעית של האפליקציה. הנציג יכול לעזור לכם ליצור את מערך הנתונים המוזהב הזה, שכולל שאלות של משתמשים ואת השאילתות הצפויות שלהם במסד הנתונים. קבוצת נתונים מאומתת מאפשרת לכם:

  • הגדרת בסיס להשוואה של ביצועי השאילתות.
  • מאמתים את העדכונים באמצעות שאילתות במסד נתונים של אמת קרקע (ground truth).
  • למדוד את השיפורים ברמת הדיוק בין איטרציות.

תהליך שיטתי של טיפוס על גבעה

בשיטת הטיפוס על גבעה (hill-climbing) שיטתית, הסוכן משפר באופן איטרטיבי קבוצת הקשר באמצעות הערכה של קבוצת נתוני הזהב, ניתוח פערים ועדכונים כדי לשפר את הדיוק לרמה של כמעט 100%.

  • יצירה אוטומטית של הקשר בסיסי: יוצרים קבוצת הקשרים ראשונית שמבוססת על הסכימה של מסד הנתונים ועל פריטי המידע שנוצרו באפליקציה.
  • תהליך עבודה לאופטימיזציה בשיטת טיפוס הרים: הסוכן יכול להעריך את הדיוק של QueryData, לבצע ניתוח פערים במקרה של כשלים ולהציע באופן אוטומטי שיפורים כדי להגביר את הדיוק.

הדיאגרמה הבאה מציגה את תהליך העבודה השיטתי של טיפוס על גבעה:

תהליך עבודה ליצירת הקשר באופן איטרטיבי.

לפני שמתחילים

לפני שמשתמשים בסוכן עם מנוע תלוי הקשר, צריך לבצע את הפעולות הבאות.

הפעלת השירותים הנדרשים

מפעילים את השירותים הבאים בפרויקט:

הכנת מכונה של Cloud SQL

מוודאים שיש לכם גישה למכונה קיימת של Cloud SQL או יוצרים מכונה חדשה. מידע נוסף מופיע במאמר יצירת מכונות ל-Cloud SQL.

כדי לבצע את ההדרכה הזו, צריך מסד נתונים במכונת Cloud SQL. למידע נוסף, קראו את המאמר יצירת מסד נתונים במכונה של Cloud SQL.

תפקידים והרשאות נדרשים

  • מוסיפים למכונה חשבון משתמש או חשבון שירות ב-IAM. מידע נוסף זמין במאמר בנושא ניהול משתמשים באמצעות אימות מסד נתונים של IAM ב-Cloud SQL.
  • מקצים למשתמש ב-IAM את התפקידים cloudsql.studioUser,‏ cloudsql.instanceUser ו-geminidataanalytics.queryDataUser ברמת הפרויקט. מידע נוסף זמין במאמר הוספת קישור למדיניות IAM בפרויקט.
  • כדי ליצור, להעלות ולנהל קבוצות הקשר, צריך להקצות למשתמש ה-IAM את התפקיד "עריכת קטלוג Dataplex" ‏(roles/dataplex.catalogEditor) או "אדמין של קטלוג Dataplex" ‏(roles/dataplex.catalogAdmin) ברמת הפרויקט. מידע נוסף זמין במאמר הרשאות לקבוצות של הגדרות הקשר.
  • אתם צריכים גם להעניק הרשאות קריאה בלבד למסד הנתונים לחשבון משתמש או לחשבון שירות ב-IAM. כדי לעשות את זה, אתם צריכים להתחבר כמשתמש עם הרשאות של משתמש-על, כמו המשתמש postgres.

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO USER_NAME;

    מחליפים את USER_NAME בכתובת האימייל של המשתמש. צריך להשתמש במירכאות סביב כתובת האימייל כי היא מכילה תווים מיוחדים (@ ו-.).

    מידע נוסף זמין במאמר הענקת הרשאות למסד נתונים למשתמש 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.
כדי לבצע את השלבים במדריך הזה, צריך להיכנס אל Google Cloud ולאחר מכן לבצע אימות למסד הנתונים באמצעות אימות IAM.

הכנת הסביבה

אפשר ליצור קבצים של הגדרות הקשר מכל סביבת פיתוח מקומית או IDE. כדי להכין את הסביבה, מבצעים את השלבים הבאים:

  • התקנת סוכן הנדסת ההקשר
  • הגדרת החיבור למסד הנתונים

התקנת הסוכן להנדסת הקשר

סוכן עם מנוע תלוי הקשר מריץ שרת Model Context Protocol‏ (MCP) שנדרש לו uv כדי לנהל חבילות Python בסיסיות.

  1. כדי להתקין את uv, פועלים לפי ההוראות במאמר התקנת uv.

  2. בודקים ש-uv מותקן ושאפשר לגשת אליו משורת הפקודה:

    uv --version

כדי להכין את הסביבה, מתקינים את סוכן הנדסת ההקשר ב-agent harness שבחרתם, כמו Antigravity CLI,‏ Claude Code או Gemini CLI.

בהתאם למעטפת האג'נטית שבחרתם, פועלים לפי שלבי ההתקנה המתאימים:

Antigravity CLI

כדי להתקין את סוכן הנדסת ההקשר ב-Antigravity CLI, פועלים לפי השלבים הבאים:

  1. מתקינים את Antigravity CLI. איך מתחילים לעבוד עם Antigravity CLI
  2. מתקינים את הפלאגין של סוכן הנדסת ההקשר, שכולל תהליכי עבודה ליצירת הקשר:
    agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/main/plugin
  3. מפעילים את Antigravity CLI:
    agy

כדי לעדכן את הפלאגין לגרסה העדכנית:

agy plugin uninstall google-cloud-db-context-engineering
agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/main/plugin

Claude Code

כדי להתקין את סוכן הנדסת ההקשר ב-Claude Code, פועלים לפי השלבים הבאים:

  1. הוספת חנות הפלאגינים:
    /plugin marketplace add https://github.com/GoogleCloudPlatform/db-context-enrichment.git
  2. מתקינים את הפלאגין:
    /plugin install db-context-engineering@db-context-enrichment-marketplace
  3. טוענים מחדש את הפלאגינים כדי להפעיל את השינויים:
    /reload-plugins
  4. מעדכנים את הפלאגין:
    /plugin update db-context-engineering@db-context-enrichment-marketplace

‫Gemini CLI (יצא משימוש)

כדי להתקין את סוכן הנדסת ההקשר ב-Gemini CLI:

  1. מתקינים את Gemini CLI. איך מתחילים לעבוד עם Gemini CLI
  2. מתקינים את התוסף:
    gemini extensions install https://github.com/GoogleCloudPlatform/db-context-enrichment
  3. מעדכנים את התוסף:
    gemini extensions update mcp-db-context-enrichment

הגדרת החיבור למסד הנתונים

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

הגדרת Application Default Credentials

מגדירים Application Default Credentials ‏ (ADC) כדי לספק פרטי כניסה של משתמש לצורך גישה למשאבי Google Cloud מסוכן הנדסת ההקשר:

  • שרת MCP של Toolbox: משתמש בפרטי הכניסה כדי להתחבר למסד הנתונים, לאחזר סכימות ולהריץ SQL לאימות.
  • ‫Evalbench: משתמש בפרטי כניסה כדי להפעיל את QueryData לצורך הערכה.

מריצים את הפקודות הבאות בטרמינל כדי לבצע אימות:

gcloud auth application-default login

הגדרת קובץ החיבור למסד הנתונים

הסוכן צריך חיבור למסד נתונים כדי ליצור הקשר, ו-MCP Toolbox תומך בזה ומגדיר את החיבור בקובץ תצורה.

קובץ התצורה מציין את מקור מסד הנתונים ואת הכלים שנדרשים כדי לאחזר סכימות או להריץ SQL. הסוכן עם מנוע תלוי הקשר מגיע עם סקילים אג'נטיים מותקנים מראש שיעזרו לכם ליצור את ההגדרות האישיות.

  1. מפעילים את סביבת הסוכן.

  2. מבקשים מהסוכן לעזור בהגדרת החיבור למסד הנתונים – לדוגמה, מזינים את ההנחיה "עזרה בהגדרת החיבור למסד הנתונים". פועלים לפי ההוראות של הסוכן כדי ליצור את קובץ התצורה בספריית העבודה הנוכחית בשם autoctx/tools.yaml.

  3. כדי להחיל את ההגדרה החדשה של tools.yaml, טוענים מחדש את החיבור:

    • ב-Antigravity CLI, מריצים את /mcp ובוחרים באפשרות toolbox כדי להפעיל מחדש.
    • ב-Gemini CLI, מריצים את הפקודה /mcp reload.
    • ב-Claude Code, מריצים את /mcp, בוחרים באפשרות toolbox ואז בוחרים באפשרות Reconnect.

מידע נוסף על הגדרה ידנית של קובץ התצורה של מסד הנתונים זמין במאמר הגדרת ארגז הכלים של MCP.

יצירה ואופטימיזציה של הקשר

הסוכן Context Engineering מספק קבוצה של כישורי סוכן וכלי MCP כדי לשפר את יכולת הנדסת ההקשר של סוכן הקידוד. אתם יכולים להשתמש בכלים האלה ביחד כדי ליצור בסיס להשוואה, למדוד את היעילות וליישם שיפורים באופן איטרטיבי. עם זאת, אתם יכולים להתחיל בכל שלב בתהליך העבודה:

  • אם כבר הגדרתם הקשר, אתם יכולים להמשיך ישירות להערכה.
  • אם יש לכם שאילתות שנכשלות ואתם רוצים לתקן אותן, אתם יכולים להמשיך ישירות לניתוח הפערים.

כל יכולת מתארת את הפעולות, תרחישי השימוש ופקודות ההפעלה של הנציג.

ההנחיות לדוגמה מראות איך אפשר לשלוח שאילתות לנציג בשפה טבעית. אם הסוכן צריך פרטים נוספים כדי להשלים בקשה, הוא יבקש ממך הבהרה.

ליצור ולהרחיב מערכי נתונים להערכה

כדי לשפר את הביצועים, קודם צריך למדוד אותם. אם אתם מבצעים הנדסת הקשר בלי קבוצת נתונים אידיאלית, שכוללת שאלות של משתמשים בשילוב עם ה-SQL הצפוי שלהן, חסר לכם אימות שיטתי. כשמשתמשים בקבוצת נתונים אידיאלית, כל שינוי הוא שיפור שאפשר למדוד ולאמת מול אמת קרקע (ground truth).

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

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

אם רוצים, אפשר לאפשר לסוכן להריץ את ה-SQL שנוצר במסד הנתונים. האימות הזה מאשר שהשאילתות פועלות בהצלחה לפני שמוסיפים אותן למערך הנתונים.

קבוצת הנתונים היא קובץ JSON שמכיל זוגות של שאלה ו-SQL:

[
  {
    "id": "example_001",
    "nlq": "What is the total revenue for the top 5 products?",
    "golden_sql": "SELECT product_id, sum(net_revenue) FROM sales GROUP BY product_id ORDER BY sum(net_revenue) DESC LIMIT 5;"
  }
]

הצמדים שאושרו מאכלסים את הקובץ autoctx/golden.json בסביבת העבודה, שבו הם מוכנים להערכה. אתם יכולים לספק קובץ קיים או לכתוב כמה דוגמאות להערכה כדי שהנציג ירחיב אותן.

אתם יכולים להשתמש בהנחיות לדוגמה הבאות כדי להנחות את הסוכן:

  • "תייצר מערך נתונים להערכה מהסכימה שלי".
  • "הנה שאילתת SQL ושאלה ראשונית. הרחיבו אותו למערך נתונים רחב יותר וודאו שהשאילתות פועלות".

יצירת קבוצת הקשרים בסיסית

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

אתם יכולים להשתמש בהנחיות לדוגמה הבאות כדי להנחות את הסוכן:

  • "צור קבוצת הקשר מהסכימה שלי".
  • "צור הקשר ראשוני באמצעות הסכימות האלה והכללים העסקיים בקובץ requirements.md".

הנציג יבקש מכם לתת שם לניסוי, כדי לארגן את פריטי המידע שנוצרו, ויכול להיות שהוא יבקש מכם לצמצם את ההיקף אם הסכימה של מסד הנתונים גדולה. כדי להעלות את ההקשר באמצעות Cloud SQL Studio, פועלים לפי ההוראות אחרי שהסוכן יוצר את קובץ ה-JSON.

הערכת האפקטיביות של ההקשר

אחרי שיוצרים קבוצת הקשרים וקבוצת נתונים אידיאלית, אפשר לתת לסוכן למדוד את ביצועי ההקשר על ידי שליחת שאילתה ל-QueryData API של סוכן הנתונים עם כל שאלה אידיאלית. הסוכן משווה את ה-SQL שנוצר ואת תוצאות ההרצה שלו לתשובה הצפויה באמצעות Evalbench.

הפעלת הערכה מספקת את הנתונים הבאים:

  • מדדים כמותיים, כמו תוצאות של הצלחה וכישלון וציונים מצטברים, כדי לעקוב אחרי ההתקדמות בין איטרציות של הקשרים.
  • סיכום שיחה מוטבע ודוחות CSV מפורטים שנכתבו בספרייה eval_reports/ בתיקיית הניסוי.

כדי להתחיל הערכה, צריך לציין את הנתיב של קבוצת הנתונים להשוואה ואת המזהה של קבוצת ההקשר. כדי למצוא את מזהה קבוצת ההקשר, אפשר לעיין במאמר בנושא מציאת מזהה ההקשר של הסוכן.

אתם יכולים להשתמש בהנחיות לדוגמה הבאות כדי להנחות את הסוכן:

  • "Evaluate my context against golden.json."
  • "Re-run the evaluation using the config from my last experiment."

כדי להריץ מחדש הגדרת הערכה שנוצרה בעבר בלי להגדיר אותה מחדש, אפשר לבקש מהסוכן או להפעיל את ה-CLI ישירות:

uvx google-evalbench --run_config=autoctx/experiments/my-experiment/eval_configs/run_config.json

במסמכי התיעוד של Evalbench מוסבר איך להגדיר את סכימת ההערכה ואיך להתאים אישית את הרצות ההערכה.

ניתוח פערים והצעת שיפורים

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

הסוכן מבצע את הלולאה הזו של ניתוח ותיקון באופן אוטומטי:

  • ניתוח פערים: הנציג קורא את תוצאות ההערכה ואת ההקשר שהגדרתם כדי לקבץ כשלים דומים ולהמליץ על תוספות הקשר ממוקדות, כמו תבניות, מאפיינים או חיפושי ערכים.
  • הצעות לתיקונים: הנציג מציע עריכות קונקרטיות, ובודק את ה-SQL מול מסד הנתונים כדי לאמת את הפתרון.
  • שמירה של נתוני הבסיס: הסוכן כותב את השיפורים לקובץ JSON חדש לצד נתוני הבסיס של ההקשר, ושומר את הקבצים המקוריים.

אפשר להשתמש בהנחיות הבאות כדי לתת הנחיות לסוכן:

  • "Run gap analysis on my last evaluation and propose fixes" (תבצע ניתוח פערים בהערכה האחרונה שלי ותציע תיקונים).
  • "תבצע אופטימיזציה של קבוצת ההקשר הזו בהתאם לgolden.json".

כדי להתכונן לאיטרציה הבאה, מעלים את ההקשר המשופר לקבוצת ההקשרים הרלוונטית באמצעות Data Agents Studio, לפי ההוראות.

יצירת פריטי הקשר ספציפיים לפי דרישה

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

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

זו גם היכולת הנכונה להשתמש בה כשמקבלים משימה חד-פעמית: בעל עניין נותן לכם זוג חדש של שאלה ו-SQL שהוא רוצה שיהיה לו תמיכה, או שאתם מזהים היבט חסר במהלך סקר קוד. אתם לא צריכים להגדיר ניסוי או להריץ הערכה כדי לתקן את זה – פשוט תתארו מה אתם רוצים והסוכן ייצור את ה-JSON.

אפשר להשתמש בהנחיות הבאות כדי לתת הנחיות לסוכן:

  • "צור תבנית לשאלה: 'אילו שדות תעופה יש בקליפורניה?' עם SQL: SELECT name FROM airports WHERE country = 'United States' AND state = 'CA'."
  • "צור פן לסינון departure_time BETWEEN '00:00:00' AND '06:00:00' עם התווית 'עיניים אדומות'".
  • "צור חיפוש ערך עבור airports.iata".

הסבר על בחירת סוג ההקשר

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

אתם יכולים להשתמש בהנחיות לדוגמה הבאות כדי להנחות את הסוכן:

  • "אני ממשיך לכתוב את המסנן departure_time BETWEEN '00:00:00' AND '06:00:00' בשאילתות רבות. מה הדרך הכי טובה לצלם את זה?"
  • "המשתמשים מתארים את סטטוס הטיסה בטקסט חופשי ואני רוצה להתאים אותם ל-flights.status. איזה סוג של חיפוש ערכים כדאי לי להגדיר?"
  • "מה ההבדל בין תבנית לבין פן, ומתי כדאי להשתמש בכל אחת מהן?"

החלת פעולות בכמות גדולה על קבוצת הקשרים

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

אתם יכולים להשתמש בהנחיות לדוגמה הבאות כדי להנחות את הסוכן:

  • "Read golden.txt and turn all the pairs into templates."
  • "ב-context_set.json, צריך להחליף את airline = 'UA' ב-airline = 'United Airlines' בכל פריט שמתייחס ל-'United'. אל תגעו בפריטים שלא קשורים."

המאמרים הבאים