In der Live API bezieht sich eine Sitzung auf eine persistente Verbindung, bei der Eingabe und Ausgabe kontinuierlich über dieselbe Verbindung gestreamt werden. Weitere Informationen zur Funktionsweise Dieses einzigartige Sitzungsdesign ermöglicht eine geringe Latenz und unterstützt einzigartige Funktionen, kann aber auch zu Herausforderungen wie Zeitlimits für Sitzungen und vorzeitiger Beendigung führen. In diesem Leitfaden werden Strategien zur Bewältigung der Herausforderungen bei der Sitzungsverwaltung beschrieben, die bei der Verwendung der Live API auftreten können.
Sitzungsdauer
Ohne Komprimierung sind Sitzungen nur mit Audio auf 15 Minuten und Sitzungen mit Audio und Video auf 2 Minuten begrenzt. Wird eines dieser Limits überschritten, wird die Sitzung (und damit auch die Verbindung) beendet. Mit der Komprimierung des Kontextfensters können Sie Sitzungen jedoch auf unbestimmte Zeit verlängern.
Die Lebensdauer einer Verbindung ist ebenfalls auf etwa 10 Minuten begrenzt. Wenn die Verbindung beendet wird, wird auch die Sitzung beendet. In diesem Fall können Sie eine einzelne Sitzung mithilfe der Sitzungsfortsetzung so konfigurieren, dass sie über mehrere Verbindungen aktiv bleibt. Außerdem erhalten Sie vor dem Ende der Verbindung eine GoAway-Nachricht, mit der Sie weitere Maßnahmen ergreifen können.
Komprimierung des Kontextfensters
Wenn Sie längere Sitzungen ermöglichen und ein abruptes Verbindungsende vermeiden möchten, können Sie die Komprimierung des Kontextfensters aktivieren. Legen Sie dazu das Feld contextWindowCompression als Teil der Sitzungskonfiguration fest.
In ContextWindowCompressionConfig können Sie einen Schiebefenstermechanismus und die Anzahl der Tokens konfigurieren, die die Komprimierung auslösen.
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: {} }
};
Sitzungswiederaufnahme
Wenn Sie verhindern möchten, dass die Sitzung beendet wird, wenn der Server die WebSocket-Verbindung regelmäßig zurücksetzt, konfigurieren Sie das Feld sessionResumption in der Einrichtungskonfiguration.
Wenn du diese Konfiguration übergibst, sendet der Server SessionResumptionUpdate-Nachrichten, mit denen die Sitzung fortgesetzt werden kann. Dazu wird das letzte Wiederaufnahmetoken als SessionResumptionConfig.handle
der nachfolgenden Verbindung übergeben.
Python
import asyncio
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-live-2.5-flash-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(
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
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-live-2.5-flash-preview';
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
}
}
return turns;
}
console.debug('Connecting to the service with handle %s...', previousSessionHandle)
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: {
responseModalities: [Modality.TEXT],
sessionResumption: { handle: previousSessionHandle }
// The handle of the session to resume is passed here, or else null to start a new session.
}
});
const inputTurns = 'Hello how are you?';
session.sendClientContent({ turns: inputTurns });
const turns = await handleTurn();
for (const turn of turns) {
if (turn.sessionResumptionUpdate) {
if (turn.sessionResumptionUpdate.resumable && turn.sessionResumptionUpdate.newHandle) {
let newHandle = turn.sessionResumptionUpdate.newHandle
// ...Store newHandle and start new session with this handle here
}
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
Nachricht erhalten, bevor die Sitzung getrennt wird
Der Server sendet eine GoAway-Nachricht, die signalisiert, dass die aktuelle Verbindung bald beendet wird. Diese Nachricht enthält den Wert timeLeft, der die verbleibende Zeit angibt. Sie können weitere Maßnahmen ergreifen, bevor die Verbindung als ABGEBROCHEN beendet wird.
Python
async for response in session.receive():
if response.go_away is not None:
# The connection will soon be terminated
print(response.go_away.time_left)
JavaScript
const turns = await handleTurn();
for (const turn of turns) {
if (turn.goAway) {
console.debug('Time left: %s\n', turn.goAway.timeLeft);
}
}
Benachrichtigung erhalten, wenn die Generierung abgeschlossen ist
Der Server sendet die Nachricht generationComplete, die signalisiert, dass die Antwort vom Modell generiert wurde.
Python
async for response in session.receive():
if response.server_content.generation_complete is True:
# The generation is complete
JavaScript
const turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.generationComplete) {
// The generation is complete
}
}
Nächste Schritte
Weitere Informationen zur Arbeit mit der Live API findest du im vollständigen Leitfaden zu den Funktionen, auf der Seite Tool-Nutzung oder im Live API-Rezeptbuch.