החל מ-Gemma 4, אנחנו משיקים טוקנים חדשים של בקרה. ל-Gemma 3 ומטה, אפשר לעיין במסמך הקודם.
בסעיפים הבאים מפורטים אסימוני הבקרה שבהם משתמשת Gemma 4 ותרחישי השימוש שלהם. חשוב לזכור שאסימוני הבקרה שמורים וספציפיים לטוקנייזר שלנו.
- טוקן לציון הוראה למערכת:
system - טוקן שמציין תור של משתמש:
user - אסימון שמציין תור של מודל:
model - טוקן שמציין את תחילת תור בשיחה:
<|turn> - אסימון שמציין את סוף תור הדיבור:
<turn|>
דוגמה לשיחה:
<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>
מולטי-מודאליות
| טוקן מולטי-מודאלי | מטרה |
|---|---|
<|image> <image|> |
ציון הטמעות של תמונות |
<|audio> <audio|> |
סימון הטמעות של אודיו |
<|image|> <|audio|> |
אסימונים מיוחדים של placeholder |
אנחנו משתמשים בשני טוקנים מיוחדים של פלייס הולדר (<|image|> ו-<|audio|>) כדי לציין איפה צריך להוסיף טוקנים של תמונות ואודיו. אחרי הטוקניזציה, הטוקנים האלה מוחלפים בהטמעות הרכות בפועל בתוך המודל.
הנה דוגמה לשיחה:
prompt = """<|turn>user
Describe this image: <|image|>
And translate these audio:
a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""
טוקנים של בקרה על סוכנים ועל נימוקים
כדי לתמוך בתהליכי עבודה מבוססי-סוכנים, Gemma משתמשת בטוקנים מיוחדים של בקרה שמבחינים בין חשיבה רציונלית פנימית (חשיבה) לבין פעולות חיצוניות (הפעלת פונקציות). האסימונים האלה מאפשרים למודל לעבד לוגיקה מורכבת לפני שהוא מספק תשובה סופית או מקיים אינטראקציה עם כלים חיצוניים.
בקשה להפעלת פונקציה
מודל Gemma 4 אומן על שישה טוקנים מיוחדים לניהול מחזור החיים של 'שימוש בכלים'.
| זוג טוקנים | מטרה |
|---|---|
<|tool> <tool|> |
הגדרת כלי |
<|tool_call> <tool_call|> |
מציין בקשה של מודל להשתמש בכלי. |
<|tool_response> <tool_response|> |
התוצאה של הפעלת הכלי מועברת בחזרה למודל. |
התו שמפריד בין ערכי מחרוזות: <|"|>
אסימון יחיד, <|"|>, משמש כתו מפריד לכל ערכי המחרוזות
בתוך בלוקים של נתונים מובְנים.
- מטרה: האסימון הזה מבטיח שכל התווים המיוחדים (כמו
{,},,או מרכאות) בתוך מחרוזת יטופלו כטקסט מילולי ולא כחלק מהתחביר הבסיסי של מבנה הנתונים. - שימוש: כל המחרוזות המילוליות בהצהרות, בקריאות ובתגובות של הפונקציות צריכות להיות מוקפות בטוקן הזה (למשל,
key:<|"|>string value<|"|>).
מצב העמקה
כדי להפעיל את מצב החשיבה, צריך לכלול את אסימון הבקרה <|think|> בהוראה למערכת.
| טוקן בקרה | מטרה |
|---|---|
<|think|> |
הפעלת מצב חשיבה |
<|channel> <channel|> |
מציין תהליך פנימי של מודל. |
הנה דוגמה לשיחה:
<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>
מצב חשיבה מיועד להפעלה ברמת השיחה. צריך לאחד את כל ההוראות האלה להוראה אחת לצד הוראות מערכת אחרות, כמו הגדרות של כלים.
דוגמה לחשיבה רציונלית ולבקשה להפעלת פונקציה
במהלך תור עם סוכן, יכול להיות שהמודל יבצע "חשיבה" פרטית לפני שיחליט להפעיל פונקציה. מחזור החיים מתנהל בסדר הבא:
- פנייה של משתמש: המשתמש שואל שאלה.
- הסקה פנימית: המודל חושב באופן פרטי בערוץ המחשבה.
- בקשה לשימוש בכלי: המודל מפסיק את היצירה כדי לבקש שימוש בכלי.
- הרצה והוספה: האפליקציה מריצה את הכלי ומצרפת את התשובה.
- תשובה סופית: המודל קורא את התשובה ויוצר את התשובה הסופית.
בדוגמה הבאה מוצג מודל שמשתמש בכלי מזג אוויר:
<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>
האפליקציה צריכה לנתח את התגובה של המודל כדי לחלץ את שם הפונקציה והארגומנטים, להפעיל את הפונקציה ואז לצרף את tool_calls ואת tool_responses להיסטוריית הצ'אט בתפקיד assistant.
<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>
לבסוף, Gemma קוראת את התשובה של הכלי ועונה למשתמש.
The temperature in London is 15 degrees and it is sunny.<turn|>
זוהי היסטוריית הצ'אט המלאה בפורמט JSON לדוגמה הזו:
[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What's the temperature in London?"
},
{
"role": "assistant",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": {
"location": "London"
}
}
}
],
"tool_responses": [
{
"name": "get_current_weather",
"response": {
"temperature": 15,
"weather": "sunny"
}
}
],
"content": "The temperature in London is 15 degrees and it is sunny."
}
]
ניהול הקשר של המחשבה בין תורות
ניהול נכון של המחשבות שנוצרות על ידי המודל הוא קריטי לשמירה על הביצועים בשיחות מרובות תורות.
- שיחות רגילות עם כמה תפניות: לפני שמעבירים את היסטוריית השיחות בחזרה למודל לתפנית הבאה, צריך להסיר (למחוק) את המחשבות שנוצרו על ידי המודל בתפנית הקודמת. אם רוצים להשבית את מצב החשיבה באמצע השיחה, אפשר להסיר את טוקן
<|think|>כשמסירים את המחשבות הקודמות. - קריאה לפונקציה (חריג): אם תור של מודל יחיד כולל קריאות לפונקציה או לכלי, אסור להסיר את המחשבות בין הקריאות לפונקציה.
תהליכי עבודה אג'נטיים ומשימות ארוכות טווח
מכיוון שהמחשבות הגולמיות מוסרות בין תורות סטנדרטיות, מפתחים שיוצרים סוכנים שפועלים לאורך זמן עשויים לרצות לשמור על הקשר של החשיבה הרציונלית כדי למנוע מהמודל להיכנס ללולאות חשיבה רציונלית מחזוריות.
- סיכום המחשבות: טכניקת היקש מומלצת מאוד היא לחלץ, לסכם ולהזין את המחשבות הקודמות של המודל בחזרה לחלון ההקשר כטקסט רגיל.
- מגבלות על הפורמט: מודל Gemma 4 לא אומן במפורש עם מחשבות גולמיות שנכללות בהנחיה (מחוץ לתרחיש הספציפי של קריאה לכלי שצוין למעלה), ולכן המודל לא מצפה לפורמט ספציפי או מוגדר מראש למחשבות המוזרקות האלה. אתם יכולים לעצב את הסיכום של החשיבה הרציונלית בכל דרך שתתאים הכי טוב לארכיטקטורה הספציפית של הסוכן.
הערות לגבי שילוב
- מצב פנימי: בדרך כלל משתמשים באסימונים
<|channel>ו-<channel|>לעיבוד של שרשרת מחשבות (CoT). באפליקציות רגילות שפונות למשתמשים, התוכן הזה בדרך כלל מוסתר מהמשתמשים. - Tool Loop: אסימוני
tool_callו-tool_responseמאפשרים 'לחיצת יד' בין המודל לסביבת האפליקציה. האפליקציה מיירטת אתtool_call, מריצה את הקוד הבסיסי ומחזירה את התוצאה למודל בתוך האסימוניםtool_response. - התנהגות המודל: מודלים גדולים יותר (למשל, gemma-4-26B-A4B-it, gemma-4-31B-it) עשויים מדי פעם ליצור ערוץ חשיבה גם כשמצב החשיבה מושבת באופן מפורש. כדי לייצב את התנהגות המודל במקרים קיצוניים כאלה, כדאי להוסיף טוקן חשיבה ריק להנחיה.
טיפ: כוונון עדין של מודלים גדולים באמצעות קבוצות נתונים ללא חשיבה
כשמבצעים כוונון עדין של מודלים גדולים יותר של Gemma עם מערך נתונים שלא כולל חשיבה, אפשר להשיג תוצאות טובות יותר על ידי הוספת הערוץ הריק להנחיות האימון:
<|turn>model
<|channel>thought
<channel|>
טיפ: יעילות מחשבה אדפטיבית באמצעות הוראות מערכת
אמנם התכונה 'חשיבה' ב-Gemma 4 נתמכת באופן רשמי כמאפיין בוליאני ON או OFF, אבל למודל יש יכולות חזקות במיוחד של ביצוע הוראות, שמאפשרות לכם לשנות את התנהגות החשיבה שלו באופן דינמי.
במקום להסתמך על פרמטר של מסגרת שמוגדרת בהארדקוד ל'חשיבה' 'גבוהה' או 'נמוכה', אפשר להשתמש בהוראות מערכת (SI) כדי להנחות את המודל למצב חשיבה מופחת. אם תתנו למודל הנחיה מפורשת לחשוב ביעילות או ברמה נמוכה יותר (מושג שאנחנו מכנים 'הנחיית חשיבה נמוכה'), תוכלו להשיג יעילות חשיבה אדפטיבית.
- עלות מופחתת: בדיקות הראו ששימוש בהוראה למערכת חשיבה ברמה 'נמוכה' יכול להפחית בכ-20% את מספר טוקני החשיבה שנוצרים.
- הוכחת היתכנות: ההתנהגות הזו היא תוצר לוואי של היכולת של המודל להגיב להנחיות, ולא של אימון ספציפי, ולכן אין הנחיה אחת 'מושלמת'. ההוראה LOW היא הוכחת היתכנות.
- התאמה אישית: אנחנו ממליצים למפתחים להתנסות בהוראות מערכת מותאמות אישית משלהם. אתם יכולים לכוונן את העומק, האורך והסגנון של תהליך החשיבה של המודל כדי ליצור איזון מושלם בין זמן האחזור, העלות ואיכות הפלט בתרחישים הספציפיים שלכם.