Gemini Live 同声传译
gemini-3.5-live-translate-preview 是语音到语音的同声传译模型。输入为 16 kHz、单声道、16-bit 小端 PCM;输出为 24 kHz PCM。目标语言使用 BCP-47,默认 en。模型 ID 以 获取模型 modality=audio 为准。
两条入口:
- Gemini Live 兼容:客户端发送官方 Live JSON,服务端原样回传 Live 帧。
- 平台 Realtime:客户端发送平台事件,服务端回传平台事件。
Endpoint
| Method | URL | 说明 |
|---|---|---|
| WebSocket | {TRINITY_API_ORIGIN}/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent | Gemini Live 兼容 |
| WebSocket | {TRINITY_WS_BASE_URL}/realtime?model=gemini-3.5-live-translate-preview | 平台 Realtime |
Base URL
| 项 | 值 |
|---|---|
| API Origin | https://api.trinitydesk.ai |
| Base URL | https://api.trinitydesk.ai/v1 |
| WebSocket | wss://api.trinitydesk.ai/v1 |
| 协议 | WSS |
bash
export TRINITY_API_ORIGIN="https://api.trinitydesk.ai"
export TRINITY_WS_BASE_URL="wss://api.trinitydesk.ai/v1"
export TRINITY_API_KEY="xh-..."Headers
| Header | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer <TRINITY_API_KEY> |
查询参数 api_key 或 key 可代替该 Header。
请求示例
Gemini Live 兼容
text
wss://api.trinitydesk.ai/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent连接后的第一条文本消息是 setup:
json
{
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": ["AUDIO"],
"translationConfig": {
"targetLanguageCode": "zh-Hans",
"echoTargetLanguage": false
}
},
"inputAudioTranscription": {},
"outputAudioTranscription": {}
}
}随后发送 16 kHz PCM:
json
{
"realtimeInput": {
"audio": {
"mimeType": "audio/pcm;rate=16000",
"data": "<base64>"
}
}
}音频流结束:
json
{ "realtimeInput": { "audioStreamEnd": true } }平台 Realtime
text
wss://api.trinitydesk.ai/v1/realtime?model=gemini-3.5-live-translate-previewjson
{
"session_type": "translation",
"output_modalities": ["audio"],
"translation": {
"target_language_code": "zh-Hans",
"echo_target_language": false
}
}json
{ "type": "input_audio_buffer.append", "audio": "<base64>" }json
{ "type": "input_audio_buffer.commit" }请求体字段
Gemini Live 兼容
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
setup.model | string | 是 | models/gemini-3.5-live-translate-preview。第一条消息必须是 setup |
setup.generationConfig.responseModalities | string[] | 是 | ["AUDIO"] |
setup.generationConfig.translationConfig.targetLanguageCode | string | 否 | BCP-47。默认 en。例:zh-Hans、zh-Hant、ja |
setup.generationConfig.translationConfig.echoTargetLanguage | boolean | 否 | 默认 false。为 true 时输出包含目标语言的回声 |
setup.inputAudioTranscription | object | 否 | 打开输入转写。对象可为空 |
setup.outputAudioTranscription | object | 否 | 打开输出转写。对象可为空 |
setup.sessionResumption | object | 否 | 续接上一通会话。不传则每次连接都是新会话 |
setup.contextWindowCompression | object | 否 | 上下文压缩。不传则不启用 |
realtimeInput.audio.mimeType | string | 是 | audio/pcm;rate=16000 |
realtimeInput.audio.data | string | 是 | PCM 的 base64 |
realtimeInput.audioStreamEnd | boolean | 否 | true 表示本段音频结束 |
tools、instructions、文本、图像、视频输入不在本模型的请求里。出现这些字段时连接返回错误并关闭。
转写对象放在 setup 下,与 generationConfig 同级。
平台 Realtime
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
session_type | string | 否 | 有该字段时必须为 translation |
output_modalities | string[] | 否 | 有该字段时必须为 ["audio"] |
translation.target_language_code | string | 否 | 同 targetLanguageCode。默认 en |
translation.echo_target_language | boolean | 否 | 默认 false |
input_audio_transcription | object | 否 | 输入转写 |
output_audio_transcription | object | 否 | 输出转写 |
session_config.session_resumption | object | 否 | 续接 |
session_config.context_window_compression | object | 否 | 上下文压缩 |
session_config.realtime_input | object | 否 | 实时输入配置 |
type | string | 条件 | input_audio_buffer.append 或 input_audio_buffer.commit。session.update、session.create 按会话配置处理 |
audio | string | 条件 | append 时的 16 kHz PCM base64 |
未带 type 的 JSON 对象按会话配置处理。第一条音频到达前若还没有会话配置,平台使用目标语言 en、输出模态 audio。
instructions、tools、tool_choice、reasoning 以及文本、图像、视频输入会返回 {"type":"error","error":{"message":"..."}} 并关闭连接。
返回字段
Gemini Live 兼容
服务端帧为 Gemini Live JSON。
| 字段 | 说明 |
|---|---|
setupComplete | 会话已建立。也可为 setup_complete |
serverContent.modelTurn.parts[].inlineData | 24 kHz PCM,mimeType 为 audio/pcm;rate=24000,data 为 base64 |
serverContent.inputTranscription.text | 输入转写增量 |
serverContent.outputTranscription.text | 输出转写增量 |
serverContent.turnComplete | 当前轮结束 |
serverContent.interrupted | 当前轮被打断 |
serverContent.generationComplete | 本段生成结束 |
goAway.timeLeft | 连接剩余时间。之后需要新的 WebSocket |
sessionResumptionUpdate | 续接句柄。原样返回 |
平台 Realtime
type | 字段 | 说明 |
|---|---|---|
session.ready | session_id | 会话已建立 |
response.audio.delta | delta、mime_type | 24 kHz PCM base64。mime_type 缺省为 audio/pcm;rate=24000 |
input_audio_transcription.delta | text | 输入转写 |
output_audio_transcription.delta | text | 输出转写 |
response.done | status=completed | 当前轮结束 |
response.interrupted | status=interrupted | 当前轮被打断 |
response.generation.complete | 本段生成结束 | |
session.go_away | time_left | 连接剩余时间 |
error | error.message | 请求被拒绝 |
音频 token 按 获取价目 modality=audio 结算。转写文本 token 不计入费用。
返回示例
Gemini Live 兼容:
json
{ "setupComplete": {} }json
{
"serverContent": {
"modelTurn": {
"parts": [
{
"inlineData": {
"mimeType": "audio/pcm;rate=24000",
"data": "<base64>"
}
}
]
},
"outputTranscription": { "text": "你好" }
}
}json
{ "goAway": { "timeLeft": "60s" } }平台 Realtime:
json
{ "type": "session.ready", "session_id": "sess_xxx" }json
{
"type": "response.audio.delta",
"delta": "<base64>",
"mime_type": "audio/pcm;rate=24000"
}json
{ "type": "output_audio_transcription.delta", "text": "你好" }json
{ "type": "session.go_away", "time_left": "60s" }余额不足时,兼容口返回:
json
{
"error": {
"code": 429,
"message": "Resource exhausted.",
"status": "RESOURCE_EXHAUSTED"
}
}平台口返回:
json
{ "type": "error", "error": { "message": "insufficient balance" } }Python 示例
Gemini Live 兼容:
python
import json
import os
import websocket
origin = os.environ["TRINITY_API_ORIGIN"].replace("https://", "wss://")
ws = websocket.create_connection(
origin + "/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent",
header=["Authorization: Bearer " + os.environ["TRINITY_API_KEY"]],
)
ws.send(json.dumps({
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": ["AUDIO"],
"translationConfig": {
"targetLanguageCode": "zh-Hans",
"echoTargetLanguage": False,
},
},
"inputAudioTranscription": {},
"outputAudioTranscription": {},
}
}))
print(ws.recv())
ws.close()平台 Realtime:
python
import json
import os
import websocket
ws = websocket.create_connection(
os.environ["TRINITY_WS_BASE_URL"] + "/realtime?model=gemini-3.5-live-translate-preview",
header=["Authorization: Bearer " + os.environ["TRINITY_API_KEY"]],
)
ws.send(json.dumps({
"session_type": "translation",
"output_modalities": ["audio"],
"translation": {"target_language_code": "zh-Hans"},
}))
ws.send(json.dumps({"type": "input_audio_buffer.append", "audio": "<base64>"}))
print(ws.recv())
ws.close()相关
- 实时音频(Realtime)
- 获取模型(
modality=audio) - 获取价目
- 错误与调试