Gemini 3.8 Live הוא מודל לשיחות בזמן אמת שמיועד לאינטראקציות דו-כיווניות בקול ובווידאו עם זמן אחזור קצר, וליצירת אווטארים בזמן אמת לשיחות פנים אל פנים. Gemini 3.8 Live מיועד לתהליכי עבודה רציפים של שיחות, ומספק דיאלוג רגשי שמופעל כברירת מחדל, סינון אודיו יזום, כלים לחסימה עם ביטול אוטומטי ומעבר דינמי בין שפות.
כאן מוסבר על הנושאים הבאים:
- איך Gemini 3.8 Live משתלב במשפחת המודלים של Gemini.
- היכולות העיקריות בגרסה 3.8 Live.
- שילוב עם Google Gen AI SDK.
- כללים ומוסכמות נדרשים ל-API.
- מעבר ממודלים קודמים של Gemini Live API.
התפקיד בקבוצה המשפחתית ב-Gemini
3.8 Live מיועד לאינטראקציות בסטרימינג בזמן אמת. הוא פועל באמצעות WebSockets דו-כיווניים, מעבד דיבור, פידים של מצלמה בשידור חי ושידורי מסך עם זמן אחזור של פחות משנייה, תוך יצירת אודיו של 24kHz ודמויות וידאו מסונכרנות של 24FPS.
מפרטים והשוואות בין מודלים
בטבלה הבאה מוצגת השוואה בין המפרטים של גרסה 3.8 Live לבין המפרטים של גרסאות קודמות של Gemini Live API:
| מאפיין | Gemini 3.8 במצב לייב | Gemini 2.5 Flash Live API Native Audio (GA baseline) |
|---|---|---|
| מזהה המודל | gemini-3.8-live |
gemini-live-2.5-flash-native-audio |
| שלב ההשקה | זמינות לכלל המשתמשים (GA) | זמינות לכלל המשתמשים (GA) |
| אופני קלט | אודיו (PCM 16kHz), וידאו (JPEG 1FPS), טקסט | אודיו (PCM 16kHz), וידאו (JPEG FPS 1), טקסט |
| אופני פלט | אודיו (24 kHz PCM), וידאו (24 FPS MP4 Live Avatar), טקסט | אודיו (PCM 24kHz), טקסט |
| יצירת אווטאר בזמן אמת | פלט וידאו מסונכרן של 24 FPS | לא נתמך |
| שיחה מותאמת-רגש | מופעלת כברירת מחדל | נדרשת הגדרה מפורשת |
| סינון אודיו יזום | מופעל כברירת מחדל | נדרשת הגדרה מפורשת |
| הרצה של קריאה להפעלת פונקציות | חסימה אסינכרונית ללא חסימה וביטול אוטומטי של חסימה (behavior="BLOCKING") |
אסינכרוני וסינכרוני |
| טיפול בהתפרצות לשיחה | התאמה של ההתפרצות לדיבור (המתנה כשהמשתמש מדבר) | התפרצות מיידית (יכולה לחפוף לאודיו של המשתמש) |
| תמיכה בשפות | מעבר דינמי בין שפות נתמכות במהלך השידור | שפות נתמכות |
| הטיית דומיין | תמיכה ב-custom_vocabulary ב-AudioTranscriptionConfig |
תמלול בסיסי רגיל |
| פקד חזותי של טוקנים | media_resolution שניתן להגדיר (LOW, MEDIUM, HIGH) |
תקציב קבוע לטוקנים לכל פריים |
מתי כדאי להשתמש ב-Gemini 3.8 במצב לייב
כדאי להשתמש בגרסה 3.8 Live בתרחישים הבאים:
- צריך זמני אחזור קצרים בשיחה, החלפת תורות טבעית והתאוששות מהירה כשהמשתמש קוטע את השיחה (פריצה לשיחה).
- האפליקציה שלך קוראת לכלים חיצוניים וצריכה ביצוע ללא חסימה כדי שפלט האודיו יימשך בזמן שמערכות ה-Backend מעבדות בקשות.
- אתם רוצים לעבד אווטארים דיגיטליים מדברים עם אנימציה מסונכרנת של הפנים וליפסינק ב-24 FPS בלי צינורות עיבוד חיצוניים.
- המשתמשים שלכם מנהלים שיחות בכמה שפות, ולכן נדרש זיהוי שפה באמצע השיחה ומעבר בין השפות הנתמכות.
- אתם צריכים הטיית אוצר מילים ספציפית לדומיין בשביל מונחים טכניים, מק"טים או שמות של מותגים.
למפרט המלא ולמגבלות המכסות, עיינו בדף המודל 3.8 Live.
יכולות מרכזיות ב-Gemini 3.8 Live
גרסה 3.8 Live כוללת את היכולות הבאות:
סינתזת סרטונים עם אווטארים בזמן אמת ב-24 FPS: 3.8 Live יוצרת זרמי וידאו מסונכרנים בפורמט MP4 ב-24 FPS (
response_modalities=["VIDEO"]) ישירות מהפלט מהמודל. הבעות הפנים ותנועות השפתיים שנוצרות תואמות לדיבור המסונתז בזמן אמת.אתם יכולים להשתמש באווטרים מוכנים מראש או לספק תמונות רפרנס בהתאמה אישית כדי ליצור דמויות דיגיטליות של קונסיירז', נציגי שירות לקוחות, מורים וירטואליים או דמויות אינטראקטיביות. פרטים על ההגדרה מופיעים במאמר הגדרת אווטרים בזמן אמת.
שיחה מותאמת-רגש וסינון אודיו יזום מופעלים כברירת מחדל:
- דיאלוג רגשי: מופעל כברירת מחדל בגרסה 3.8 Live. המודל מעבד את הפרוזודיה האקוסטית, הרמזים הקוליים, ההפסקות והאינטונציה של הדיבור בקלט האודיו של המשתמש כדי להתאים את טון הדיבור וקצב השיחה.
- סינון אודיו יזום: מופעל כברירת מחדל בגרסה 3.8 Live. המודל מסנן רעשי סביבה ודיבור ברקע, ויוצר תשובות קוליות רק כשהמשתמש פונה אליו.
קריאה להפעלת פונקציות חסימה אסינכרונית עם ביטול אוטומטי: 3.8 Live מספקת התנהגויות של קריאה לכלים שנועדו לדיבור בזמן אמת:
- ביצוע אסינכרוני לא חוסם: כשהמודל יוצר קריאה לכלי, סשן האודיו נשאר פעיל כדי שהסוכן יוכל להזרים אישורי שיחה ("אני בודק את פרטי החשבון שלך...") ולטפל בקלט למעקב, בזמן שאפליקציית הלקוח קוראת לממשקי API של ה-Backend.
- ביטול אוטומטי של קריאות חסימה (
behavior="BLOCKING"): כשמגדיריםbehavior="BLOCKING"בהצהרה על פונקציה, היצירה מושהית עד שמגיעה התגובה מהכלי. אם מגיעה קלט חדש מהמשתמש בזמן שהשיחה החוסמת פועלת, שרת Gemini Live API מבטל את השיחה שממתינה. - טיפול מנומס בהפרעות: במודלים קודמים, החזרת תשובה מהכלי עם
scheduling="INTERRUPT"בזמן שהמשתמש דיבר חפפה לאודיו של המשתמש. בגרסה 3.8 Live, השרת משנמך את התזמון ל-WHEN_IDLEכשהמשתמש מדבר, ומשמיע את התשובה אחרי שהמשתמש מסיים לדבר.
מעבר דינמי בין שפות ואוצר מילים מותאם אישית:
- תמיכה בכמה שפות: זיהוי ומעבר בין השפות הנתמכות באמצע הסשן בלי להפעיל מחדש או להגדיר מחדש את החיבור.
- הטיה של אוצר מילים מותאם אישית: מקבלת מילות מפתח ספציפיות לדומיין, שמות עצם, מונחים רפואיים וקודי מוצרים ב-
AudioTranscriptionConfig(עדinput_audio_transcription) באמצעותcustom_vocabularyכדי לשפר את דיוק התמלול.
התאמה חזותית מולטימודלית עם שליטה ב-
media_resolution: מקבלת סטרימינג של וידאו בזמן אמת (פריימים של JPEG בקצב של FPS 1, רזולוציה מומלצת של768x768) ומאפשרת להגדיר אתmedia_resolution(MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM,MEDIA_RESOLUTION_HIGH) כדי לאזן בין השימוש בטוקנים לכל פריים לבין הפרטים החזותיים.
מדריך למתחילים
לפני שמתחילים, צריך לבצע אימות ב- Cloud de Confiance by S3NS באמצעות Application Default Credentials (ADC).
בדוגמת הקוד הבאה, מחליפים את PROJECT_ID במזהה הפרויקט ב- Cloud de Confiance .
התקנת ה-SDK
מתקינים או מעדכנים את ה-SDK של Google Gen AI ואת יחסי התלות של האודיו:
pip install --upgrade google-genai websockets numpy
איך מתחילים סשן דו-כיווני עם הפעלת כלים אסינכרונית
בדוגמה הבאה מוגדר סשן בזמן אמת עם gemini-3.8-live, מוגדרת הטיה של אוצר מילים מותאם אישית ומופעלות קריאות אסינכרוניות לפונקציות שלא חוסמות:
import asyncio
from google import genai
from google.genai import types
PROJECT_ID = "PROJECT_ID"
LOCATION = "us-central1"
MODEL_ID = "gemini-3.8-live"
# Initialize the Gen AI client for enterprise.
client = genai.Client(enterprise=True, project=PROJECT_ID, location=LOCATION)
# Define a tool for asynchronous execution.
order_lookup_tool = types.FunctionDeclaration(
name="lookup_order_status",
description="Fetches real-time shipping status for a customer order ID.",
parameters=types.Schema(
type="OBJECT",
properties={
"order_id": types.Schema(
type="STRING",
description="The order ID, for example, ORD-8472",
),
},
required=["order_id"],
),
)
# Configure the live connection.
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
system_instruction=types.Content(
parts=[
types.Part.from_text(
text=(
"You are an enterprise concierge. When you call a tool, "
"briefly acknowledge the request and tell the user what you're doing. "
"If a tool returns no results, inform the user before trying again. "
"Never issue more than two consecutive tool calls without speaking."
)
)
]
),
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(voice_name="Aoede")
),
),
input_audio_transcription=types.AudioTranscriptionConfig(
custom_vocabulary=["ORD-8472", "Gemini Live", "Express Shipping"]
),
output_audio_transcription=types.AudioTranscriptionConfig(),
tools=[types.Tool(function_declarations=[order_lookup_tool])],
)
async def handle_tool_call(session, function_call):
"""Executes backend calls asynchronously without blocking incoming audio."""
order_id = function_call.args.get("order_id", "")
await asyncio.sleep(2.0) # Simulate backend API latency.
if not order_id.startswith("ORD-"):
result = {
"status": "invalid_argument",
"retryable": False,
"message": f"Order ID '{order_id}' is invalid. Ask the user to verify.",
}
else:
result = {
"status": "ok",
"retryable": False,
"order_id": order_id,
"shipping_status": "Out for delivery by 4:00 PM",
}
# Send tool response matching the call ID.
await session.send_tool_response(
function_responses=[
types.FunctionResponse(
id=function_call.id,
name=function_call.name,
response=result,
)
]
)
async def main():
async with client.aio.live.connect(model=MODEL_ID, config=config) as session:
print(f"Connected to {MODEL_ID}")
# Send initial text or stream 16 kHz PCM audio chunks.
await session.send_realtime_input(
text="Hi! Can you check the status of order ORD-8472?"
)
async for message in session.receive():
# Handle asynchronous tool calls.
if message.tool_call:
for call in message.tool_call.function_calls:
asyncio.create_task(handle_tool_call(session, call))
# Process audio output chunks and transcriptions.
if message.server_content:
if (
message.server_content.output_transcription
and message.server_content.output_transcription.text
):
print(
f"Agent: {message.server_content.output_transcription.text}",
end="",
flush=True,
)
if __name__ == "__main__":
asyncio.run(main())
כללים ומוסכמות נדרשים של API
כשמפתחים באמצעות גרסה 3.8 של ממשק ה-API בזמן אמת, צריך לפעול לפי המוסכמות הבאות של ה-API:
- תגובות אינפורמטיביות של פונקציות: אל תחזירו מתוך handler של כלי מילון ריק (
{}) אוNone. אם כלי מחזיר שגיאה או מטען ייעודי (payload) ריק, גרסה 3.8 Live עשויה ליצור קריאות חוזרות לפונקציה עם ארגומנטים ששונו, אלא אם התשובה כוללת שדות סטטוס. החזרת שדות מובנים בכל תשובה מהכלי:-
status: מחרוזת סטטוס בפורמט קריא למכונה, כמו"ok","no_results"או"invalid_argument". -
retryable: הערךfalseמוגדר כשחזרה על הקריאה מחזירה את אותה התוצאה. -
messageאוguidance: טקסט שמציין את הסטטוס שידווח למשתמש.
-
- מגבלות על ניסיונות חוזרים של כלים ברמת ההנחיה: הוסיפו מגבלה על ניסיונות חוזרים ב-
system_instruction. לדוגמה: "אם קריאה לכלי לא מחזירה תוצאות, צריך להודיע למשתמש במקום לחפש שוב ושוב עם וריאציות של פרמטרים. לעולם אל תפעיל יותר משתי קריאות רצופות לפונקציות בלי לדבר עם המשתמש". - התאמה
FunctionResponseמדויקת:- כל תור של
FunctionResponseחייב לספק את ה-idהמדויק מה-FunctionCallהקודם. - מעבירים אובייקטים של תגובה ישירות ב-
FunctionResponse.response.
- כל תור של
- פורמטים של סטרימינג של אודיו:
- קלט אודיו: 16 kHz, 16 ביט, little-endian, PCM מונופוני (
audio/pcm;rate=16000), מוזרם בחלקים של 20 ms עד 100 ms. - פלט אודיו: 24 kHz מונו PCM.
- קלט אודיו: 16 kHz, 16 ביט, little-endian, PCM מונופוני (
- הסרת פרמטרים מדור קודם: אל תעבירו את
enable_affective_dialogאו אתproactivityבהגדרה. התכונות האלה מופעלות כברירת מחדל בגרסה 3.8 Live. - הזנת היסטוריית שיחות: אם אתם מזינים היסטוריה של כמה פניות באמצעות
send_client_content, המתינו עד שאפליקציית הלקוח תקבל את המסגרת של השרתsetup_completeותגדיר אתHistoryConfig(initial_history_in_client_content=True).
מעבר ל-Gemini 3.8 Live
מידע נוסף על המעבר מ-gemini-live-2.5-flash-native-audio ל-gemini-3.8-live זמין במאמר מעבר מ-Gemini 2.5 Flash Live API Native Audio ל-Gemini 3.8 Live.
רשימת משימות למפתחים
לפני שפורסים את האפליקציה, חשוב לוודא את הדברים הבאים:
מקורות מידע נוספים
מידע נוסף זמין במקורות המידע הבאים: