Zarządzanie sesjami za pomocą interfejsu Live API

W Live API sesja to trwałe połączenie, w którym dane wejściowe i wyjściowe są przesyłane strumieniowo w sposób ciągły przez to samo połączenie (więcej informacji o tym, jak to działa). Ta unikalna konstrukcja sesji umożliwia uzyskanie niskiego opóźnienia i obsługuje unikalne funkcje, ale może też powodować problemy, takie jak limity czasu sesji i przedwczesne zakończenie. W tym przewodniku opisujemy strategie radzenia sobie z problemami z zarządzaniem sesjami, które mogą wystąpić podczas korzystania z Live API.

Czas trwania sesji

Bez kompresji sesje tylko z dźwiękiem są ograniczone do 15 minut, a sesje audio-wideo – do 2 minut. Przekroczenie tych limitów spowoduje zakończenie sesji (a tym samym połączenia), ale możesz użyć kompresji okna kontekstu aby wydłużyć sesje do nieograniczonego czasu.

Czas trwania połączenia jest również ograniczony do około 10 minut. Gdy połączenie zostanie zakończone, sesja również zostanie zakończona. W takim przypadku możesz skonfigurować jedną sesję, aby pozostawała aktywna w przypadku wielu połączeń, korzystając z funkcji wznawiania sesji. Zanim połączenie się zakończy, otrzymasz też wiadomość GoAway, która pozwoli Ci podjąć dalsze działania.

Kompresja okna kontekstu

Aby umożliwić dłuższe sesje i uniknąć nagłego zakończenia połączenia, możesz włączyć kompresję okna kontekstu, ustawiając pole contextWindowCompression w ramach konfiguracji sesji.

W ContextWindowCompressionConfig możesz skonfigurować mechanizm okna przesuwnego i liczbę tokenów, które wywołują kompresję.

Python

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(),
        )
    ),
)

JavaScript

const config = {
  responseModalities: [Modality.AUDIO],
  contextWindowCompression: { slidingWindow: {} }
};

Wznawianie sesji

Aby zapobiec zakończeniu sesji, gdy serwer okresowo resetuje połączenie WebSocket , skonfiguruj pole sessionResumption w konfiguracji setup.

Przekazanie tej konfiguracji spowoduje, że serwer będzie wysyłać SessionResumptionUpdate , których można użyć do wznowienia sesji, przekazując ostatni token wznowienia jako SessionResumptionConfig.handle kolejnego połączenia.

Tokeny wznowienia są ważne przez 2 godziny od ostatniego zakończenia sesji.

Python

import asyncio
from google import genai
from google.genai import types

client = genai.Client()
model = "gemini-3.1-flash-live-preview"

async def main():
    print(f"Connecting to the service with handle {previous_session_handle}...")
    async with client.aio.live.connect(
        model=model,
        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:
        while True:
            await session.send_client_content