Multimodal Live API מאפשר אינטראקציות דו-כיווניות בווידאו ובקול עם זמן אחזור נמוך באמצעות Gemini. באמצעות Multimodal Live API, תוכלו לספק למשתמשי הקצה חוויה של שיחות קוליות טבעיות דמויות-אנושיות, וגם את היכולת להפריע לתשובות של המודל באמצעות פקודות קוליות. המודל יכול לעבד קלט של טקסט, אודיו ווידאו, ולספק פלט של טקסט ואודיו.
יכולות
Multimodal Live API כולל את היכולות העיקריות הבאות:
- מולטימודליות: המודל יכול לראות, לשמוע ולדבר.
- אינטראקציה בזמן אמת עם זמן אחזור נמוך: תקבלו תשובות מהירות.
- זיכרון סשן: המודל שומר את הזיכרון של כל האינטראקציות בסשן יחיד, ומזכיר מידע ששמעתם או ראיתם בעבר.
- תמיכה בקריאה לפונקציות, בהרצת קוד וב'חיפוש ככלי': מאפשרת שילוב עם שירותים חיצוניים ומקורות נתונים.
- זיהוי אוטומטי של פעילות קול (VAD): המודל יכול לזהות במדויק את הרגעים שבהם המשתמש מתחיל ומפסיק לדבר. כך אפשר ליצור אינטראקציות טבעיות ושיחות, ומשתמשים יכולים להפסיק את המודל בכל שלב.
אתם יכולים לנסות את Multimodal Live API ב-Google AI Studio.
שנתחיל?
Multimodal Live API הוא ממשק API עם מצב שמשתמש ב-WebSockets.
בקטע הזה נספק דוגמה לשימוש ב-Multimodal Live API ליצירת טקסט מטקסט, באמצעות Python מגרסה 3.9 ואילך.
התקנת ספריית Gemini API
כדי להתקין את החבילה google-genai
, משתמשים בפקודה pip
הבאה:
!pip3 install google-genai
ייבוא יחסי תלות
כדי לייבא יחסי תלות:
from google import genai
שליחה וקבלה של הודעת טקסט
import asyncio
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY", http_options={'api_version': 'v1alpha'})
model_id = "gemini-2.0-flash-exp"
config = {"response_modalities": ["TEXT"]}
async def main():
async with client.aio.live.connect(model=model_id, config=config) as session:
while True:
message = input("User> ")
if message.lower() == "exit":
break
await session.send(message, end_of_turn=True)
async for response in session.receive():
if response.text is None:
continue
print(response.text, end="")
if __name__ == "__main__":
asyncio.run(main())
מדריך לשילוב
בקטע הזה נסביר איך פועל השילוב עם Multimodal Live API.
ביקורים
סשן מייצג חיבור WebSocket יחיד בין הלקוח לבין שרת Gemini.
אחרי שלקוח יוצר חיבור חדש, הסשן יכול להחליף הודעות עם השרת כדי:
- שליחת טקסט, אודיו או וידאו לשרת Gemini.
- לקבל תשובות מהשרת של Gemini בצורת אודיו, טקסט או קריאה לפונקציה.
הגדרת הסשן נשלחת בהודעה הראשונה אחרי החיבור. הגדרת הסשן כוללת את המודל, פרמטרים ליצירה, הוראות מערכת וכלים.
דוגמה להגדרה:
{
"model": string,
"generation_config": {
"candidate_count": integer,
"max_output_tokens": integer,
"temperature": number,
"top_p": number,
"top_k": integer,
"presence_penalty": number,
"frequency_penalty": number,
"response_modalities": string,
"speech_config":object
},
"system_instruction": "",
"tools":[]
}
מידע נוסף זמין במאמר BidiGenerateContentSetup.
שליחת הודעות
ההודעות הן מחרוזות בפורמט JSON שמתחלפות בחיבור WebSocket.
כדי לשלוח הודעה, הלקוח צריך לשלוח הודעת לקוח נתמכת במחרוזת בפורמט JSON באמצעות אחד מהם בחיבור WebSocket פתוח.
הודעות לקוח נתמכות
בטבלה הבאה מפורטות ההודעות הנתמכות מהלקוח:
הודעה | תיאור |
---|---|
BidiGenerateContentSetup |
הגדרות הסשן שיישלחו בהודעה הראשונה |
BidiGenerateContentClientContent |
עדכון מצטבר של התוכן של השיחה הנוכחית שנשלח מהלקוח |
BidiGenerateContentRealtimeInput |
קלט אודיו או וידאו בזמן אמת |
BidiGenerateContentToolResponse |
תגובה להודעה ToolCallMessage שהתקבלה מהשרת |
קבלת הודעות
כדי לקבל הודעות מ-Gemini, צריך להאזין לאירוע 'message' ב-WebSocket, ואז לנתח את התוצאה בהתאם להגדרה של הודעות השרת הנתמכות.
אפשר לעיין במאמרים הבאים:
ws.addEventListener("message", async (evt) => {
if (evt.data instanceof Blob) {
// Process the received data (audio, video, etc.)
} else {
// Process JSON response
}
});
הודעות שרת נתמכות
בטבלה הבאה מפורטות הודעות השרת הנתמכות:
הודעה | תיאור |
---|---|
BidiGenerateContentSetupComplete |
הודעת BidiGenerateContentSetup מהלקוח, שנשלחת בסיום ההתקנה |
BidiGenerateContentServerContent |
תוכן שנוצר על ידי המודל בתגובה להודעה של לקוח |
BidiGenerateContentToolCall |
בקשה ללקוח להריץ את קריאות הפונקציה ולהחזיר את התשובות עם המזהים התואמים |
BidiGenerateContentToolCallCancellation |
ההודעה נשלחת כשקריאה לפונקציה מבוטלת כי המשתמש מפריע לפלט של המודל |
עדכוני תוכן מצטברים
שימוש בעדכונים מצטברים כדי לשלוח קלט טקסט, ליצור או לשחזר את ההקשר של הסשן. בהקשרים קצרים, אפשר לשלוח אינטראקציות מפורטות כדי לייצג את רצף האירועים המדויק. בהקשרים ארוכים יותר מומלץ לספק סיכום בהודעה אחת כדי לפנות מקום בחלון הקשר לאינטראקציות הבאות.
הודעה לדוגמה עם הקשר:
{
"client_content": {
"turns": [
{
"parts":[
{
"text": ""
}
],
"role":"user"
},
{
"parts":[
{
"text": ""
}
],
"role":"model"
}
],
"turn_complete": true
}
}
שימו לב: חלקי התוכן יכולים להיות מסוג functionResponse
, אבל אסור להשתמש ב-BidiGenerateContentClientContent
כדי לספק תגובה לקריאות הפונקציה שהמודל מנפיק. במקום זאת, צריך להשתמש ב-BidiGenerateContentToolResponse
. צריך להשתמש ב-BidiGenerateContentClientContent
רק כדי להגדיר את ההקשר הקודם או כדי לספק קלט טקסט לשיחה.
סטרימינג של אודיו ווידאו
קריאה לפונקציה
צריך להצהיר על כל הפונקציות בתחילת הסשן על ידי שליחת הגדרות של כלים כחלק מההודעה BidiGenerateContentSetup
.
מידע נוסף על קריאה לפונקציות זמין במדריך בנושא קריאה לפונקציות.
מהנחיה אחת, המודל יכול ליצור מספר קריאות לפונקציות ואת הקוד הנדרש כדי לשרשר את הפלט שלהן. הקוד הזה מופעל בסביבת חול (sandbox), ויוצר הודעות BidiGenerateContentToolCall
. הביצוע מושהה עד שהתוצאות של כל קריאה לפונקציה יהיו זמינות, וכך מובטח עיבוד רציף.
הלקוח צריך להשיב ב-BidiGenerateContentToolResponse
.
מקורות קלט ופלט של אודיו משפיעים לרעה על היכולת של המודל להשתמש בקריאה לפונקציות.
פורמטים של אודיו
Multimodal Live API תומך בפורמטים הבאים של אודיו:
- פורמט אודיו לקלט: אודיו PCM גולמי של 16 ביט ב-16kHz little-endian
- פורמט אודיו בפלט: אודיו PCM גולמי של 16 ביט בקצב 24kHz ב-little-endian
הוראות למערכת
אתם יכולים לספק הוראות למערכת כדי לשלוט טוב יותר בפלט של המודל ולציין את הטון ואת הרגש של התשובות הקוליות.
הוראות המערכת מתווספות להנחיה לפני תחילת האינטראקציה, ונשארות בתוקף במשך כל הסשן.
אפשר להגדיר הוראות מערכת רק בתחילת סשן, מיד אחרי החיבור הראשוני. כדי לספק קלט נוסף למודל במהלך הסשן, אפשר להשתמש בעדכוני תוכן מצטברים.
הפרעות
המשתמשים יכולים להפסיק את הפלט של המודל בכל שלב. כשהמערכת לזיהוי פעילות קול (VAD) מזהה הפרעה, היצירה המתמשכת מבוטלת ונמחקת. רק המידע שכבר נשלח ללקוח נשמר בהיסטוריית הסשנים. לאחר מכן השרת שולח הודעה מסוג BidiGenerateContentServerContent
כדי לדווח על ההפרעה.
בנוסף, שרת Gemini משמיד את כל הקריאות לפונקציות בהמתנה ושולח הודעה מסוג BidiGenerateContentServerContent
עם המזהים של הקריאות שבוטלו.
קולות
Multimodal Live API תומך בקולות הבאים: Aoede, Charon, Fenrir, Kore ו-Puck.
כדי לציין קול, מגדירים את voice_name
בתוך האובייקט speech_config
, כחלק מהגדרת הסשן.
זוהי הייצוג של אובייקט speech_config
ב-JSON:
{
"voice_config": {
"prebuilt_voice_config ": {
"voice_name": <var>VOICE_NAME</var>
}
}
}
מגבלות
כשמתכננים את הפרויקט, חשוב לקחת בחשבון את המגבלות הבאות של Multimodal Live API ו-Gemini 2.0.
אימות לקוח
Multimodal Live API מספק אימות רק בין שרתים, ולא מומלץ לשימוש ישיר בלקוח. כדי לבצע אימות מאובטח באמצעות Multimodal Live API, צריך לנתב את הקלט של הלקוח דרך שרת אפליקציות ביניים.
לאפליקציות לאינטרנט ולנייד, מומלץ להשתמש בשילוב של השותפים שלנו ב-Daily.
היסטוריית השיחות
המודל עוקב אחרי אינטראקציות במהלך הסשן, אבל היסטוריית השיחות לא נשמרת. כשסשן מסתיים, ההקשר התואם נמחק.
כדי לשחזר סשן קודם או לספק למודל הקשר היסטורי של אינטראקציות של משתמשים, האפליקציה צריכה לנהל יומן שיחות משלה ולהשתמש בהודעת BidiGenerateContentClientContent
כדי לשלוח את המידע הזה בתחילת סשן חדש.
משך הסשן המקסימלי
משך הסשן מוגבל ל-15 דקות עבור אודיו או ל-2 דקות עבור אודיו ווידאו. כשמשך הסשן חורג מהמגבלה, החיבור מסתיים.
המודל מוגבל גם על ידי גודל ההקשר. שליחת קטעי תוכן גדולים לצד הסטרימינג של הווידאו והאודיו עלולה לגרום לסיום מוקדם יותר של הסשן.
זיהוי פעילות קול (VAD)
המודל מבצע זיהוי אוטומטי של פעילות קול (VAD) על מקור קלט אודיו רציף. VAD תמיד מופעל, ואי אפשר לשנות את הפרמטרים שלו.
מספר הטוקנים
אין תמיכה בספירת אסימונים.
הגבלות קצב
חלות עליך מגבלות הקצב הבאות:
- 3 סשנים בו-זמנית לכל מפתח API
- 4 מיליון טוקנים לדקה
הודעות ואירועים
BidiGenerateContentClientContent
עדכון מצטבר של השיחה הנוכחית שנשלח מהלקוח. כל התוכן הזה מצורף ללא תנאים להיסטוריית השיחות, ומשמש כחלק מההנחיה למודל ליצירת תוכן.
הודעה כאן תפריע ליצירת מודל כלשהי.
שדות | |
---|---|
turns[] |
זה שינוי אופציונלי. התוכן שמצורף לשיחה הנוכחית עם המודל. בשאילתות של תור אחד, זהו מופע יחיד. בשאילתות עם כמה שלבים, זהו שדה חוזר שמכיל את היסטוריית השיחה ואת הבקשה האחרונה. |
turn_ |
זה שינוי אופציונלי. אם הערך הוא true, המשמעות היא שיצירת התוכן בשרת צריכה להתחיל עם ההנחיה שנצברה כרגע. אחרת, השרת ימתין להודעות נוספות לפני שהוא יתחיל את היצירה. |
BidiGenerateContentRealtimeInput
קלט של משתמש שנשלח בזמן אמת.
יש כמה הבדלים בין BidiGenerateContentClientContent
לבין BidiGenerateContentClientContent
:
- ניתן לשלוח אותם באופן רציף ללא הפרעה ליצירת המודל.
- אם יש צורך לשלב נתונים שמקובצים בין
BidiGenerateContentClientContent
ל-BidiGenerateContentRealtimeInput
, השרת מנסה לבצע אופטימיזציה כדי לקבל את התגובה הטובה ביותר, אבל אין ערובה לכך. - סיום תורו לא מצוין באופן מפורש, אלא נגזר מפעילות המשתמש (לדוגמה, סיום הדיבור).
- עוד לפני סיום התור, הנתונים עוברים עיבוד מצטבר כדי לבצע אופטימיזציה להתחלה מהירה של התשובה מהמודל.
- תמיד מגיע ישירות מהמשתמשים ונשלח בזמן אמת. אפשר לשלוח אותם ברציפות ללא הפסקות. המודל מזהה באופן אוטומטי את תחילת הדיבור של המשתמש ואת סיום הדיבור שלו, ומתחיל או מפסיק את הסטרימינג של התשובה בהתאם. הנתונים מעובדים באופן מצטבר כשהם מגיעים, כדי לצמצם את זמן האחזור.
שדות | |
---|---|
media_ |
זה שינוי אופציונלי. נתוני בייט מוטמעים לקלט מדיה. |
BidiGenerateContentServerContent
עדכון מצטבר של השרת שנוצר על ידי המודל בתגובה להודעות של לקוחות.
התוכן נוצר במהירות האפשרית, ולא בזמן אמת. לקוחות יכולים לבחור לאגור את הנתונים ולנגן אותם בזמן אמת.
שדות | |
---|---|
turn_ |
פלט בלבד. אם הערך הוא True, המשמעות היא שהמודל הושלם. היצירה תתחיל רק בתגובה להודעות נוספות מהלקוח. אפשר להגדיר אותו לצד |
interrupted |
פלט בלבד. אם הערך הוא true, המשמעות היא שהודעה של לקוח הפריעה ליצירת המודל הנוכחית. אם הלקוח מפעיל את התוכן בזמן אמת, זה סימן טוב להפסיק ולרוקן את תור ההפעלה הנוכחי. |
grounding_ |
פלט בלבד. מטא-נתונים של התוכן שנוצר. |
model_ |
פלט בלבד. התוכן שהמודל יצר כחלק מהשיחה הנוכחית עם המשתמש. |
BidiGenerateContentSetup
ההודעה שתישלח בהודעת הלקוח הראשונה והיחידה. מכיל הגדרות שחלות למשך סשן הסטרימינג.
לקוחות צריכים להמתין להודעה BidiGenerateContentSetupComplete
לפני שליחת הודעות נוספות.
שדות | |
---|---|
model |
חובה. שם המשאב של הדגם. זהו מזהה שמשמש את המודל. פורמט: |
generation_ |
זה שינוי אופציונלי. הגדרות היצירה. אין תמיכה בשדות הבאים:
|
system_ |
זה שינוי אופציונלי. המשתמש סיפק הוראות מערכת עבור המודל. הערה: צריך להשתמש רק בטקסט בחלקים, והתוכן בכל חלק יהיה בפסקה נפרדת. |
tools[] |
זה שינוי אופציונלי. רשימה של
|
BidiGenerateContentSetupComplete
אין שדות לסוג הזה.
נשלחה בתגובה להודעת BidiGenerateContentSetup
מהלקוח.
BidiGenerateContentToolCall
מבקשים מהלקוח להריץ את function_calls
ולהחזיר את התשובות עם הערכים התואמים של id
.
שדות | |
---|---|
function_ |
פלט בלבד. קריאת הפונקציה שרוצים לבצע. |
BidiGenerateContentToolCallCancellation
הודעה ללקוח על כך ש-ToolCallMessage
שהונפק בעבר עם הערכים של id
שצוינו לא היה אמור להתבצע וצריך לבטל אותו. אם היו תופעות לוואי לקריאות האלה לכלי, לקוחות עשויים לנסות לבטל את הקריאות לכלי. ההודעה הזו מופיעה רק במקרים שבהם הלקוחות מפריעים לתור של השרת.
שדות | |
---|---|
ids[] |
פלט בלבד. המזהים של הקריאות לכלי שרוצים לבטל. |
BidiGenerateContentToolResponse
תגובה שנוצרה על ידי הלקוח לתגובה ToolCall
שהתקבלה מהשרת. אובייקטים ספציפיים מסוג FunctionResponse
מותאמים לאובייקטים המתאימים מסוג FunctionCall
באמצעות השדה id
.
חשוב לזכור שבקריאות לפונקציות של ממשקי GenerateContent API חד-כיווניים ושל ממשקי GenerateContent API בסטרימינג לשרת, הקריאה מתבצעת על ידי החלפה של החלקים Content
, ואילו בקריאות לפונקציות של ממשקי GenerateContent API דו-כיווניים, הקריאה מתבצעת באמצעות קבוצת ההודעות הייעודית הזו.
שדות | |
---|---|
function_ |
זה שינוי אופציונלי. התגובה לקריאות הפונקציה. |
מידע נוסף על סוגי קבצים נפוצים
מידע נוסף על סוגי המשאבים הנפוצים של ממשקי API, Blob
, Content
, FunctionCall
, FunctionResponse
, GenerationConfig
, GroundingMetadata
ו-Tool
, זמין במאמר יצירת תוכן.