מעבר מ-Gemini 2.5 Flash Live API Native Audio ל-Gemini 3.8 Live

במסמך הזה מתוארים השינויים שנדרשים כשעוברים מ-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_level
  • enable_affective_dialog
  • proactivity

אנחנו ממליצים לנקוט משנה זהירות כשמשתמשים בתוסף 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 הגיוני.

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