Live API

API Live mundëson ndërveprime zanore dhe video dydrejtimëshe me vonesë të ulët me Gemini. Duke përdorur API-në Live, ju mund t'u ofroni përdoruesve fundorë 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.

Mund të provoni Live API në Google AI Studio .

Çfarë ka të re

Live API ka veçori dhe aftësi të reja!

Aftësi të reja:

  • Dy zëra të rinj dhe 30 gjuhë të reja, me gjuhë dalëse të konfigurueshme
  • Rezolucione imazhi të konfigurueshme 66/256 argumente
  • Mbulimi i konfigurueshëm i kthesës: Dërgoni të gjitha hyrjet gjatë gjithë kohës ose vetëm kur përdoruesi është duke folur
  • Konfiguro nëse hyrja duhet të ndërpresë modelin apo jo
  • Zbulimi i aktivitetit zanor i konfigurueshëm dhe ngjarjet e reja të klientit për sinjalizimin në fund të kthesës
  • Token numëron
  • Një ngjarje klienti për sinjalizimin e fundit të transmetimit
  • Transmetimi i tekstit
  • Rifillimi i sesionit i konfigurueshëm, me të dhënat e sesionit të ruajtura në server për 24 orë
  • Mbështetje më e gjatë e sesionit me një dritare konteksti rrëshqitëse

Ngjarjet e reja të klientëve:

  • Fundi i transmetimit audio / mikrofon i mbyllur
  • Ngjarjet e fillimit/mbarimit të aktivitetit për kontrollin manual të kalimit të kthesave

Ngjarjet e reja të serverit:

  • Largohuni nga njoftimi që sinjalizon nevojën për të rifilluar një seancë
  • Gjenerata e përfunduar

Përdorni API-në e drejtpërdrejtë

Ky seksion përshkruan se si të përdorni API-në e drejtpërdrejtë me një nga SDK-të tona. Për më shumë informacion në lidhje me API-në themelore të WebSockets, shihni referencën e WebSockets API .

Dërgoni dhe merrni tekst

import asyncio
from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"

config = {"response_modalities": ["TEXT"]}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        while True:
            message = input("User> ")
            if message.lower() == "exit":
                break
            await session.send_client_content(
                turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
            )

            async for response in session.receive():
                if response.text is not None:
                    print(response.text, end="")

if __name__ == "__main__":
    asyncio.run(main())

Merr audio

Shembulli i mëposhtëm tregon se si të merrni të dhëna audio dhe t'i shkruani ato në një skedar .wav .

import asyncio
import wave
from google import genai

client = genai.Client(api_key="GEMINI_API_KEY", http_options={'api_version': 'v1alpha'})
model = "gemini-2.0-flash-live-001"

config = {"response_modalities": ["AUDIO"]}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        wf = wave.open("audio.wav", "wb")
        wf.setnchannels(1)
        wf.setsampwidth(2)
        wf.setframerate(24000)

        message = "Hello? Gemini are you there?"
        await session.send_client_content(
            turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
        )

        async for idx,response in async_enumerate(session.receive()):
            if response.data is not None:
                wf.writeframes(response.data)

            # Un-comment this code to print audio data info
            # if response.server_content.model_turn is not None:
            #      print(response.server_content.model_turn.parts[0].inline_data.mime_type)

        wf.close()

if __name__ == "__main__":
    asyncio.run(main())

Formatet audio

Live API mbështet formatet e mëposhtme të audios:

  • 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

Transmetoni audio dhe video

Udhëzimet e sistemit

Udhëzimet e sistemit ju lejojnë të drejtoni sjelljen e një modeli bazuar në nevojat tuaja specifike dhe rastet e përdorimit. Udhëzimet e sistemit mund të vendosen në konfigurimin e konfigurimit dhe do të mbeten në fuqi për të gjithë seancën.

from google.genai import types

config = {
    "system_instruction": types.Content(
        parts=[
            types.Part(
                text="You are a helpful assistant and answer in a friendly tone."
            )
        ]
    ),
    "response_modalities": ["TEXT"],
}

Përditësimet në rritje të përmbajtjes

Përdorni përditësime shtesë për të dërguar të dhëna teksti, për të krijuar kontekstin e sesionit ose për të rivendosur kontekstin e sesionit. Për kontekste të shkurtra, mund të dërgoni ndërveprime kthesë pas kthese për të përfaqësuar sekuencën e saktë të ngjarjeve:

turns = [
    {"role": "user", "parts": [{"text": "What is the capital of France?"}]},
    {"role": "model", "parts": [{"text": "Paris"}]},
]

await session.send_client_content(turns=turns, turn_complete=False)

turns = [{"role": "user", "parts": [{"text": "What is the capital of Germany?"}]}]

await session.send_client_content(turns=turns, turn_complete=True)
{
  "clientContent": {
    "turns": [
      {
        "parts":[
          {
            "text": ""
          }
        ],
        "role":"user"
      },
      {
        "parts":[
          {
            "text": ""
          }
        ],
        "role":"model"
      }
    ],
    "turnComplete": true
  }
}

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 e mëvonshme.

Ndryshoni zërat

API Live mbështet zërat e mëposhtëm: Puck, Charon, Kore, Fenrir, Aoede, Leda, Orus dhe Zephyr.

Për të specifikuar një zë, vendosni emrin e zërit brenda objektit speechConfig si pjesë e konfigurimit të sesionit:

from google.genai import types

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    speech_config=types.SpeechConfig(
        voice_config=types.VoiceConfig(
            prebuilt_voice_config=types.PrebuiltVoiceConfig(voice_name="Kore")
        )
    )
)
{
  "voiceConfig": {
    "prebuiltVoiceConfig": {
      "voiceName": "Kore"
    }
  }
}

Përdorni thirrjen e funksionit

Ju mund të përcaktoni mjetet me Live API. Shikoni udhëzuesin e thirrjes së funksionit për të mësuar më shumë rreth thirrjes së funksionit.

Mjetet duhet të përcaktohen si pjesë e konfigurimit të sesionit:

config = types.LiveConnectConfig(
    response_modalities=["TEXT"],
    tools=[set_light_values]
)

async with client.aio.live.connect(model=model, config=config) as session:
    await session.send_client_content(
        turns={
            "role": "user",
            "parts": [{"text": "Turn the lights down to a romantic level"}],
        },
        turn_complete=True,
    )

    async for response in session.receive():
        print(response.tool_call)

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.

Trajtoni 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.

async for response in session.receive():
    if response.server_content.interrupted is not None:
        # The generation was interrupted

Konfiguro zbulimin e aktivitetit zanor (VAD)

Si parazgjedhje, modeli kryen automatikisht zbulimin e aktivitetit zanor (VAD) në një transmetim të vazhdueshëm të hyrjes audio. VAD mund të konfigurohet me fushën realtimeInputConfig.automaticActivityDetectionkonfigurimit të konfigurimit .

Kur transmetimi i audios ndalet për më shumë se një sekondë (për shembull, për shkak se përdoruesi ka fikur mikrofonin), duhet të dërgohet një ngjarje audioStreamEnd për të pastruar çdo audio të ruajtur në memorie. Klienti mund të rifillojë dërgimin e të dhënave audio në çdo kohë.

Përndryshe, VAD-i automatik mund të çaktivizohet duke vendosur realtimeInputConfig.automaticActivityDetection.disabledtrue në mesazhin e konfigurimit. Në këtë konfigurim klienti është përgjegjës për zbulimin e të folurit të përdoruesit dhe dërgimin e mesazheve activityStart dhe activityEnd në kohën e duhur. Një audioStreamEnd nuk dërgohet në këtë konfigurim. Në vend të kësaj, çdo ndërprerje e transmetimit shënohet nga një mesazh activityEnd .

Mbështetja e SDK-së për këtë veçori do të jetë e disponueshme në javët në vijim.

Merrni numrin e shenjave

Ju mund të gjeni numrin total të argumenteve të konsumuara në fushën usageMetadata të mesazhit të serverit të kthyer.

from google.genai import types

async with client.aio.live.connect(
    model='gemini-2.0-flash-live-001',
    config=types.LiveConnectConfig(
        response_modalities=['AUDIO'],
    ),
) as session:
    # Session connected
    while True:
        await session.send_client_content(
            turns=types.Content(role='user', parts=[types.Part(text='Hello world!')])
        )
        async for message in session.receive():
            # The server will periodically send messages that include
            # UsageMetadata.
            if message.usage_metadata:
                usage = message.usage_metadata
                print(
                    f'Used {usage.total_token_count} tokens in total. Response token'
                    ' breakdown:'
                )
            for detail in usage.response_tokens_details:
                match detail:
                  case types.ModalityTokenCount(modality=modality, token_count=count):
                      print(f'{modality}: {count}')

            # For the purposes of this example, placeholder input is continually fed
            # to the model. In non-sample code, the model inputs would come from
            # the user.
            if message.server_content and message.server_content.turn_complete:
                break

Konfiguro rifillimin e sesionit

Ndërsa kohëzgjatja e sesionit është e kufizuar , ju mund të konfiguroni fushën e sesionit Resumptionkonfigurimit të konfigurimit .

Kalimi i këtij konfigurimi mundëson mbështetjen e rifillimit të sesionit dhe bën që serveri të dërgojë mesazhe SessionResumptionUpdate , të cilat mund të përdoren për të rifilluar seancën duke kaluar shenjën e fundit të rifillimit si SessionResumptionConfig.handle e lidhjes pasuese.

from google.genai import types

print(f"Connecting to the service with handle {previous_session_handle}...")
async with client.aio.live.connect(
    model="gemini-2.0-flash-live-001",
    config=types.LiveConnectConfig(
        response_modalities=["AUDIO"],
        session_resumption=types.SessionResumptionConfig(
            # The handle of the session to resume is passed here,
            # or else None to start a new session.
            handle=previous_session_handle
        ),
    ),
) as session:
    # Session connected
    while True:
        await session.send_client_content(
            turns=types.Content(
                role="user", parts=[types.Part(text="Hello world!")]
            )
        )
        async for message in session.receive():
            # Periodically, the server will send update messages that may
            # contain a handle for the current state of the session.
            if message.session_resumption_update:
                update = message.session_resumption_update
                if update.resumable and update.new_handle:
                    # The handle should be retained and linked to the session.
                    return update.new_handle

            # For the purposes of this example, placeholder input is continually fed
            # to the model. In non-sample code, the model inputs would come from
            # the user.
            if message.server_content and message.server_content.turn_complete:
                break

Merr një mesazh përpara se seanca të shkëputet

Serveri dërgon një mesazh GoAway që sinjalizon se lidhja aktuale do të ndërpritet së shpejti. Ky mesazh përfshin timeLeft , që tregon kohën e mbetur dhe ju lejon të ndërmerrni veprime të mëtejshme përpara se lidhja të ndërpritet si E ABORTUAR.

Merr një mesazh kur gjenerimi të ketë përfunduar

Serveri dërgon një mesazh gjenerimi i plotë që sinjalizon se modeli ka përfunduar gjenerimin e përgjigjes.

Aktivizo ngjeshjen e dritares së kontekstit

Për të aktivizuar sesione më të gjata dhe për të shmangur ndërprerjen e papritur të lidhjes, mund të aktivizoni ngjeshjen e dritares së kontekstit duke vendosur fushën e kontekstitWindowCompression si pjesë e konfigurimit të sesionit.

ContextWindowCompressionConfig , ju mund të konfiguroni një mekanizëm me dritare rrëshqitëse dhe numrin e shenjave që nxisin kompresimin.

from google.genai import types

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    context_window_compression=(
        # Configures compression with default parameters.
        types.ContextWindowCompressionConfig(
            sliding_window=types.SlidingWindow(),
        )
    ),
)

Ndryshoni rezolucionin e medias

Mund të specifikoni rezolucionin e medias për median hyrëse duke vendosur fushën mediaResolution si pjesë e konfigurimit të sesionit:

from google.genai import types

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    media_resolution=types.MediaResolution.MEDIA_RESOLUTION_LOW,
)

Kufizimet

Merrni parasysh kufizimet e mëposhtme të Live API dhe Gemini 2.0 kur planifikoni projektin tuaj.

Autentifikimi i klientit

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 Live API.

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.

Dritarja e kontekstit

Një seancë ka një kufi të dritares së kontekstit prej 32 mijë shenjash.

Integrimet e palëve të treta

Për vendosjen e aplikacioneve në ueb dhe celular, mund të eksploroni opsionet nga: