Die Gemini Live API unterstützt die Sprach-zu-Sprach-Übersetzung in Echtzeit mit geringer Latenz zwischen mehr als 70 Sprachen mit dem Modell gemini-3.5-live-translate-preview. Wenn Sie die Live API mit Übersetzungseinstellungen konfigurieren, können Sie Audio in einer Sprache streamen und übersetzte Audioausgabe in einer anderen Sprache empfangen. So ist eine nahtlose Sprach-zu-Sprach-Übersetzung in Echtzeit möglich.
Live-Kundenservicemitarbeiter im Vergleich zur Live-Übersetzung
Beide verwenden die Live API, aber das mentale Modell für die Live-Übersetzung unterscheidet sich von Echtzeit-Interaktionen mit Kundenservicemitarbeitern.
| Frag den Kundenservice | Live-Übersetzung |
|---|---|
| Das Modell fungiert als Assistent. Er hört zu, zieht Schlüsse und führt Aktionen in Ihrem Namen aus. | Das Modell fungiert als Dolmetscher. Sie verhält sich wie eine Echtzeit-Übersetzungspipeline. |
| Verwendet turnbasierte Interaktionen. Sie basiert auf Pausen und der Erkennung von Intentionen und kann Unterbrechungen verarbeiten. | Verwendet kontinuierliche Streamverarbeitung: Die Übersetzung erfolgt, während der Sprecher spricht, ohne auf die nächste Aktion zu warten. |
| Unterstützt Tools und Agents: Native Unterstützung für Funktionsaufrufe, Google Suche und Anweisungen. | Unterstützt nur die Übersetzung. Reine Übersetzung mit niedriger Latenz; keine Unterstützung für Tools oder Anleitungen. |
| Vollständig multimodal: Unterstützt Text-, Audio-, Video- und Bildeingaben. | Audio eingeschränkt: Die Eingabe ist auf Audio beschränkt, um strenge Latenzschwellen in Echtzeit einzuhalten. |
| Granulare Konfiguration: Hier werden Generierungs-, Sprach-, Tool- und Systemanweisungen verwendet. | Vereinfachte Konfiguration: Legen Sie target_language_code und Schalter wie echo_target_language fest. |
Jetzt starten
Die folgenden Beispiele zeigen, wie Sie einen Client initialisieren und mit einer Übersetzungskonfiguration eine Verbindung zur Live API herstellen.
Python
import asyncio
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.5-live-translate-preview"
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
input_audio_transcription=types.AudioTranscriptionConfig(),
output_audio_transcription=types.AudioTranscriptionConfig(),
translation_config=types.TranslationConfig(
target_language_code="pl",
echo_target_language=True
)
)
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
print("Session started with translation")
# Start receiving the translated audio stream
async for response in session.receive():
if response.server_content:
if response.server_content.input_transcription:
print(f"Input transcript: {response.server_content.input_transcription.text}")
if response.server_content.output_transcription:
print(f"Output transcript: {response.server_content.output_transcription.text}")
if response.server_content.model_turn:
for part in response.server_content.model_turn.parts:
if part.inline_data:
audio_data = part.inline_data.data
# Play or process the translated audio chunk
print(f"Received audio chunk ({len(audio_data)} bytes)")
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-3.5-live-translate-preview';
const config = {
responseModalities: [Modality.AUDIO],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
};
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: {
onopen: () => console.debug('Opened'),
onmessage: (message) => {
const content = message.serverContent;
if (content?.inputTranscription) {
console.log('Input transcript:', content.inputTranscription.text);
}
if (content?.outputTranscription) {
console.log('Output transcript:', content.outputTranscription.text);
}
if (content?.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Play or process the translated audio chunk (base64 encoded)
console.debug(`Received audio chunk (${audioData.length} bytes)`);
}
}
}
},
onerror: (e) => console.debug('Error:', e.message),
onclose: (e) => console.debug('Close:', e.reason),
},
});
console.debug("Session started with translation");
}
main();
WebSockets
const API_KEY = "YOUR_API_KEY";
const MODEL_NAME = "gemini-3.5-live-translate-preview";
const WS_URL = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${API_KEY}`;
const websocket = new WebSocket(WS_URL);
websocket.onopen = () => {
console.log('WebSocket Connected');
const setupMessage = {
setup: {
model: `models/${MODEL_NAME}`,
generationConfig: {
responseModalities: ['AUDIO'],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
}
}
};
websocket.send(JSON.stringify(setupMessage));
};
websocket.onmessage = (event) => {
const response = JSON.parse(event.data);
if (response.serverContent) {
const content = response.serverContent;
if (content.inputTranscription) {
console.log('Input transcript:', content.inputTranscription.text, `(${content.inputTranscription.languageCode})`);
}
if (content.outputTranscription) {
console.log('Output transcript:', content.outputTranscription.text, `(${content.outputTranscription.languageCode})`);
}
if (content.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Play or process the translated audio chunk (base64 encoded)
console.debug(`Received audio chunk (${audioData.length} bytes)`);
}
}
}
}
};
Audio senden
Wenn Sie Spracheingaben für die Übersetzung streamen möchten, senden Sie rohes 16‑Bit-PCM-Audio im Little-Endian-Format.
- Eingabeaudioformat: Rohes 16‑Bit-PCM mit 16 kHz (Mono, Little Endian).
- Audioausgabeformat: Rohes 16‑Bit-PCM mit 24 kHz (Mono, Little Endian).
- Chunk-Größe und Latenz: Senden Sie Audio in Chunks von 100 ms.
Die folgenden Beispiele zeigen, wie Sie Audio-Chunks an die Sitzung senden.
Python
# Assuming 'chunk' is your raw PCM audio bytes
await session.send_realtime_input(
audio=types.Blob(
data=chunk,
mime_type="audio/pcm;rate=16000"
)
)
JavaScript
// Assuming 'chunk' is a Buffer of raw PCM audio
session.sendRealtimeInput({
audio: {
data: chunk.toString('base64'),
mimeType: 'audio/pcm;rate=16000'
}
});
WebSockets
// Assuming 'chunk' is a Buffer of raw PCM audio
function sendAudioChunk(chunk) {
if (websocket.readyState === WebSocket.OPEN) {
const audioMessage = {
realtimeInput: {
audio: {
data: chunk.toString('base64'),
mimeType: 'audio/pcm;rate=16000'
}
}
};
websocket.send(JSON.stringify(audioMessage));
}
}
Konfiguration
Wenn Sie die Übersetzung aktivieren möchten, müssen Sie translationConfig in generationConfig während der Sitzungseinrichtung angeben.
Einrichtungsnachrichten konfigurieren
Das generationConfig unterstützt die folgenden Felder, um Transkripte zu aktivieren:
inputAudioTranscription: Ein Objekt, das, sofern vorhanden, dem Modell ermöglicht, Texttranskripte der Audioeingabe zu senden.outputAudioTranscription: Ein Objekt, das, sofern vorhanden, dem Modell ermöglicht, Texttranskripte der (übersetzten) Audioausgabe zu senden.
translationConfig unterstützt die folgenden Felder:
targetLanguageCode: Der BCP-47-Sprachcode der Sprache, in die das Modell übersetzen soll (z.B."pl"für Polnisch,"es"für Spanisch). Die Standardeinstellung ist"en".echoTargetLanguage: Ein boolescher Wert, der angibt, wie mit Audioeingaben umgegangen werden soll, die bereits in der Zielsprache vorliegen. Wenn der Wert auftruegesetzt ist, gibt das Modell Audioeingaben, die bereits in der Zielsprache vorliegen, unverändert wieder. Wenn der Wert auffalsegesetzt ist, gibt das Modell keine Antwort aus, wenn die Eingabesprache bereits die Zielsprache ist. Die Standardeinstellung istfalse.
Hier sehen Sie ein Beispiel für die Struktur der Einrichtungsnachricht:
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": [
"AUDIO"
],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
Einmal-Tokens für clientseitige Anwendungen
Bei Client-Server-Anwendungen können Sie kurzlebige Tokens (derzeit in v1alpha) verwenden, um zu verhindern, dass Ihr API-Schlüssel offengelegt wird.
Bei der Verwendung von temporären Tokens mit der Live-Übersetzung gilt Folgendes:
- Sie müssen den Endpunkt
v1alphaverwenden. - Konfiguration sperren:Standardmäßig sollten Sie die
translationConfigin den Einschränkungen für die Token-Erstellung auf Ihrem Server angeben. So wird die Übersetzungskonfiguration gesperrt und kann nicht vom Client manipuliert werden. - Konfiguration zum Entsperren:Wenn Sie
translationConfigauf der Clientseite festlegen möchten, z. B. damit ein Nutzer seine eigene Zielsprache auswählen kann, müssen Sie sie aus der Anfrage zum Erstellen des Tokens weglassen und stattdessen"lock_additional_fields": []festlegen. Dadurch wird die Möglichkeit freigeschaltet,translationConfigclientseitig festzulegen.
Eingeschränktes sitzungsspezifisches Token erstellen
Die folgenden Beispiele zeigen, wie Sie ein temporäres Token mit Übersetzungsbeschränkungen erstellen.
Python
import datetime
from google import genai
now = datetime.datetime.now(tz=datetime.timezone.utc)
client = genai.Client(
http_options={'api_version': 'v1alpha'}
)
token = client.auth_tokens.create(
config = {
'uses': 1,
'expire_time': now + datetime.timedelta(minutes=30),
'live_connect_constraints': {
'model': 'gemini-3.5-live-translate-preview',
'config': {
'translation_config': {
'target_language_code': 'pl',
'echo_target_language': True
}
}
},
'http_options': {'api_version': 'v1alpha'},
}
)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const expireTime = new Date(Date.now() + 30 * 60 * 1000).toISOString();
const token = await client.authTokens.create({
config: {
uses: 1,
expireTime: expireTime,
liveConnectConstraints: {
model: 'gemini-3.5-live-translate-preview',
config: {
responseModalities: ['AUDIO'],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
}
},
httpOptions: {
apiVersion: 'v1alpha'
}
},
});
Beschränkungen
- Eingabemodalitäten: Für die Übersetzung wird nur Audioeingabe unterstützt. Texteingabe wird nicht unterstützt.
- Stimmreplikation: Die Stimmreplikation kann uneinheitlich sein. Stimmen können sich nach längeren Pausen ändern, basierend auf dem Beginn der Sprache das falsche Geschlecht zuweisen oder bei schnellen Unterhaltungen mit mehreren Sprechern bei einer Stimme bleiben.
- Spracherkennung: Die Spracherkennung hat Schwierigkeiten mit starken Akzenten, ähnlichen Sprachen (z. B. Spanisch und Portugiesisch) oder schnellen Sprachwechseln. Hinweis:Dies sollte sich nur auf das Eingabetranskript auswirken. Sprachcodes und die endgültige Übersetzung sollten weiterhin korrekt sein.
- Hintergrundaudio: Das Modell ist so konzipiert, dass Rauschen und Musik herausgefiltert werden, um eine saubere Sprachausgabe zu erzeugen. Es kann jedoch sein, dass nicht alle Hintergrundgeräusche ignoriert werden.
- Echo Target Language (Zielsprache wiederholen): Wenn
echoTargetLanguage: trueaktiviert ist, können Hintergrundgeräusche oder Musik Artefakte im übersetzten Audio verursachen, wenn das Eingabe-Audio bereits in der Zielsprache ist.
Unterstützte Sprachen
Die folgenden Sprachen werden für die Live-Übersetzung unterstützt.
| Sprache | BCP-47-Code | Sprache | BCP-47-Code |
|---|---|---|---|
| Afrikaans | af | Kasachisch | kk |
| Akan | ak | Khmer | km |
| Albanisch | sq | Kinyarwanda | rw |
| Amharisch | am | Koreanisch | ko |
| Arabisch | ar | Lao | lo |
| Armenisch | hy | Lettisch | lv |
| Aserbaidschanisch | az | Litauisch | lt |
| Baskisch | eu | Mazedonisch | mk |
| Belarussisch | be | Malaiisch | ms |
| Bengalisch | bn | Malayalam | ml |
| Bulgarisch | bg | Marathi | mr |
| Burmesisch (Myanmar) | my | Mongolisch | mn |
| Katalanisch | ca | Nepalesisch | ne |
| Chinesisch (vereinfacht) | zh-Hans | Norwegisch | no, nb |
| Chinesisch (traditionell) | zh-Hant | Persisch | fa |
| Kroatisch | Std. | Polnisch | pl |
| Tschechisch | cs | Portugiesisch (Brasilien) | pt-BR |
| Dänisch | da | Portugiesisch (Portugal) | pt-PT |
| Niederländisch | nl | Punjabi | pa |
| Englisch | de | Rumänisch | ro |
| Estnisch | et | Russisch | ru |
| Filipino | fil | Serbisch | sr |
| Finnisch | fi | Sindhi | sd |
| Französisch | fr | Singhalesisch | si |
| Galizisch | gl | Slowakisch | sk |
| Georgisch | ka | Slowenisch | sl |
| Deutsch | de | Spanisch | es |
| Griechisch | el | Sundanesisch | su |
| Gujarati | gu | Swahili | sw |
| Hausa | ha | Schwedisch | sv |
| Hebräisch | er | Tamil | ta |
| Hindi | hi | Telugu | te |
| Ungarisch | hu | Thailändisch | th |
| Isländisch | ist | Türkisch | tr |
| Indonesisch | id | Ukrainisch | uk |
| Italienisch | it | Urdu | ur |
| Japanisch | ja | Usbekisch | uz |
| Javanisch | jv | Vietnamesisch | vi |
| Kannada | kn | Zulu | zu |
Nächste Schritte
- Vollständigen Leitfaden zu den Funktionen der Live API lesen
- Lesen Sie die Anleitung „Erste Schritte mit dem SDK“.
- Anleitung für die ersten Schritte mit WebSockets
- Lesen Sie den Leitfaden zu Einmal-Tokens für die sichere Authentifizierung in Client-Server-Anwendungen.
- Klonen Sie die Live API-Beispiele aus GitHub.