API Multimodal Live mundëson ndërveprime dydrejtimëshe me zë dhe video me vonesë të ulët me Gemini. Duke përdorur Multimodal Live API, ju mund t'u ofroni përdoruesve të fundit përvojën e bisedave zanore natyrale, të ngjashme me njerëzit, dhe aftësinë për të ndërprerë përgjigjet e modelit duke përdorur komandat zanore. Modeli mund të përpunojë hyrjen e tekstit, audio dhe video, dhe mund të sigurojë dalje teksti dhe audio.
aftësitë
Multimodal Live API përfshin aftësitë kryesore të mëposhtme:
- Multimodaliteti: Modeli mund të shohë, të dëgjojë dhe të flasë.
- Ndërveprimi në kohë reale me vonesë të ulët: Ofron përgjigje të shpejta.
- Kujtesa e sesionit: Modeli ruan kujtesën e të gjitha ndërveprimeve brenda një sesioni të vetëm, duke kujtuar informacionin e dëgjuar ose parë më parë.
- Mbështetje për thirrjen e funksionit, ekzekutimin e kodit dhe Kërkimin si mjet: Mundëson integrimin me shërbimet e jashtme dhe burimet e të dhënave.
- Zbulimi i automatizuar i aktivitetit të zërit (VAD): Modeli mund të njohë me saktësi kur përdoruesi fillon dhe ndalon së foluri. Kjo lejon ndërveprime të natyrshme, bashkëbiseduese dhe fuqizon përdoruesit të ndërpresin modelin në çdo kohë.
Mund të provoni Multimodal Live API në Google AI Studio .
Filloni
Multimodal Live API është një API shtetërore që përdor WebSockets .
Ky seksion tregon një shembull se si të përdoret Multimodal Live API për gjenerimin e tekstit në tekst, duke përdorur Python 3.9+.
Instaloni bibliotekën Gemini API
Për të instaluar paketën google-genai
, përdorni komandën e mëposhtme pip
:
!pip3 install google-genai
Varësitë e importit
Për të importuar varësitë:
from google import genai
Dërgoni dhe merrni një mesazh me tekst
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())
Udhëzues integrimi
Ky seksion përshkruan se si funksionon integrimi me Multimodal Live API.
Sesionet
Një sesion përfaqëson një lidhje të vetme WebSocket midis klientit dhe serverit Gemini.
Pasi një klient fillon një lidhje të re, sesioni mund të shkëmbejë mesazhe me serverin për:
- Dërgoni tekst, audio ose video te serveri Gemini.
- Merr përgjigje audio, tekst ose thirrje funksioni nga serveri Gemini.
Konfigurimi i sesionit dërgohet në mesazhin e parë pas lidhjes. Një konfigurim sesioni përfshin modelin, parametrat e gjenerimit, udhëzimet e sistemit dhe mjetet.
Shikoni konfigurimin e shembullit të mëposhtëm:
{
"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":[]
}
Për më shumë informacion, shihni BidiGenerateContentSetup .
Dërgo mesazhe
Mesazhet janë vargje të formatuara JSON të shkëmbyera përmes lidhjes WebSocket.
Për të dërguar një mesazh, klienti duhet të dërgojë një mesazh klienti të mbështetur në një varg të formatuar JSON me një nga një lidhje të hapur WebSocket.
Mesazhet e klientit të mbështetur
Shihni mesazhet e klientit të mbështetur në tabelën e mëposhtme:
Mesazh | Përshkrimi |
---|---|
BidiGenerateContentSetup | Konfigurimi i sesionit do të dërgohet në mesazhin e parë |
BidiGenerateContentClientContent | Përditësimi në rritje i përmbajtjes së bisedës aktuale të dorëzuar nga klienti |
BidiGenerateContentRealtimeInput | Hyrja audio ose video në kohë reale |
BidiGenerateContentToolResponse | Përgjigja ndaj një ToolCallMessage të marrë nga serveri |
Merr mesazhe
Për të marrë mesazhe nga Gemini, dëgjoni për ngjarjen 'mesazh' në WebSocket dhe më pas analizoni rezultatin sipas përkufizimit të mesazheve të serverit të mbështetur.
Shihni sa vijon:
ws.addEventListener("message", async (evt) => {
if (evt.data instanceof Blob) {
// Process the received data (audio, video, etc.)
} else {
// Process JSON response
}
});
Mesazhet e serverit të mbështetur
Shihni mesazhet e serverit të mbështetur në tabelën e mëposhtme:
Mesazh | Përshkrimi |
---|---|
BidiGenerateContentSetupComplete | Një mesazh BidiGenerateContentSetup nga klienti, i dërguar kur të përfundojë konfigurimi |
BidiGenerateContentServerContent | Përmbajtja e krijuar nga modeli në përgjigje të një mesazhi të klientit |
BidiGenerateContentToolCall | Kërkoni që klienti të ekzekutojë thirrjet e funksionit dhe të kthejë përgjigjet me ID-të që përputhen |
BidiGenerateContentToolCallCancellation | Dërgohet kur një thirrje funksioni anulohet për shkak të ndërprerjes së daljes së modelit nga përdoruesi |
Përditësimet në rritje të përmbajtjes
Përdorni përditësime shtesë për të dërguar futjen e tekstit, për të vendosur ose rivendosur kontekstin e sesionit. Për kontekste të shkurtra, ju mund të dërgoni ndërveprime kthesë pas kthese për të përfaqësuar sekuencën e saktë të ngjarjeve. Për kontekste më të gjata, rekomandohet të sigurohet një përmbledhje e vetme e mesazhit për të liruar dritaren e kontekstit për ndërveprimet vijuese.
Shihni shembullin e mesazhit të kontekstit të mëposhtëm:
{
"client_content": {
"turns": [
{
"parts":[
{
"text": ""
}
],
"role":"user"
},
{
"parts":[
{
"text": ""
}
],
"role":"model"
}
],
"turn_complete": true
}
}
Vini re se ndërsa pjesët e përmbajtjes mund të jenë të një lloji functionResponse
, BidiGenerateContentClientContent
nuk duhet të përdoret për të dhënë një përgjigje ndaj thirrjeve të funksionit të lëshuara nga modeli. Në vend të kësaj duhet të përdoret BidiGenerateContentToolResponse
. BidiGenerateContentClientContent
duhet të përdoret vetëm për të krijuar kontekstin e mëparshëm ose për të dhënë hyrje teksti në bisedë.
Transmetimi i audios dhe videos
Thirrja e funksionit
Të gjitha funksionet duhet të deklarohen në fillim të seancës duke dërguar përkufizimet e veglave si pjesë e mesazhit BidiGenerateContentSetup
.
Shikoni udhëzuesin e thirrjes së funksionit për të mësuar më shumë rreth thirrjes së funksionit.
Nga një kërkesë e vetme, modeli mund të gjenerojë thirrje të shumëfishta funksionesh dhe kodin e nevojshëm për zinxhirin e daljeve të tyre. Ky kod ekzekutohet në një mjedis sandbox, duke gjeneruar mesazhe të mëvonshme BidiGenerateContentToolCall
. Ekzekutimi ndalon derisa rezultatet e çdo thirrjeje funksioni të jenë të disponueshme, gjë që siguron përpunim vijues.
Klienti duhet të përgjigjet me BidiGenerateContentToolResponse
.
Hyrjet dhe daljet audio ndikojnë negativisht në aftësinë e modelit për të përdorur thirrjen e funksionit.
Formatet audio
Multimodal Live API mbështet formatet e mëposhtme audio:
- Formati i hyrjes së audios: Audio PCM e papërpunuar 16 bit në 16 kHz pak-endian
- Formati i daljes së audios: Audio PCM e papërpunuar 16 bit në 24 kHz pak-endian
Udhëzimet e sistemit
Ju mund të jepni udhëzime të sistemit për të kontrolluar më mirë daljen e modelit dhe për të specifikuar tonin dhe ndjenjën e përgjigjeve audio.
Udhëzimet e sistemit shtohen në prompt përpara se të fillojë ndërveprimi dhe mbeten në fuqi për të gjithë seancën.
Udhëzimet e sistemit mund të vendosen vetëm në fillim të një sesioni, menjëherë pas lidhjes fillestare. Për të dhënë të dhëna të mëtejshme për modelin gjatë sesionit, përdorni përditësime shtesë të përmbajtjes.
Ndërprerjet
Përdoruesit mund të ndërpresin daljen e modelit në çdo kohë. Kur Zbulimi i aktivitetit zanor (VAD) zbulon një ndërprerje, gjenerimi në vazhdim anulohet dhe hidhet poshtë. Vetëm informacioni i dërguar tashmë klientit ruhet në historikun e sesionit. Serveri më pas dërgon një mesazh BidiGenerateContentServerContent
për të raportuar ndërprerjen.
Përveç kësaj, serveri Gemini hedh poshtë çdo thirrje funksioni në pritje dhe dërgon një mesazh BidiGenerateContentServerContent
me ID-të e thirrjeve të anuluara.
Zërat
Multimodal Live API mbështet zërat e mëposhtëm: Aoede, Charon, Fenrir, Kore dhe Puck.
Për të specifikuar një zë, vendosni voice_name
brenda objektit speech_config
, si pjesë e konfigurimit të sesionit tuaj.
Shihni paraqitjen e mëposhtme JSON të një objekti speech_config
:
{
"voice_config": {
"prebuilt_voice_config ": {
"voice_name": <var>VOICE_NAME</var>
}
}
}
Kufizimet
Merrni parasysh kufizimet e mëposhtme të Multimodal Live API dhe Gemini 2.0 kur planifikoni projektin tuaj.
Autentifikimi i klientit
Multimodal Live API ofron vetëm vërtetim nga serveri në server dhe nuk rekomandohet për përdorim të drejtpërdrejtë të klientit. Hyrja e klientit duhet të drejtohet përmes një serveri të ndërmjetëm aplikacioni për vërtetim të sigurt me API Multimodal Live.
Për aplikacionet në ueb dhe celular, ne rekomandojmë përdorimin e integrimit nga partnerët tanë në Daily .
Historia e bisedave
Ndërsa modeli mban gjurmët e ndërveprimeve gjatë sesionit, historiku i bisedave nuk ruhet. Kur përfundon një sesion, konteksti përkatës fshihet.
Për të rivendosur një sesion të mëparshëm ose për t'i dhënë modelit kontekstin historik të ndërveprimeve të përdoruesve, aplikacioni duhet të mbajë regjistrin e vet të bisedave dhe të përdorë një mesazh BidiGenerateContentClientContent
për të dërguar këtë informacion në fillim të një sesioni të ri.
Kohëzgjatja maksimale e seancës
Kohëzgjatja e seancës është e kufizuar deri në 15 minuta për audio ose deri në 2 minuta audio dhe video. Kur kohëzgjatja e seancës tejkalon kufirin, lidhja ndërpritet.
Modeli kufizohet gjithashtu nga madhësia e kontekstit. Dërgimi i pjesëve të mëdha të përmbajtjes së bashku me transmetimet video dhe audio mund të rezultojë në përfundimin e mëparshëm të sesionit.
Zbulimi i aktivitetit zanor (VAD)
Modeli kryen automatikisht zbulimin e aktivitetit zanor (VAD) në një transmetim të vazhdueshëm të hyrjes audio. VAD është gjithmonë i aktivizuar dhe parametrat e tij nuk janë të konfigurueshëm.
Numri i shenjave
Numri i tokenit nuk mbështetet.
Kufijtë e tarifave
Zbatohen kufijtë e mëposhtëm të tarifave:
- 3 seanca të njëkohshme për çelësin API
- 4 milion argumente në minutë
Mesazhet dhe ngjarjet
BidiGenerateContentClientContent
Përditësimi në rritje i bisedës aktuale të dorëzuar nga klienti. E gjithë përmbajtja këtu i shtohet pa kushte historisë së bisedave dhe përdoret si pjesë e kërkesës për modelin për të gjeneruar përmbajtje.
Një mesazh këtu do të ndërpresë çdo gjenerim aktual të modelit.
Fushat | |
---|---|
turns[] | Fakultative. Përmbajtja i është bashkangjitur bisedës aktuale me modelen. Për pyetjet me një kthesë, ky është një shembull i vetëm. Për pyetjet me shumë kthesa, kjo është një fushë e përsëritur që përmban historikun e bisedave dhe kërkesën më të fundit. |
turn_ complete | Fakultative. Nëse është e vërtetë, tregon që gjenerimi i përmbajtjes së serverit duhet të fillojë me kërkesën e akumuluar aktualisht. Përndryshe, serveri pret mesazhe shtesë përpara se të fillojë gjenerimin. |
BidiGenerateContentInputRealtime
Hyrja e përdoruesit që dërgohet në kohë reale.
Kjo është e ndryshme nga BidiGenerateContentClientContent
në disa mënyra:
- Mund të dërgohet vazhdimisht pa ndërprerje në gjenerimin e modelit.
- Nëse ka nevojë për të përzier të dhënat e ndërthurura në
BidiGenerateContentClientContent
dheBidiGenerateContentRealtimeInput
, serveri përpiqet të optimizojë për përgjigjen më të mirë, por nuk ka garanci. - Fundi i radhës nuk është specifikuar në mënyrë eksplicite, por rrjedh nga aktiviteti i përdoruesit (për shembull, fundi i fjalës).
- Edhe para fundit të kthesës, të dhënat përpunohen në mënyrë incrementale për të optimizuar për një fillim të shpejtë të përgjigjes nga modeli.
- Është gjithmonë hyrja e drejtpërdrejtë e përdoruesit që dërgohet në kohë reale. Mund të dërgohet vazhdimisht pa ndërprerje. Modeli zbulon automatikisht fillimin dhe fundin e fjalimit të përdoruesit dhe fillon ose përfundon transmetimin e përgjigjes në përputhje me rrethanat. Të dhënat përpunohen në mënyrë graduale ndërsa mbërrijnë, duke minimizuar vonesën.
Fushat | |
---|---|
media_ chunks[] | Fakultative. Të dhënat e bajteve të rreshtuara për hyrjen e medias. |
BidiGenerateContentServerContent
Përditësimi në rritje i serverit i krijuar nga modeli në përgjigje të mesazheve të klientit.
Përmbajtja gjenerohet sa më shpejt që të jetë e mundur, dhe jo në kohë reale. Klientët mund të zgjedhin ta ruajnë dhe ta luajnë atë në kohë reale.
Fushat | |
---|---|
turn_ complete | Vetëm dalje. Nëse është e vërtetë, tregon që modeli ka përfunduar duke gjeneruar. Gjenerimi do të fillojë vetëm në përgjigje të mesazheve shtesë të klientit. Mund të vendoset krahas |
interrupted | Vetëm dalje. Nëse është e vërtetë, tregon se një mesazh klienti ka ndërprerë gjenerimin aktual të modelit. Nëse klienti po luan përmbajtjen në kohë reale, ky është një sinjal i mirë për të ndaluar dhe zbrazur radhën aktuale të riprodhimit. |
grounding_ metadata | Vetëm dalje. Tokëzimi i meta të dhënave për përmbajtjen e krijuar. |
model_ turn | Vetëm dalje. Përmbajtja që modeli ka gjeneruar si pjesë e bisedës aktuale me përdoruesin. |
BidiGenerateContentSetup
Mesazhi do të dërgohet në mesazhin e parë dhe të vetëm të klientit. Përmban konfigurimin që do të zbatohet për kohëzgjatjen e sesionit të transmetimit.
Klientët duhet të presin për një mesazh BidiGenerateContentSetupComplete
përpara se të dërgojnë ndonjë mesazh shtesë.
Fushat | |
---|---|
model | E detyrueshme. Emri i burimit të modelit. Kjo shërben si një ID për Modelin për t'u përdorur. Formati: |
generation_ config | Fakultative. Konfigurimi i gjeneratës. Fushat e mëposhtme nuk mbështeten:
|
system_ instruction | Fakultative. Përdoruesi dha udhëzime të sistemit për modelin. Shënim: Vetëm teksti duhet të përdoret në pjesë dhe përmbajtja në secilën pjesë do të jetë në një paragraf të veçantë. |
tools[] | Fakultative. Një listë e Një |
BidiGenerateContentSetupComplete
Ky lloj nuk ka fusha.
Dërguar si përgjigje ndaj një mesazhi BidiGenerateContentSetup
nga klienti.
BidiGenerateContentToolCall
Kërkoni që klienti të ekzekutojë function_calls
dhe t'i kthejë përgjigjet me id
në që përputhet.
Fushat | |
---|---|
function_ calls[] | Vetëm dalje. Thirrja e funksionit që do të ekzekutohet. |
BidiGenerateContentToolCallCancellation
Njoftimi për klientin se një ToolCallMessage
i lëshuar më parë me id
-të e specifikuara nuk duhej të ishte ekzekutuar dhe duhet të anulohej. Nëse ka pasur efekte anësore në ato thirrje të veglave, klientët mund të përpiqen të zhbëjnë thirrjet e veglave. Ky mesazh shfaqet vetëm në rastet kur klientët ndërpresin kthesat e serverit.
Fushat | |
---|---|
ids[] | Vetëm dalje. ID-të e mjetit thërret për t'u anuluar. |
BidiGenerateContentToolResponse
Klienti gjeneroi përgjigje ndaj një ToolCall
të marrë nga serveri. Objektet individuale FunctionResponse
përputhen me objektet përkatëse FunctionCall
nga fusha id
.
Vini re se në funksionin GenerateContent API-të unare dhe të transmetimit të serverit, thirrja ndodh duke shkëmbyer pjesët Content
, ndërsa në funksionin e GenerateContent API-të bidi thirrja ndodh mbi këto grupe të dedikuara mesazhesh.
Fushat | |
---|---|
function_ responses[] | Fakultative. Përgjigja ndaj thirrjeve të funksionit. |
Më shumë informacion mbi llojet e zakonshme
Për më shumë informacion mbi llojet e burimeve të përdorura zakonisht të API Blob
, Content
, FunctionCall
, FunctionResponse
, GenerationConfig
, GroundingMetadata
dhe Tool
, shihni Gjenerimi i përmbajtjes .