Wenn Sie bessere Ergebnisse mit der Gemini Live API erzielen möchten, sollten Sie die folgenden Best Practices beachten:
Klare Systemanweisungen erstellen
Damit Sie die Gemini Live API optimal nutzen können, empfehlen wir, eine klar definierte Gruppe von Systemanweisungen zu verwenden, die die Persona des Agenten, die Konversationsregeln und die Schutzmaßnahmen in dieser Reihenfolge definieren.
Um optimale Ergebnisse zu erzielen, sollten Sie für jeden Kundenservicemitarbeiter einen separaten SI erstellen.
Persona des Agenten angeben:Geben Sie den Namen, die Rolle und alle bevorzugten Eigenschaften des Agenten an. Wenn Sie den Akzent angeben möchten, müssen Sie auch die bevorzugte Ausgabesprache angeben, z. B. einen britischen Akzent für einen englischen Sprecher.
Regeln für die Konversation festlegen:Geben Sie die Regeln in der Reihenfolge an, in der das Modell sie befolgen soll. Unterscheiden Sie zwischen einmaligen Elementen der Unterhaltung und Gesprächsschleifen. Beispiel:
- Einmaliges Element:Erfassen Sie die Daten eines Kunden einmalig, z. B. Name, Standort, Kundenkartennummer.
- Konversationsschleife:Der Nutzer kann Empfehlungen, Preise, Rückgaben und die Lieferung besprechen und möglicherweise von Thema zu Thema wechseln. Teilen Sie dem Modell mit, dass es diesen Konversationszyklus so lange fortsetzen kann, wie der Nutzer es wünscht.
Tool-Aufrufe in einem Ablauf in separaten Sätzen angeben:Wenn beispielsweise ein einmaliger Schritt zum Erfassen der Kundendetails den Aufruf einer
get_user_info-Funktion erfordert, könnten Sie Folgendes sagen: Im ersten Schritt müssen Sie die Nutzerinformationen erfassen. Bitte den Nutzer zuerst, seinen Namen, seinen Standort und seine Treuekarten-Nummer anzugeben. Rufen Sie dannget_user_infomit diesen Details auf.Fügen Sie alle erforderlichen Schutzmaßnahmen hinzu:Geben Sie alle allgemeinen Schutzmaßnahmen für Unterhaltungen an, die das Modell nicht ausführen soll. Sie können auch spezifische Beispiele angeben, z. B. wenn x passiert, soll das Modell y ausführen. Wenn Sie immer noch nicht die gewünschte Präzision erreichen, verwenden Sie das Wort unmissverständlich, um das Modell zu einer präzisen Antwort zu veranlassen.
Tools präzise definieren
Wenn Sie Tools mit der Gemini Live API verwenden, sollten Sie in Ihren Tool-Definitionen präzise sein. Geben Sie unbedingt an, unter welchen Bedingungen ein Tool-Aufruf erfolgen soll. Weitere Informationen finden Sie unter Tool-Definitionen.
Effektive Prompts erstellen
Klare Prompts verwenden:Geben Sie in den Prompts Beispiele dafür an, was das Modell tun soll und was nicht. Beschränken Sie die Prompts auf jeweils einen Prompt pro Persona oder Rolle. Anstelle von langen, mehrseitigen Prompts sollten Sie Prompt-Chaining verwenden. Das Modell eignet sich am besten für Aufgaben mit einzelnen Funktionsaufrufen.
# Prompt chaining example. chainable_long_prompt = """ You need to perform a sequence of tasks. First, you should do task1; after that, task2; later, task3; and finally, task4. """ # New initial prompt """ You need to perform a sequence of tasks. Once you finish the current task, call the `get_next_prompt` function to get instructions for the next task. """ PROMPT_LIST = ["Now, do task1", "Now, do task2", "Now, do task3", "Now, do task 4", "all tasks done"] def get_next_prompt(): # Provide this function as a tool to the model. for prompt in PROMPT_LIST: yield prompt # Catch and execute tool call `get_next_prompt` and send the new prompt back to the model.Startbefehle und Informationen bereitstellen:Die Gemini Live API erwartet Nutzereingaben, bevor sie antwortet. Wenn die Gemini Live API das Gespräch beginnen soll, fügen Sie einen Prompt hinzu, in dem sie aufgefordert wird, den Nutzer zu begrüßen oder das Gespräch zu beginnen. Fügen Sie Informationen zum Nutzer hinzu, damit die Gemini Live API die Begrüßung personalisieren kann.
Sitzungswiederaufnahme
- Transparente Wiederaufnahme der Sitzung verwenden: Konfigurieren Sie die Verbindung mit
SessionResumptionConfig(transparent=True)ingenai.types.LiveConnectConfig. Dies signalisiert, dass der Client die Wiederaufnahme der Sitzung nahtlos verarbeiten möchte, was Funktionen wie das erneute Abspielen nicht verbrauchter Nachrichten bei einer erneuten Verbindung ermöglicht.
from google.genai import types
session_handle: str | None = None
live_config = types.LiveConnectConfig(
session_resumption=types.SessionResumptionConfig(
handle=session_handle,
transparent=True,
),
)
Sitzungshandle verwalten und aktualisieren: Auf
session_resumption_update-Nachrichten vom Server warten. Wennresumable„true“ ist und einnew_handleangegeben wird, speichern Sie diesen Handle. Dieser Handle ist wichtig, um die Verbindung zum selben Sitzungsstatus wiederherzustellen, wenn die Verbindung unterbrochen wird.Gesendete Nachrichten puffern und bestätigte Nachrichten entfernen: Um sicherzustellen, dass bei einer Trennung keine Clientnachrichten verloren gehen, muss ein Puffer mit Nachrichten verwaltet werden, die an die Gemini Live API gesendet wurden. Die
session_resumption_update-Nachricht enthältlast_consumed_client_message_index, wenn die transparente Sitzungswiederaufnahme aktiviert ist. Dies gibt die letzte vom Server verarbeitete Nachricht an. Mit diesem Index können Sie bestätigte Nachrichten aus dem Puffer entfernen. Damit Nachrichten richtig erfasst werden, muss der vom Nutzer verwaltete Index mit 1 beginnen, da Index 0 angibt, dassthe session is not resumable. Bei jeder nachfolgenden Nachricht, die an das Modell gesendet wird, sollte dieser Index um 1 erhöht werden. Achten Sie bei jeder Wiederaufnahme der Sitzung darauf, dass der Index für die erste Nachricht, die über die neue Verbindung übertragen wird, auf 1 zurückgesetzt wird.Verbindungsunterbrechungen ordnungsgemäß behandeln:
- GoAway-Signal: Der Server sendet vor einer erwarteten Trennung (z. B. bei einem Zeitlimit) eine
go_away-Nachricht. Der Manager sollte darauf achten und dann proaktiv mit dem neuesten Handle eine neue Verbindung herstellen. - API-Fehler: Netzwerkprobleme können
genai_errors.APIErrorverursachen (z. B. die Codes 1000 oder 1006 für WebSocket-Fehler). Der Manager sollte diese Fehler sowohl beim Senden als auch beim Empfangen erkennen und den Sitzungsaktualisierungs- oder Wiederverbindungsprozess auslösen.
- GoAway-Signal: Der Server sendet vor einer erwarteten Trennung (z. B. bei einem Zeitlimit) eine
Wiederverbindung mit Nachrichtenwiederholung implementieren: Wenn die Verbindung getrennt wird, erstellen Sie mit dem neuesten Sitzungshandle eine neue Sitzung mit
client.aio.live.connect. Senden Sie nach dem Herstellen der neuen Verbindung alle Nachrichten im Puffer noch einmal, die vom Server vor der Trennung nicht bestätigt wurden. Die erste Nachricht, die im Puffer gesendet wird, sollte für die neue Verbindung als Index 1 gekennzeichnet werden.
Kontextfensterkomprimierung aktivieren
Verwenden Sie ContextWindowCompressionConfig, um das Kontextfenster der Sitzung zu konfigurieren, da sich bei langen Sitzungen native Audio-Tokens schnell ansammeln (ca. 25 Tokens pro Sekunde Audio).
Warnung:Durch die Kontextkomprimierung geht der Unterhaltungsverlauf verloren.
from google.genai import types
live_config = types.LiveConnectConfig(
context_window_compression=types.ContextWindowCompressionConfig(
trigger_tokens=100_000, # For better clarity
sliding_window=types.SlidingWindow(target_tokens=4_000),
),
)
Berechnung der Tokennutzung
Die Abrechnungsstruktur der Gemini Live API wird auf der Preisseite beschrieben.
Bei jedem Sprecherwechsel werden alle Kontext-Tokens über die API abgerechnet. Dazu gehören sowohl der Gesprächsverlauf als auch die vom Nutzer bereitgestellte Systemanweisung.
Entwickler können diese Gebühren im Blick behalten und berechnen, indem sie das Feld usage_metadata aus der Antwort des Modells extrahieren.
# Example code to get token usage
from google.genai import live
session: live.AsyncSession
async for response in session.receive():
if response.usage_metadata is not None:
print("Token usage:", response.usage_metadata)
Erkennung von Sprachaktivitäten (Voice Activity Detection, VAD)
Standardmäßig wird für die Gemini Live API die von Gemini bereitgestellte VAD verwendet.
Wenn Sie die VAD-Funktion der Gemini Live API verwenden, können Sie das Modell so konfigurieren, dass es VAD-Ereignisse explizit zurückgibt. Wenn Sie explicit_vad_signal in Ihrer Konfiguration aktivieren, können Sie diese Ereignisse direkt in den Antworten des Modells beobachten und erfassen.
from google.genai import types
from google.genai import live
live_config = types.LiveConnectConfig(
explicit_vad_signal=True
)
session: live.AsyncSession
# In receive loop
async for response in session.receive():
if response.voice_activity is not None:
print("Get VAD event", response.voice_activity)
Wenn Sie lieber ein benutzerdefiniertes System zur Aktivitätserkennung verwenden möchten, müssen Sie die standardmäßige Sprachaktivitätserkennung (Voice Activity Detection, VAD) deaktivieren und die Nutzerbeiträge manuell an das Gemini-Modell signalisieren. Dazu müssen Sie ActivityStart- oder ActivityEnd-Ereignisse übertragen, um die Interaktionsgrenzen festzulegen.
from google.genai import live
from google.genai import types
# Disable VAD in config
live_config = types.LiveConnectConfig(
realtime_input_config=types.RealtimeInputConfig(
automatic_activity_detection=types.AutomaticActivityDetection(
disabled=True
),
),
)
session: live.AsyncSession
await session.send_realtime_input( # Send activity start
activity_start=types.ActivityStart()
)
for audio_bytes in bytes_to_send_queue: # Send user data
await session.send_realtime_input(
audio=types.Blob(
data=audio_bytes,
mime_type=f"audio/pcm;rate=16000",
)
)
await session.send_realtime_input(activity_end=types.ActivityEnd()) # Send activity end
Sprachcode für Audio festlegen
Es wird empfohlen, den Sprach- und Stimmcode explizit in Ihrer Konfiguration festzulegen, um die Konsistenz zu wahren. Ohne diese Definition kann Gemini die Sprache der Unterhaltung je nach Kontext ändern.
from google.genai import types
config = types.LiveConnectConfig(
speech_config=types.SpeechConfig(
language_code="en-US",
),
)
Erwähnen Sie in der Systemanweisung auch Folgendes:
RESPOND IN {OUTPUT_LANGUAGE}. YOU MUST RESPOND UNMISTAKABLY IN {OUTPUT_LANGUAGE}.
Bei nativen Audiomodellen wie gemini-live-2.5-flash-native-audio können Sie die Transkriptionsqualität für die mehrsprachige automatische Spracherkennung (Automatic Speech Recognition, ASR) verbessern, indem Sie in Ihrer Sitzungskonfiguration Sprachhinweise angeben. Weitere Informationen finden Sie unter Audiotranskription für die Sitzung aktivieren.
Sprachcode für die Transkription festlegen
Geben Sie die Transkriptionssprachcodes an, um die Transkriptionsgenauigkeit zu erhöhen. Verwenden Sie dazu das BCP-47-Sprachcodeformat.
Hinweis:Wenn Sie die Transkription aktivieren, werden mehr Tokens verwendet.
from google.genai import types
config = types.LiveConnectConfig(
input_audio_transcription=types.AudioTranscriptionConfig(
language_codes=['en-US'] # This supports multiple language codes.
),
output_audio_transcription=types.AudioTranscriptionConfig(
language_codes=['en-US']
),
)
Clientseitiges Puffern
Puffern Sie die Audioeingabe nicht wesentlich (z. B. 1 Sekunde), bevor Sie sie senden. Senden Sie kleine Chunks (zwischen 20 ms und 40 ms), um die Latenz zu minimieren.
Resampling
Ihre Clientanwendung muss die Mikrofoneingabe (häufig 44,1 kHz oder 48 kHz) vor der Übertragung auf 16 kHz neu abtasten.
Beispiel
In diesem Beispiel werden sowohl die Best Practices als auch die Richtlinien für das Erstellen von Systemanweisungen kombiniert, um die Leistung des Modells als Karrierecoach zu optimieren.
**Persona:**
You are Laura, a career coach from Brooklyn, NY. You specialize in providing
data-driven advice to give your clients a fresh perspective on the career
questions they're navigating. Your special sauce is providing quantitative,
data-driven insights to help clients think about their issues in a different
way. You leverage statistics, research, and psychology as much as possible.
You only speak to your clients in English, no matter what language they speak
to you in.
**Conversational Rules:**
1. **Introduce yourself:** Warmly greet the client.
2. **Intake:** Ask for your client's full name, date of birth, and state they're
calling in from. Call `create_client_profile` to create a new patient profile.
3. **Discuss the client's issue:** Get a sense of what the client wants to
cover in the session. DO NOT repeat what the client is saying back to them in
your response. Don't ask more than a few questions here.
4. **Reframe the client's issue with real data:** NO PLATITUDES. Start providing
data-driven insights for the client, but embed these as general facts within
conversation. This is what they're coming to you for: your unique thinking on
the subjects that are stressing them out. Show them a new way of thinking about
something. Let this step go on for as long as the client wants. As part of this,
if the client mentions wanting to take any actions, update
`add_action_items_to_profile` to remind the client later.
5. **Next appointment:** Call `get_next_appointment` to see if another
appointment has already been scheduled for the client. If so, then share the
date and time with the client and confirm if they'll be able to attend. If
there is no appointment, then call `get_available_appointments` to see openings.
Share the list of openings with the client and ask what they would prefer. Save
their preference with `schedule_appointment`. If the client prefers to schedule
offline, then let them know that's perfectly fine and to use the patient portal.
**General Guidelines:** You're meant to be a witty, snappy conversational
partner. Keep your responses short and progressively disclose more information
if the client requests it. Don't repeat what the client says back to them.
Each of your responses should add to the conversation, not just recap what
the client said. Be relatable by bringing in your own background
growing up professionally in Brooklyn, NY. If a client tries to get you off
track, gently bring them back to the workflow articulated above.
**Guardrails:** If the client is being hard on themselves, never encourage that.
Remember that your ultimate goal is to create a supportive environment for your
clients to thrive.
Tooldefinitionen
In diesem JSON-Code werden die relevanten Funktionen definiert, die im Beispiel für den Karriere-Coach aufgerufen werden. Für optimale Ergebnisse sollten Sie beim Definieren von Funktionen deren Namen, Beschreibungen, Parameter und Aufrufbedingungen angeben.
[
{
"name": "create_client_profile",
"description": "Creates a new client profile with their personal details. Returns a unique client ID. \n**Invocation Condition:** Invoke this tool *only after* the client has provided their full name, date of birth, AND state. This should only be called once at the beginning of the 'Intake' step.",
"parameters": {
"type": "object",
"properties": {
"full_name": {
"type": "string",
"description": "The client's full name."
},
"date_of_birth": {
"type": "string",
"description": "The client's date of birth in YYYY-MM-DD format."
},
"state": {
"type": "string",
"description": "The 2-letter postal abbreviation for the client's state (e.g., 'NY', 'CA')."
}
},
"required": ["full_name", "date_of_birth", "state"]
}
},
{
"name": "add_action_items_to_profile",
"description": "Adds a list of actionable next steps to a client's profile using their client ID. \n**Invocation Condition:** Invoke this tool *only after* a list of actionable next steps has been discussed and agreed upon with the client during the 'Actions' step. Requires the `client_id` obtained from the start of the session.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client, obtained from create_client_profile."
},
"action_items": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of action items for the client (e.g., ['Update resume', 'Research three companies'])."
}
},
"required": ["client_id", "action_items"]
}
},
{
"name": "get_next_appointment",
"description": "Checks if a client has a future appointment already scheduled using their client ID. Returns the appointment details or null. \n**Invocation Condition:** Invoke this tool at the *start* of the 'Next Appointment' workflow step, immediately after the 'Actions' step is complete. This is used to check if an appointment *already exists*.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client."
}
},
"required": ["client_id"]
}
},
{
"name": "get_available_appointments",
"description": "Fetches a list of the next available appointment slots. \n**Invocation Condition:** Invoke this tool *only if* the `get_next_appointment` tool was called and it returned `null` (or an empty response), indicating no future appointment is scheduled.",
"parameters": {
"type": "object",
"properties": {}
}
},
{
"name": "schedule_appointment",
"description": "Books a new appointment for a client at a specific date and time. \n**Invocation Condition:** Invoke this tool *only after* `get_available_appointments` has been called, a list of openings has been presented to the client, and the client has *explicitly confirmed* which specific date and time they want to book.",
"parameters": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "The unique ID of the client."
},
"appointment_datetime": {
"type": "string",
"description": "The chosen appointment slot in ISO 8601 format (e.g., '2025-10-30T14:30:00')."
}
},
"required": ["client_id", "appointment_datetime"]
}
}
]
Weitere Informationen
Weitere Informationen zur Verwendung der Gemini Live API finden Sie hier:
- Übersichtsseite zur Gemini Live API
- Referenzhandbuch für die Gemini Live API
- Live-Sitzungen starten und verwalten
- Gemini-Funktionen konfigurieren