סקירה כללית
למודלים גדולים של שפה יש ידע כללי רחב, אבל הם לא מכירים את המדדים הספציפיים של הדומיין שלכם, את סכימות מסד הנתונים או את נוסחאות החישוב. בלי ההקשר הזה, המודל מנחש, מה שמוביל ל-SQL שגוי ולניתוח פגום.
הסוכן RMI ADK פותר את הבעיה הזו באמצעות מיומנויות. נניח שמשתמש שואל "מה היה עומס התנועה אתמול ב-Storrow Drive?". כדי לענות, הנציג צריך לדעת ש-RMI מציג את העומס כמדד זמן הנסיעה (TTI), שהוא היחס בין duration_in_seconds בזמן אמת לבין static_duration_in_seconds בתנאים אופטימליים בטבלה historical_travel_time. סוכן ללא כישורים עלול להמציא עמודה average_speed (דוחות RMI מציגים מהירות קטגורית בלבד, אף פעם לא קמ"ש) או להחיל נוסחה שגויה, ולספק תשובה שגויה בביטחון.
הסוכן צריך את הידע הזה על הדומיין, אבל לא יעיל להזין את כל הגדרות המדדים, סכימת הטבלה והערות ה-SQL בפרומפט מערכת אחד.
מגבלות של הנחיות מערכת גדולות
הכנסת כל כללי הדומיין והסכימות להנחיית מערכת אחת גורמת לכמה בעיות:
- עלויות גבוהות יותר ותגובות איטיות יותר: שליחת הנחיה ענקית בכל תור מבזבזת טוקנים ומגדילה את זמן האחזור, גם בשאלות שלא דורשות את הכללים האלה.
- מילוי הוראות פחות טוב: ככל שההנחיה ארוכה יותר וכוללת מקרים חריגים, גדל הסיכוי שהמודל יתעלם מכללים ספציפיים או ישכח אותם.
- תחזוקה מסובכת יותר: כשמשלבים הכול בהנחיה אחת, קשה לעדכן או לבדוק כלל בודד בלי לשבור כללים אחרים.
מיומנויות
היכולות של הסוכן מארגנות את הידע על הדומיין בתיקיות מודולריות שהסוכן טוען רק כשצריך. כל מיומנות היא ספרייה שמכילה קובץ SKILL.md עם הוראות ב-Markdown וכותרת YAML.
במקום לטעון את כל הנתונים מראש, הסוכן שומר רק את הפרומפט הקצרdescription של כל מיומנות בפרומפט הבסיסי שלו. כשמשתמש שואל שאלה שרלוונטית ליכולת מסוימת, הסוכן טוען את ההוראות המלאות של התור הזה. כך ההנחיות יהיו קצרות ותוכלו להשתמש במקום בהקשר להיסטוריית השיחות בפועל.
בנוסף, המיומנויות מאפשרות הפרדה ברורה בין נושאים שונים: אתם יכולים לכתוב, לבדוק ולעדכן יכולות ספציפיות בנפרד, בלי להסתכן בתופעות לוואי לא רצויות בדומיינים לא קשורים. סוכן הפקה בדרך כלל משתמש בכמה מיומנויות ממוקדות ולא בפרומפט ענק אחד.
המבנה של סקיל
קובץ SKILL.md מורכב משני חלקים: כותרת YAML לניתוב וגוף Markdown להוראות.
1. כותרת YAML
---
name: rmi-traffic-metrics-grounding
description: >
Standard traffic performance metrics computable from RMI BigQuery
tables. Covers congestion severity (TTI), delay, travel time
reliability (LOTTR, BTI, PTI, CoV), congestion frequency, speed
breakdowns, and network-wide congestion rates. Use when the user asks
about traffic conditions, congestion, reliability, delay, or network
health.
---
המודל משתמש ב-description כדי להחליט אם לטעון את הסקיל. המודל רואה רק את התיאור הזה לפני שהוא מחליט לטעון את המיומנות, ולכן חשוב לוודא שמופיעים בו בבירור הנושאים שהמיומנות מכסה, ניסוחים אופייניים של משתמשים ומתי להפעיל אותה.
2. גוף ההודעה בפורמט Markdown
גוף ההודעה מספק את ההנחיות הספציפיות לדומיין שהמודל פועל לפיהן אחרי שהוא נטען.
הידע של RMI בנושא מדדים כולל את הנוסחה המדויקת לחישוב TTI (duration_in_seconds / static_duration_in_seconds), תבנית SQL מאומתת של BigQuery לכל מדד וביטויי הפעלה שממפים את כוונת המשתמש למדד הנכון. הוראות מובְנות ומאומתות עוזרות למודל להישאר מבוסס על המציאות ומונעות ממנו לנחש פרטים של סכימה או נוסחה.
רישום מיומנויות באמצעות ADK
מקבצים את הכישורים בSkillToolset ומוסיפים אותם לרשימת הכלים של הסוכן:
from google.adk import skills
from google.adk.tools import skill_toolset
rmi_skill_toolset = skill_toolset.SkillToolset(
skills=[
# TRAFFIC_METRICS_SKILL_DIR points to the skill's SKILL.md folder.
skills.load_skill_from_dir(TRAFFIC_METRICS_SKILL_DIR),
],
)
# root_agent = llm_agent.Agent(..., tools=[*bq_tools, rmi_skill_toolset])
כאן, TRAFFIC_METRICS_SKILL_DIR מציין את הספרייה שמכילה את מיומנות ההצמדה למציאות של מדדי התנועה.
חבילת כלים עם מיומנויות
מיומנויות הן הוראות מבוססות-טקסט, ולכן הסתמכות רק על המודל כדי לפרש ולבצע לוגיקה מורכבת עלולה להוביל לחוסר עקביות. צירוף כלים להפעלה למיומנות מספק דטרמיניזם: הקוד מטפל בחישובים, באימותים ובאינטראקציות עם API, בעוד שהמיומנות מנחה את המודל מתי ואיך להשתמש בהם.
הכלים לאריזה גם מונעים ניפוח של ההקשר הגלובלי. במקום לחשוף מראש את כל הכלים המיוחדים, הכלים מוגבלים לטעינה רק כשהמיומנות התואמת שלהם בתחום פעילה.
אפשר לצרף כלים ספציפיים ישירות לסקיל בכותרת ה-YAML שלו:
metadata:
adk_additional_tools:
- calculate_custom_metric
כך המודל מקבל את סכימת הכלי ואת הוראות השימוש בו בדיוק בזמן, והכלי הבסיסי נשאר יעיל.
דוגמה: עיגון של שאילתה לגבי עומס
- המשתמש שואל "How congested is Storrow Drive during evening rush?"
- ההנחיה הבסיסית למערכת כוללת רק את השם והתיאור של כל מיומנות, ולכן הסוכן רואה שמיומנות
rmi-traffic-metrics-groundingעוסקת ב'פקקים' וקורא למיומנותload_skillכדי לקבל את ההוראות המלאות שלה לשאילתה הזו. - אחרי שהמיומנות נטענת, הסוכן מחיל את הגדרת ה-TTI ואת תבנית ה-SQL המאומתת שהוא מספק, ומחשב את היחס ביחס ל-
historical_travel_timeבמקום לנחש נוסחה.
הסיבה לכך היא שהגוף של מיומנות מאוחזר רק כשצריך אותו בשאילתה, ולכן מיומנויות שהסוכן לא משתמש בהן אף פעם לא נכנסות להקשר, וההנחיה הבסיסית של המערכת נשארת קצרה.
מסקנות עיקריות
- עיגון עם הדרכה לגבי הדומיין: צריך לספק הוראות מפורשות, אילוצים ולוגיקה עסקית במקום להסתמך על הנחות כלליות של המודל.
- שימוש במיומנויות מודולריות: כדי לחסוך בטוקנים, לקצר את זמן האחזור ולשפר את הדיוק, כדאי לפצל את הידע למיומנויות ממוקדות במקום להשתמש בהנחיית מערכת אחת גדולה.
- כותבים תיאורים ברורים: כוללים ביטויי הפעלה ומילות מפתח ספציפיים בתיאור של כל מיומנות, כדי שהסוכן יטען אותה בצורה מהימנה.
- הוספת דוגמאות קונקרטיות: כדי שהפלט יהיה עקבי ומדויק, כדאי להוסיף דוגמאות מאומתות וזרימות עבודה לדוגמה לגוף המיומנות.
- חבילת כלים לדטרמיניזם: צירוף כלים להפעלה למיומנויות כדי לטפל באימות ובהפעלה קפדניים, תוך שמירה על ערכת הכלים הבסיסית.
השלבים הבאים
- התנסות בדפוסי מיומנויות מתקדמים: כדאי לקרוא את המדריך למפתחים ליצירת סוכני ADK באמצעות מיומנויות כדי לקבל מידע על מיומנויות ADK.
תורמים
Nathaniel Thomas | Software Engineering Intern, Google Maps Platform