Gemini Live API hỗ trợ tính năng dịch lời nói sang lời nói theo thời gian thực với độ trễ thấp giữa hơn 70 ngôn ngữ bằng mô hình gemini-3.5-live-translate-preview. Bằng cách định cấu hình Live API với chế độ cài đặt dịch, bạn có thể phát trực tiếp âm thanh bằng một ngôn ngữ và nhận đầu ra âm thanh đã dịch bằng một ngôn ngữ khác, nhờ đó có thể dịch liền mạch từ giọng nói sang giọng nói theo thời gian thực.
Nhân viên hỗ trợ trực tiếp so với tính năng Dịch trực tiếp
Mặc dù cả hai đều sử dụng Live API, nhưng mô hình tư duy cho tính năng Dịch trực tiếp khác với các lượt tương tác theo thời gian thực của tác nhân đàm thoại.
| Nhân viên hỗ trợ trực tiếp | Dịch trực tiếp |
|---|---|
| Mô hình này đóng vai trò là một trợ lý. Gemini có thể lắng nghe, suy luận và hành động thay cho bạn. | Mô hình đóng vai trò là một trình thông dịch. Nó hoạt động như một quy trình dịch theo thời gian thực. |
| Sử dụng các lượt tương tác theo lượt. Dựa vào các khoảng tạm dừng, tính năng phát hiện ý định và xử lý các trường hợp gián đoạn. | Sử dụng xử lý theo luồng liên tục. Dịch ngay khi người nói trò chuyện mà không cần chờ đến lượt. |
| Hỗ trợ các công cụ và tác nhân. Hỗ trợ gốc cho tính năng gọi hàm, Google Tìm kiếm và hướng dẫn. | Chỉ hỗ trợ tính năng dịch. Bản dịch thuần tuý có độ trễ thấp; không hỗ trợ các công cụ hoặc hướng dẫn. |
| Hoàn toàn đa phương thức. Hỗ trợ thông tin đầu vào ở dạng văn bản, âm thanh, video và hình ảnh. | Âm thanh bị hạn chế. Dữ liệu đầu vào chỉ giới hạn ở âm thanh để đảm bảo ngưỡng độ trễ theo thời gian thực nghiêm ngặt. |
| Cấu hình chi tiết. Sử dụng các hướng dẫn về việc tạo, lời nói, công cụ và hệ thống. | Đơn giản hoá cấu hình. Đặt target_language_code và các nút bật/tắt như echo_target_language. |
Bắt đầu
Các ví dụ sau đây minh hoạ cách khởi tạo một ứng dụng và kết nối với Live API bằng cấu hình dịch.
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)`);
}
}
}
}
};
Đang gửi âm thanh
Để truyền trực tuyến dữ liệu đầu vào bằng giọng nói để dịch, bạn sẽ gửi âm thanh PCM 16 bit, little-endian thô.
- Định dạng âm thanh đầu vào: PCM 16 bit thô ở tốc độ 16 kHz (đơn âm, little-endian).
- Định dạng âm thanh đầu ra: PCM 16 bit thô ở 24 kHz (đơn âm, little-endian).
- Kích thước và độ trễ của phân đoạn: Gửi âm thanh theo phân đoạn 100 mili giây.
Các ví dụ sau đây cho biết cách gửi các đoạn âm thanh đến phiên.
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));
}
}
Cấu hình
Để bật tính năng dịch, bạn phải chỉ định translationConfig trong generationConfig trong quá trình thiết lập phiên.
Thiết lập cấu hình thông báo
generationConfig hỗ trợ các trường sau để bật bản chép lời:
inputAudioTranscription: Một đối tượng (nếu có) cho phép mô hình gửi bản chép lời bằng văn bản của âm thanh đầu vào.outputAudioTranscription: Một đối tượng (nếu có) cho phép mô hình gửi bản chép lời bằng văn bản của âm thanh đầu ra (đã dịch).
translationConfig hỗ trợ các trường sau:
targetLanguageCode: Mã ngôn ngữ BCP-47 của ngôn ngữ mà bạn muốn mô hình dịch sang (ví dụ:"pl"cho tiếng Ba Lan,"es"cho tiếng Tây Ban Nha). Giá trị mặc định là"en".echoTargetLanguage: Một giá trị boolean cho biết cách xử lý âm thanh đầu vào đã có bằng ngôn ngữ đích. Nếu được đặt thànhtrue, mô hình sẽ lặp lại (nhại) âm thanh đầu vào đã có sẵn bằng ngôn ngữ đích. Nếu bạn đặt thànhfalse, mô hình sẽ giữ im lặng khi lời nói đầu vào đã ở ngôn ngữ đích. Giá trị mặc định làfalse.
Dưới đây là ví dụ về cấu trúc thông báo thiết lập:
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": [
"AUDIO"
],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
Sử dụng mã thông báo tạm thời trong các ứng dụng phía máy khách
Đối với các ứng dụng từ ứng dụng đến máy chủ, bạn có thể sử dụng mã thông báo tạm thời (hiện ở trạng thái v1beta) để tránh lộ khoá API.
Khi sử dụng mã thông báo tạm thời với tính năng Dịch trực tiếp:
- Bạn phải sử dụng điểm cuối
v1beta. - Khoá cấu hình: Theo mặc định, bạn nên chỉ định
translationConfigtrong các ràng buộc tạo mã thông báo trên máy chủ. Điều này đảm bảo cấu hình dịch được khoá và ứng dụng không thể giả mạo. - Cấu hình mở khoá: Nếu muốn có thể đặt
translationConfigở phía máy khách (ví dụ: để cho phép người dùng chọn ngôn ngữ đích của riêng họ), bạn phải bỏ qua tham số này trong yêu cầu tạo mã thông báo và đặt"lock_additional_fields": []thay thế. Thao tác này sẽ mở khoátranslationConfigđể được đặt ở phía máy khách.
Tạo mã thông báo tạm thời bị hạn chế
Các ví dụ sau đây minh hoạ cách tạo mã thông báo tạm thời có các quy tắc ràng buộc về bản dịch.
Python
import datetime
from google import genai
now = datetime.datetime.now(tz=datetime.timezone.utc)
client = genai.Client()
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
}
}
},
}
)
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
}
}
},
},
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/auth_tokens" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"uses": 1,
"expireTime": "YYYY-MM-DDTHH:MM:SSZ",
"liveConnectConstraints": {
"model": "models/gemini-3.5-live-translate-preview",
"config": {
"responseModalities": ["AUDIO"],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
}'
Các điểm hạn chế
- Phương thức nhập: Chỉ hỗ trợ phương thức nhập bằng âm thanh để dịch. Không hỗ trợ nhập văn bản.
- Nhân bản giọng nói: Tính năng nhân bản giọng nói có thể không nhất quán. Giọng nói có thể thay đổi sau khi tạm dừng lâu, gán sai giới tính dựa trên cách bắt đầu lời nói hoặc bị kẹt ở một giọng nói trong các cuộc trò chuyện nhanh có nhiều người nói.
- Phát hiện ngôn ngữ: Tính năng phát hiện ngôn ngữ gặp khó khăn khi giọng nói có nhiều âm sắc, ngôn ngữ tương tự (ví dụ: tiếng Tây Ban Nha so với tiếng Bồ Đào Nha) hoặc khi ngôn ngữ chuyển đổi nhanh chóng. Lưu ý: Điều này chỉ ảnh hưởng đến bản chép lời đầu vào. Mã ngôn ngữ và bản dịch cuối cùng vẫn phải chính xác.
- Âm thanh nền: Mô hình này được thiết kế để lọc bỏ tiếng ồn và nhạc nhằm tạo ra lời nói rõ ràng, nhưng có thể không bỏ qua được tất cả âm thanh nền.
- Echo Target Language (Lặp lại ngôn ngữ đích): Khi
echoTargetLanguage: true, tạp âm hoặc nhạc nền có thể tạo ra các hiện tượng lạ trong bản âm thanh được dịch khi âm thanh đầu vào đã ở ngôn ngữ đích.
Ngôn ngữ được hỗ trợ
Tính năng Dịch trực tiếp hỗ trợ những ngôn ngữ sau.
| Ngôn ngữ | Mã BCP-47 | Ngôn ngữ | Mã BCP-47 |
|---|---|---|---|
| Tiếng Hà Lan ở Nam Phi | af | Tiếng Kazakh | kk |
| Tiếng Akan | ak | Tiếng Khmer | km |
| Tiếng Albania | sq | Tiếng Kinyarwanda | rw |
| Tiếng Amhara | am | Tiếng Hàn | ko |
| Tiếng Ả Rập | ar | Tiếng Lào | lo |
| Tiếng Armenia | hy | Tiếng Latvia | lv |
| Tiếng Azerbaijan | az | Tiếng Lithuania | lt |
| Tiếng Basque | eu | Tiếng Macedonia | mk |
| Tiếng Belarus | be | Tiếng Malay | ms |
| Tiếng Bengal | bn | Tiếng Malayalam | ml |
| Tiếng Bungary | bg | Tiếng Marathi | mr |
| Tiếng Miến Điện (Myanmar) | my | Tiếng Mông Cổ | mn |
| Tiếng Catalan | ca | Tiếng Nepal | ne |
| Tiếng Trung (Giản thể) | zh-Hans | Tiếng Na Uy | không, nb |
| Tiếng Trung (Phồn thể) | zh-Hant | Persian | fa |
| Croatian | giờ | Tiếng Ba Lan | pl |
| Tiếng Séc | cs | Tiếng Bồ Đào Nha (Brazil) | pt-BR |
| Tiếng Đan Mạch | da | Tiếng Bồ Đào Nha (Bồ Đào Nha) | pt-PT |
| Tiếng Hà Lan | nl | Tiếng Punjab | pa |
| Tiếng Anh | vi | Tiếng Rumani | ro |
| Tiếng Estonia | et | Tiếng Nga | ru |
| Tiếng Philippines | fil | Tiếng Serbia | sr |
| Tiếng Phần Lan | fi | Tiếng Sindh | sd |
| Tiếng Pháp | fr | Tiếng Sinhala | si |
| Tiếng Galicia | gl | Tiếng Slovak | sk |
| Tiếng Gruzia | ka | Tiếng Slovenia | sl |
| Tiếng Đức | de | Tiếng Tây Ban Nha | es |
| Tiếng Hy Lạp | el | Tiếng Sunda | su |
| Tiếng Gujarat | gu | Tiếng Swahili | sw |
| Tiếng Hausa | ha | Tiếng Thuỵ Điển | sv |
| Tiếng Do Thái | hi hi | Tiếng Tamil | ta |
| Tiếng Hindi | hi | Tiếng Telugu | te |
| Tiếng Hungary | hu | Tiếng Thái | th |
| Tiếng Iceland | is | Tiếng Thổ Nhĩ Kỳ | tr |
| Tiếng Indonesia | id | Tiếng Ukraina | uk |
| Tiếng Ý | it | Tiếng Urdu | ur |
| Tiếng Nhật | ja | Tiếng Uzbek | uz |
| Tiếng Java | jv | Tiếng Việt | vi |
| Tiếng Kannada | kn | Tiếng Zulu | zu |
Bước tiếp theo
- Đọc hướng dẫn đầy đủ về Các chức năng của Live API.
- Đọc hướng dẫn Bắt đầu sử dụng SDK.
- Đọc hướng dẫn Bắt đầu sử dụng WebSockets.
- Đọc hướng dẫn về Mã thông báo tạm thời để xác thực an toàn trong các ứng dụng từ ứng dụng đến máy chủ.
- Sao chép các ví dụ về Live API trên GitHub.