במסמך הזה מתוארים השינויים שנדרשים כשעוברים מ-Gemini 2.5 Flash Live API Native Audio ל-Gemini 3.8 Live.
שינויים בבקשות להפעלת פונקציות
שרת האודיו המקורי של Gemini 2.5 Flash Live API מאפשר קריאות אסינכרוניות לכלים. לעומת זאת, Gemini 3.8 Live תומך בהפעלת פונקציות אסינכרוניות עם השינויים הבאים בהתנהגות:
Gemini 3.8 Live תומך בפונקציית חסימה של קריאות לפונקציות כשההצהרה על הפונקציה מציינת
behavior=BLOCKINGבהגדרה. אם מתקבל קלט חדש במהלך ההפעלה של פונקציית החסימה, שרת Live API מבטל את הקריאה הנוכחית לפונקציה.התנהגות האפשרות
scheduling=interruptהשתנתה לFunctionResponse:תזמון FunctionResponseמי מדבר Gemini 2.5 Flash Live API Native Audio Gemini 3.8 במצב לייב להפריע מודל מפסיק את התגובה של המודל הפעיל באופן מיידי ומפעיל את התגובה של הכלי. מפסיק את התגובה של המודל הפעיל באופן מיידי ומפעיל את התגובה של הכלי. להפריע משתמש התשובה של הכלי תושמע מיד ותקטע את מה שהמשתמש אומר. מחכה שהמשתמש יסיים לפני שמנגן את התגובה של הכלי.
הפחתת סריקות מיותרות וניסיונות חוזרים של קריאות לפונקציות
לפעמים, Gemini 3.8 Live מבצע כמה קריאות מיותרות לפונקציות ברצף במהלך תור אחד, כשכלי לא מחזיר תוצאות. הפעולה הזו יכולה לכלול חזרה על פרמטרים שונים, סריקה של שניים עד חמישה פרמטרים לפני מתן תשובה. ההתנהגות הזו מאריכה את הזמן עד להשמעת האודיו הראשון (TTFA) ומייצרת דיבור לא מדויק כגיבוי.
הקריאות החוזרות והמיותרות לפונקציות נגרמות בגלל ניסיון של Gemini 3.8 Live לפתור שאילתות. כשכלי מחזיר תגובה לא אינפורמטיבית או ריקה, כמו {"results": [], "total_available": 0} או None, המודל לא יכול להבחין בין "השימוש בכלי מוצה", "חלון השאילתה צר מדי" או "ארגומנט לא תקין". המודל מנסה להרחיב או לשנות את השאילתה כדי לשפר את התוצאות, ומתחיל לסרוק.
יישום שיטות עבודה משלימות:
החזרת תשובות אינפורמטיביות של פונקציות: כל תשובה של כלי צריכה להכיל מידע על השגיאה או על התוצאות, כדי להנחות את מודל Gemini 3.8 Live לגבי המשך הפעולה.
בטבלה הבאה מתוארים המקרים, איך המודל צריך להגיב ודוגמה למטען ייעודי (payload) שנדרש כדי לעזור למודל:
Case מה המודל צריך לעשות תוכן חובה במטען הייעודי (payload) שאילתה תקינה שלא מחזירה תוצאות. ניסיון חוזר לא יעזור. להפסיק את החיפוש, להודיע למשתמש ולהציע חלופות. status: 'no_results',
retryable: false,
והודעה ברורה בשפה טבעית.ארגומנט לא תקין או לא קיים (לדוגמה, 'ספק שגוי'). מפסיקים לחפש ומבקשים מהמשתמש להבהיר או לאשר. status: 'invalid_argument',
reason_code,
retryable: falseוגם
valid_optionsרשימהשאילתה תקינה עם חלון ריק. שאילתה רחבה יותר באמת עוזרת. מבצעים ניסיון חוזר סביר אחד. status: 'no_results_in_range',
retryable: trueוגם
retry_hintבדוגמה הבאה מוצג מטען ייעודי לדוגמה שבו מתבצעת קריאה ל-
search_appointment, אבל כל התאריכים האפשריים לא זמינים. המשתמש מצפה לנסות ספק במקום להציג את כל התאריכים:def search_appointment(vendor: str, date: Datetime): # BEFORE (Invites Sweeping): { "results": [], "total_available": 0 } # AFTER - Exhausted / Dead End (Stops Sweeping): { "results": [], "status": "no_availability", "retryable": false, "message": "No appointments are available for this provider for the foreseeable future. Searching other dates will not surface anything; openings only come from cancellations.", "suggested_next_step": "offer_waitlist_or_a_different_provider" } # AFTER - Invalid Argument (Prompts User Clarification): { "results": [], "status": "invalid_argument", "reason": "no_such_provider", "retryable": false, "message": "There is no provider named 'Mr. Johnson'. Ask the caller to confirm the name.", "valid_options": ["Dr. Johnson", "Dr. Chen"] }בדוגמה הבאה מוצג טיפול במצב שבו הפונקציה
check_user_accountלא מחזירה התאמות מדויקות. התוצאה הצפויה היא לשנות את שאילתת החיפוש או להעביר את השליטה בחזרה למשתמש במקום לנסות שוב:def check_user_account(user_name: str, phone_suffix: str):... # Checked user account but not existing # BEFORE: insufficient error information { "found": false, "matches": [] } # AFTER: providing sufficient information to the LiveAPI to avoid further retries because the retries have been exhausted. { "status": "EXHAUSTED", "retryable": false, "search_criteria": { "name": "Alex Rivera", "phone_suffix": "4921" }, "search_scope": "Checked active orders, archived accounts, and guest checkouts across all regions.", "guidance": "Exhaustive search completed with 0 matches. Do NOT retry with parameter substrings or variations. Inform the user that no account was found matching those details, and ask if they have an Order ID or billing email." }מדיניות ניסיון חוזר של הוראות המערכת: כדי לקבל תשובות אינפורמטיביות, צריך להוסיף להוראות המערכת אילוץ מפורש:
"When a tool returns no results, tell the user the result before calling the tool again. If a call fails for a reason fundamental to the arguments (for example, the entity does not exist), do not silently retry with variations; ask the user to clarify or confirm. You may broaden a query once when a result set is simply empty. Do not run repeated searches with different parameters on your own initiative. Hard cap: Never issue more than two consecutive function calls without saying something back to the user."
החלפת היסטוריית שיחות
ב-Gemini 2.5 Flash Live API Native Audio, send_client_content משמש להגדרת היסטוריית ההקשר לפני התור הראשון, ולהוספת היסטוריה נוספת במהלך הפעלת הסשן.
ב-Gemini 3.8 Live, אם רוצים להשתמש בשיטה send_client_content כדי להגדיר את ההזנה של ההיסטוריה, צריך להגדיר את initial_history_in_client_content=True בקטע HistoryConfig של הודעת ההגדרה. אחרי שמקבלים את setup_complete.
אחרי כן, אפשר להתקשר אל send_client_content שוב ושוב כדי ליצור היסטוריה עד להודעה האחרונה שבה מוגדר turn_complete=True.
הבדלים בהתנהגות של המודלים
בטבלה הבאה מתוארים ההבדלים בהתנהגות המודלים של אודיו, מולטימודל ופלט בין Gemini 2.5 Flash Live API Native Audio לבין Gemini 3.8 Live:
| התכונה | Gemini 2.5 Flash Live API Native Audio | Gemini 3.8 במצב לייב |
|---|---|---|
| שיחה מותאמת-רגש | נתמך באמצעות הסימון enable_affective_dialog. |
ההגדרה הזו תמיד מופעלת כברירת מחדל. |
| סינון אודיו יזום | נתמך באמצעות הסימון proactivity. |
ההגדרה הזו תמיד מופעלת כברירת מחדל. |
| טוקנים של תמונות או פריים | הקטנת תקציב ברירת המחדל לכל פריים. | תמיד יש תמיכה ב-media_resolution כשמעבירים פריימים של תמונות. מאפשרת לכם לאזן בין עלות לבין דיוק. |
| תמלול ותוכן | תמלול בסיסי יציב. |
אפשר להוסיף custom_vocabulary כדי להטות את המילים הספציפיות לדומיין ולשפר את הדיוק.
|
בדוגמה הבאה של קוד Python אפשר לראות איך מגדירים את media_resolution ואת custom_vocabulary:
# Example: Setting media_resolution for image frames in Gemini 3.8 Live
from google import genai
from google.genai import types
client = genai.Client()
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
media_resolution=types.MediaResolution.MEDIA_RESOLUTION_LOW, # or MEDIA_RESOLUTION_LOW or MEDIA_RESOLUTION_MEDIUM
)
async with client.aio.live.connect(
model="gemini-3.8-live",
config=config,
) as session:
# Send image frames with the configured resolution budget
...
# Example: Setting custom_vocabulary for domain-specific word biasing in Gemini 3.8 Live
from google import genai
from google.genai import types
client = genai.Client()
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
input_audio_transcription=types.AudioTranscriptionConfig(
custom_vocabulary=["Gemini", "MagicWord", "Lagrangian"],
),
)
async with client.aio.live.connect(
model="gemini-3.8-live",
config=config,
) as session:
...
תאימות למסגרות של צד שלישי
בקטעים הבאים מוסבר איך פועלות מסגרות של צד שלישי עם Gemini 3.8 Live:
LiveKit
התוסף Google של LiveKit RealtimeModel תומך ב-Gemini 3.8 Live, אבל ההגדרות הבאות לא נתמכות בתוסף Google של LiveKit:
thinking_levelenable_affective_dialogproactivity
אנחנו ממליצים לנקוט משנה זהירות כשמשתמשים בתוסף Google של LiveKit, כי צריך להתאים אותו בקפידה כדי שהוא יפעל עם Gemini 3.8 Live.
Pipecat
Pipecat תומך ב-Gemini 3.8 Live, עם השינויים הבאים:
הגדרת חשיבה: מסירים את רמת ההעמקה כי היא לא נתמכת ב-Gemini 3.8 Live.
Pipecat מחבר נקודות קצה של פלטפורמת הסוכנים באמצעות המחבר
GoogleVertexLLMServiceדרךGeminiLiveLLMService.
טלמטריה של שימוש בטוקנים ברמת החוט
כל תור של השרת מחזיר usage_metadata פריים. התכונה הזו פועלת באופן עקבי ב-Gemini 2.5 Flash Live API Native Audio וב-Gemini 3.8 Live. מטא-נתוני השימוש מחולקים לקטגוריות, כמו טוקן במטמון, טוקן לשימוש בכלי, טוקנים במודלים שונים וכן הלאה.
מגבלות ידועות של המודל ודרכים לעקיפת הבעיות
מידע על מגבלות ידועות ופתרונות אפשריים כשמפתחים אפליקציות באמצעות Gemini 3.8 Live זמין במאמר מגבלות ידועות.
רשימת משימות להעברה
בהמשך מופיעה רשימת משימות להעברת לקוחות, שבה תוכלו להשתמש כשאתם מעבירים מ-Gemini 2.5 Flash Live API Native Audio ל-Gemini 3.8 Live:
בקשה להפעלת פונקציה:
תשובות אינפורמטיביות של כלים: לארגן את הקוד מחדש של כל רכיבי ה-handler של הכלים כדי להחזיר קודי סטטוס מפורשים, דגלים שאפשר לנסות שוב והסברים בשפה טבעית. אף פעם לא מחזירים
Noneאו{}ריקים.מדיניות הוראות המערכת: הוספת אילוצים מפורשים שאוסרים על ניסיונות חוזרים של כלי ללא ידיעת המשתמש, מחייבים אישור מהמשתמש במקרה של כשל בארגומנט ומגבילים את מספר הקריאות הרצופות לכלי.
התאמה של מזהה קריאה לכלי: מוודאים ש-
FunctionResponseמעביר אתid=fc.idבכל תשובה של הכלי.שינוי בהתנהגות של תזמון הפונקציות: כשהמשתמש מדבר,
scheduling=interruptעובר אוטומטית ל-scheduling=when_idleכדי לספק חוויית משתמש חלקה יותר.
סשן: הגבלת
send_client_content: משתמשים ב-send_client_contentכדי להגדיר את ההיסטוריה הראשונית על ידי ציוןHistoryConfigהגיוני.חשיבה: הסרת טריקים לחשיבה ברמת ההנחיה: כדי למנוע השמטה של אודיו, צריך להסיר את כל הטקסט של ההנחיה שמנסה לאכוף סכימות של חשיבה שלב אחר שלב או מגבלות של טוקנים.