Gemini Live API, gemini-3.5-live-translate-preview modelini kullanarak 70'ten fazla dil arasında düşük gecikmeli, gerçek zamanlı konuşma çevirisini destekler. Live API'yi çeviri ayarlarıyla yapılandırarak sesi bir dilde yayınlayabilir ve çevrilmiş ses çıkışını başka bir dilde alabilirsiniz. Böylece, anlık ve sorunsuz bir şekilde sesli çeviri yapabilirsiniz.
Canlı Müşteri Temsilcisi ve Canlı Çeviri
Her ikisi de Live API'yi kullanırken Canlı Çeviri'nin zihinsel modeli, sohbet tarzında anlık temsilci etkileşimlerinden farklıdır.
| Canlı Müşteri Temsilcisi | Canlı Çeviri |
|---|---|
| Model, asistan olarak hareket eder. Dinler, akıl yürütür ve sizin adınıza işlem yapar. | Model, çevirmen olarak hareket eder. Anında çeviri işlem hattı gibi çalışır. |
| Sıra tabanlı etkileşimler kullanır. Duraklamalara, amaç algılamaya dayanır ve kesintileri yönetir. | Sürekli akış işleme kullanır. Konuşmacının sözünü bitirmesini beklemeden konuşma sırasında çeviri yapar. |
| Araçları ve temsilcileri destekler. İşlev çağrısı, Google Arama ve talimatlar için yerel destek. | Yalnızca çeviriyi destekler. Tamamen düşük gecikmeli çeviri; araçlar veya talimatlar desteklenmez. |
| Tamamen çok formatlıdır. Metin, ses, video ve görüntü girişlerini destekler. | Ses kısıtlanmıştır. Anlık gecikme eşiklerinin katı bir şekilde uygulanması için giriş yalnızca sesle sınırlıdır. |
| Ayrıntılı yapılandırma: Üretim, konuşma, araçlar ve sistem talimatlarını kullanır. | Basitleştirilmiş yapılandırma. target_language_code ve echo_target_language gibi açma/kapatma düğmelerini ayarlayın. |
Başlayın
Aşağıdaki örneklerde, bir istemcinin nasıl başlatılacağı ve çeviri yapılandırmasıyla Live API'ye nasıl bağlanılacağı gösterilmektedir.
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)`);
}
}
}
}
};
Ses gönderme
Çeviri için ses girişlerini yayınlamak üzere ham, little-endian, 16 bit PCM ses gönderirsiniz.
- Giriş ses biçimi: 16 kHz'de (mono, little-endian) ham 16 bit PCM.
- Çıkış ses biçimi: 24 kHz'de (mono, little-endian) ham 16 bit PCM.
- Parça Boyutu ve Gecikme: Sesleri 100 ms'lik parçalar halinde gönderin.
Aşağıdaki örneklerde, ses parçalarının oturuma nasıl gönderileceği gösterilmektedir.
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));
}
}
Yapılandırma
Çeviriyi etkinleştirmek için oturum kurulumu sırasında translationConfig öğesini generationConfig içinde belirtmeniz gerekir.
Kurulum mesajı yapılandırması
generationConfig, transkriptleri etkinleştirmek için aşağıdaki alanları destekler:
inputAudioTranscription: Mevcut olduğunda modelin, giriş sesinin metin transkriptlerini göndermesini sağlayan bir nesne.outputAudioTranscription: Mevcut olduğunda modelin, çıkış (çevrilmiş) sesin metin transkriptlerini göndermesini sağlayan bir nesne.
translationConfig aşağıdaki alanları destekler:
targetLanguageCode: Modelin çevirmesini istediğiniz dilin BCP-47 dil kodu (ör. Lehçe için"pl", İspanyolca için"es"). Varsayılan olarak"en"değerine ayarlanır.echoTargetLanguage: Hedef dildeki giriş sesinin nasıl işleneceğini belirten bir boole.trueolarak ayarlanırsa model, hedef dildeki giriş sesini tekrarlar.falseolarak ayarlanırsa model, giriş konuşması hedef dilde olduğunda sessiz kalır. Varsayılan olarakfalsedeğerine ayarlanır.
Aşağıda, kurulum mesajı yapısı örneği verilmiştir:
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": [
"AUDIO"
],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
İstemci tarafı uygulamaları için kısa ömürlü jetonlar
İstemciden sunucuya uygulamalarda, API anahtarınızı açığa çıkarmamak için kısa ömürlü jetonlar (şu anda v1alpha aşamasında) kullanabilirsiniz.
Canlı Çeviri ile geçici jetonlar kullanılırken:
v1alphauç noktasını kullanmanız gerekir.- Kilitleme yapılandırması: Varsayılan olarak, sunucunuzdaki jeton oluşturma kısıtlamalarında
translationConfigdeğerini belirtmeniz gerekir. Bu sayede çeviri yapılandırması kilitlenir ve istemci tarafından değiştirilemez. - Yapılandırmanın kilidini açma:
translationConfigdeğerini istemci tarafında ayarlayabilmek istiyorsanız (ör. kullanıcının kendi hedef dilini seçmesine izin vermek için) bu değeri jeton oluşturma isteğinden çıkarmanız ve bunun yerine"lock_additional_fields": []değerini ayarlamanız gerekir. Bu işlem,translationConfigöğesinin istemci tarafında ayarlanabilmesini sağlar.
Sınırlı bir geçici jeton oluşturma
Aşağıdaki örneklerde, çeviri kısıtlamaları içeren geçici jetonun nasıl oluşturulacağı gösterilmektedir.
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'
}
},
});
Sınırlamalar
- Giriş Biçimleri: Çeviri için yalnızca ses girişi desteklenir. Metin girişi desteklenmez.
- Ses Çoğaltma: Ses çoğaltma tutarsız olabilir. Uzun duraklamalardan sonra sesler değişebilir, konuşmanın başlangıcına göre yanlış cinsiyet atanabilir veya hızlı çok konuşmacılı sohbetlerde tek bir seste takılı kalınabilir.
- Dil algılama: Dil algılama, yoğun aksanlar, benzer diller (ör. İspanyolca ve Portekizce) veya hızlı dil geçişleri konusunda zorlanır. Not: Bu durum yalnızca giriş transkriptini etkiler. Dil kodları ve nihai çeviri doğru olmalıdır.
- Arka plan sesi: Model, temiz konuşma üretmek için gürültüyü ve müziği filtreleyecek şekilde tasarlanmıştır ancak tüm arka plan sesleri göz ardı edilmeyebilir.
- Hedef Dili Tekrarla:
echoTargetLanguage: trueseçeneği etkinleştirildiğinde, giriş sesi zaten hedef dildeyse arka plan gürültüsü veya müzik, çevrilen seste yapaylıklar oluşturabilir.
Desteklenen diller
Canlı Çeviri özelliği aşağıdaki dillerde desteklenir.
| Dil | BCP-47 Kodu | Dil | BCP-47 Kodu |
|---|---|---|---|
| Afrikaanca | af | Kazakça | kk |
| Akan | ak | Kmerce | km |
| Arnavutça | sq | Ruandaca | rw |
| Amharca | öö | Korece | ko |
| Arapça | ar | Laoca | lo |
| Ermenice | hy | Letonca | lv |
| Azerice | az | Litvanca | lt |
| Baskça | eu | Makedonca | mk |
| Belarusça | be | Malayca | ms |
| Bengalce | bn | Malayalam | ml |
| Bulgarca | bg | Marathi | mr |
| Birmanca (Myanmar) | my | Moğolca | mn |
| Katalanca | ca | Nepalce | ne |
| Çince (Basitleştirilmiş) | zh-Hans | Norveççe | no, nb |
| Çince (Geleneksel) | zh-Hant | Farsça | fa |
| Hırvatça | s | Lehçe | pl |
| Çekya | cs | Portekizce (Brezilya) | pt-BR |
| Danca | da | Portekizce (Portekiz) | pt-PT |
| Felemenkçe | nl | Pencapça | pa |
| İngilizce | en | Rumence | ro |
| Estonca | et | Rusça | ru |
| Filipince | fil | Sırpça | sr |
| Fince | fi | Sindice | sd |
| Fransızca | fr | Seylanca | si |
| Galiçyaca | gl | Slovakça | sk |
| Gürcüce | ka | Slovence | sl |
| Almanca | de | İspanyolca | es |
| Yunanca | el | Sunda dili | su |
| Güceratça | gu | Swahili | sw |
| Hausaca | ha | İsveççe | sv |
| İbranice | o | Tamilce | ta |
| Hintçe | hi | Telugu dili | te |
| Macarca | hu | Tayca | th |
| İzlandaca | : | Türkçe | tr |
| Endonezce | id | Ukraynaca | uk |
| İtalyanca | it | Urduca | UR |
| Japonca | ja | Özbekçe | uz |
| Cava dili | jv | Vietnamca | vi |
| Kannada | kn | Zulu | zu |
Sırada ne var?
- Live API Özellikleri kılavuzunun tamamını okuyun.
- SDK'yı kullanmaya başlama kılavuzunu okuyun.
- WebSocket'leri kullanmaya başlama kılavuzunu okuyun.
- İstemciden sunucuya uygulamalarda güvenli kimlik doğrulama için Geçici jetonlar kılavuzunu okuyun.
- GitHub'dan Live API examples'ı (Canlı API örnekleri) kopyalayın.