Përkthim i drejtpërdrejtë me Gemini Live API

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ë:

  1. Duhet të përdorni pikën fundore v1alpha .
  2. Kyçja e konfigurimit: Si parazgjedhje, duhet të specifikoni translationConfig në 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.
  3. Çaktivizimi i konfigurimit: Nëse dëshironi të jeni në gjendje të caktoni translationConfig në 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ë translationConfig që 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