API-ja Gemini Live mbështet përkthimin me vonesë të ulët dhe në kohë reale nga të folurit në të folur midis më shumë se 70 gjuhëve duke përdorur modelin gemini-3.5-live-translate-preview . Duke konfiguruar API-në Live me cilësimet e përkthimit, mund të transmetoni audio në një gjuhë dhe të merrni dalje audio të përkthyer në një gjuhë tjetër, duke mundësuar përkthim të pandërprerë nga zëri në zë në kohë reale.
Agjent i drejtpërdrejtë kundrejt përkthimit të drejtpërdrejtë
Ndërsa të dyja përdorin Live API, modeli mendor për Live Translation është i ndryshëm nga bashkëveprimet bisedore në kohë reale të agjentëve.
| Agjent i drejtpërdrejtë | Përkthim i drejtpërdrejtë |
|---|---|
| Modeli vepron si një asistent. Ai dëgjon, arsyeton dhe ndërmerr veprime në emrin tuaj. | Modeli vepron si një interpretues. Ai sillet si një tubacion përkthyesish në kohë reale. |
| Përdor ndërveprime me radhë. Mbështetet në pauza, zbulimin e qëllimit dhe trajton ndërprerjet. | Përdor përpunimin e vazhdueshëm të rrjedhës. Përkthehet ndërsa folësi flet pa pritur radhën. |
| Mbështet mjetet dhe agjentët. Mbështetje native për thirrjen e funksioneve, Kërkimin në Google dhe udhëzimet. | Mbështet vetëm përkthimin. Përkthim i pastër me vonesë të ulët; nuk ka mbështetje për mjete ose udhëzime. |
| Plotësisht multimodal. Mbështet hyrjen e tekstit, audios, videos dhe imazheve. | Audio e kufizuar. Hyrja është e kufizuar në audio për të siguruar pragje të rrepta të vonesës në kohë reale. |
| Konfigurim i detajuar. Përdor gjenerimin, të folurit, mjetet dhe udhëzimet e sistemit. | Konfigurim i thjeshtuar. Vendos target_language_code dhe ndërruesit si echo_target_language . |
Filloni
Shembujt e mëposhtëm demonstrojnë se si të inicializohet një klient dhe të lidhet me Live API me një konfigurim përkthimi.
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)`);
}
}
}
}
};
Duke dërguar audion
Për të transmetuar të dhëna zanore për përkthim, ju dërgoni audio PCM të papërpunuar, little-endian, 16-bit.
- Formati i hyrjes audio : PCM 16-bit i papërpunuar në 16kHz (mono, little-endian).
- Formati i audios së daljes : PCM 16-bit i papërpunuar në 24kHz (mono, little-endian).
- Madhësia e copëzave dhe vonesa : Dërgoni audio në copëza prej 100ms.
Shembujt e mëposhtëm tregojnë se si të dërgoni pjesë audio në seancë.
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));
}
}
Konfigurimi
Për të aktivizuar përkthimin, duhet të specifikoni translationConfig brenda generationConfig gjatë konfigurimit të sesionit.
Konfigurimi i mesazhit të konfigurimit
generationConfig mbështet fushat e mëposhtme për të aktivizuar transkriptet:
-
inputAudioTranscription: Një objekt që, kur është i pranishëm, i mundëson modelit të dërgojë transkripte teksti të audios hyrëse. -
outputAudioTranscription: Një objekt që, kur është i pranishëm, i mundëson modelit të dërgojë transkripte teksti të audios së daljes (të përkthyer).
translationConfig mbështet fushat e mëposhtme:
-
targetLanguageCode: Kodi gjuhësor BCP-47 i gjuhës në të cilën dëshironi të përkthehet modeli (p.sh.,"pl"për polonisht,"es"për spanjisht). Parazgjedhja është"en". -
echoTargetLanguage: Një vlerë booleane që tregon se si duhet të trajtohet audioja hyrëse që është tashmë në gjuhën e synuar. Nëse vendoset nëtrue, modeli do të bëjë jehonë (papagall) audioje hyrëse që është tashmë në gjuhën e synuar. Nëse vendoset nëfalse, modeli do të qëndrojë i heshtur kur të folurit hyrës është tashmë në gjuhën e synuar. Parazgjedhja ështëfalse.
Ja një shembull i strukturës së mesazhit të konfigurimit:
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": [
"AUDIO"
],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
Tokenat efemerale për aplikacionet nga ana e klientit
Për aplikacionet klient-server, mund të përdorni tokena efemeralë (aktualisht në v1alpha ) për të shmangur ekspozimin e çelësit tuaj API.
Kur përdorni tokena kalimtarë me Përkthim të Drejtpërdrejtë:
- Duhet të përdorni pikën fundore
v1alpha. - Kyçja e konfigurimit: Si parazgjedhje, duhet të specifikoni
translationConfignë kufizimet e krijimit të tokenit në serverin tuaj. Kjo siguron që konfigurimi i përkthimit të jetë i kyçur dhe të mos mund të ndërhyhet nga klienti. - Çaktivizimi i konfigurimit: Nëse dëshironi të jeni në gjendje të caktoni
translationConfignë anën e klientit (për shembull, për të lejuar një përdorues të zgjedhë gjuhën e tij të synuar), duhet ta hiqni atë nga kërkesa e krijimit të tokenit dhe të vendosni"lock_additional_fields": []në vend të kësaj. Kjo do ta çaktivizojëtranslationConfigqë do të caktohet në anën e klientit.
Krijimi i një tokeni të kufizuar efemeral
Shembujt e mëposhtëm demonstrojnë se si të krijoni një token kalimtar me kufizime përkthimi.
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'
}
},
});
Kufizime
- Modalitetet e Hyrjes : Vetëm hyrja audio mbështetet për përkthim. Hyrja e tekstit nuk mbështetet.
- Replikimi i zërit : Replikimi i zërit mund të jetë i paqëndrueshëm. Zërat mund të ndryshojnë pas pauzave të gjata, të caktojnë gjininë e gabuar bazuar në mënyrën se si fillon fjalimi ose të ngecin në një zë gjatë bisedave të shpejta me shumë folës.
- Zbulimi i gjuhës : Zbulimi i gjuhës ka vështirësi me thekse të forta, gjuhë të ngjashme (p.sh., spanjisht kundrejt portugalishtes) ose ndërrime të shpejta gjuhësh. Shënim: Kjo duhet të ndikojë vetëm në transkriptin e të dhënave hyrëse. Kodet e gjuhës dhe përkthimi përfundimtar duhet të jenë ende të sakta.
- Audio në Sfond : Modeli është projektuar për të filtruar zhurmën dhe muzikën për të prodhuar të folur të pastër, por jo të gjitha audiot në sfond mund të injorohen.
- Gjuha e Targetit Echo : Kur
echoTargetLanguage: true, zhurma në sfond ose muzika mund të sjellin artefakte në audion e përkthyer kur audioja hyrëse është tashmë në gjuhën e synuar.
Gjuhët e mbështetura
Gjuhët e mëposhtme mbështeten për Përkthimin e Drejtpërdrejtë.
| Gjuha | Kodi BCP-47 | Gjuha | Kodi BCP-47 |
|---|---|---|---|
| Afrikanisht | af | Kazake | kk |
| Akan | ak | Khmer | km |
| shqip | katror | Kinyarwanda | rw |
| Amarike | jam | Koreane | ko |
| Arabisht | ar | Lao | lo |
| armenisht | hy | letonisht | lv |
| Azerbajxhanisht | az | lituanisht | lt |
| bask | BE | maqedonase | mk |
| Bjellorusisht | të jem | Malajisht | ms |
| Bengalisht | miliardë | Malajalamisht | ml |
| bullgar | bg | Marathi | z. |
| Birmanisht (Myanmar) | imja | mongolisht | muaj |
| Katalanisht | ca | Nepalisht | ne |
| Kinezisht (e thjeshtuar) | zh-Hans | Norvegjisht | jo, shënim |
| Kinezisht (Tradicionale) | zh-Hant | persisht | fa |
| Kroatisht | orë | polak | pl |
| Çeke | cs | Portugalisht (Brazil) | pt-BR |
| danez | da | Portugalisht (Portugali) | pt-PT |
| holandez | nl | Punjabi | pa |
| Anglisht | en | rumanisht | ro |
| Estonisht | etj. | ruse | ru |
| Filipinase | fil | serbisht | sr |
| finlandez | fi | Sindhi | sd |
| frëngjisht | fr | Sinhalisht | si |
| galike | gl | Sllovakisht | sk |
| gjeorgjian | ka | sllovenisht | sl |
| gjermanisht | de | Spanjisht | es |
| grek | el | Sundanisht | su |
| Guxharatisht | gu | Suahili | jugperëndim |
| Hausisht | ha | suedeze | sv |
| Hebraisht | ai | Tamil | ta |
| Hindisht | përshëndetje | Teluguisht | te |
| hungareze | hu | Tajlandeze | th |
| Islandeze | është | turk | tr |
| Indonezisht | ID | ukrainas | Mbretëria e Bashkuar |
| italiane | atë | Urdu | yti |
| Japonez | po | Uzbekisht | uz |
| Javanisht | jv | Vietnamez | vi |
| Kannada | kn | Zulu | zu |
Çfarë vjen më pas
- Lexoni udhëzuesin e plotë të Aftësive Live API.
- Lexoni udhëzuesin " Filloni me SDK- në".
- Lexoni udhëzuesin "Filloni me WebSockets" .
- Lexoni udhëzuesin e tokenëve Ephemeral për autentifikim të sigurt në aplikacionet klient-me-server.
- Klononi shembujt e API-t Live nga GitHub.