Multimodal Live API

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[]

Content

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

bool

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 dhe BidiGenerateContentRealtimeInput , 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[]

Blob

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

bool

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 content , duke treguar se content është e fundit në radhë.

interrupted

bool

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

GroundingMetadata

Vetëm dalje. Tokëzimi i meta të dhënave për përmbajtjen e krijuar.

model_ turn

Content

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

string

E detyrueshme. Emri i burimit të modelit. Kjo shërben si një ID për Modelin për t'u përdorur.

Formati: models/{model}

generation_ config

GenerationConfig

Fakultative. Konfigurimi i gjeneratës.

Fushat e mëposhtme nuk mbështeten:

  • response_logprobs
  • response_mime_type
  • logprobs
  • response_schema
  • stop_sequence
  • routing_config
  • audio_timestamp
system_ instruction

Content

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[]

Tool

Fakultative. Një listë e Tools modeli mund të përdorë për të gjeneruar përgjigjen e radhës.

Një Tool është një pjesë kodi që i mundëson sistemit të ndërveprojë me sisteme të jashtme për të kryer një veprim, ose grup veprimesh, jashtë njohurive dhe qëllimit të modelit.

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[]

FunctionCall

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[]

string

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[]

FunctionResponse

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 .