Skip to main content

簡介

Gemini Live API 支援與 Gemini 進行低延遲、即時的語音和視訊互動。它能夠處理連續的音訊、視訊或文字串流,以提供即時、自然逼真的語音回覆。 主要特性:
  • ✅ 主動音訊:可控制模型何時回應以及在哪些情境下回應
  • ✅ 音訊轉錄:提供使用者輸入和模型輸出的文字轉錄內容
  • ✅ 工具使用:整合函式呼叫和 Google 搜尋等工具
  • ✅ 共情對話:根據使用者輸入內容的情緒表達調整回覆風格和語氣
  • ✅ 打斷功能:使用者可以隨時中斷模型,以便進行回應式互動
  • ✅ 多語言支援:支援用 24 種語言進行對話
  • ✅ 高音質:提供多種語言的自然、逼真的語音

介面說明

端點: wss://console.mixroute.io/v1beta/models/{model}/liveStream 特點:
  • 支援 Gemini 所有原生特性
  • 直接透傳,無協定轉換
  • 使用 Gemini Live API 原生格式
範例:
const ws = new WebSocket('wss://console.mixroute.io/v1beta/models/gemini-live-2.5-flash-native-audio/liveStream', {
  headers: {
    'Authorization': 'Bearer sk-xxxx'
  }
});

認證

Bearer Token,如 Bearer sk-xxxxxxxxxx

支援的模型

以下模型支援 Gemini Live API:
模型 ID可用性使用情境主要特性
gemini-live-2.5-flash-native-audio已全面推出推薦。低延遲語音代理。支援無縫多語言切換和情感基調。原生音訊、音訊轉錄、語音活動偵測、共情對話、主動音訊、工具使用

音色和語言設定

音色設定

Gemini Live API 支援 30 種不同風格的預設音色,每種音色都有獨特的表達特點:
音色名稱風格特點音色名稱風格特點音色名稱風格特點
Zephyr明快Puck歡快Charon資訊豐富
Kore堅定Fenrir興奮Leda青春活力
Orus堅定Aoede輕快Callirrhoe輕鬆愉快
Autonoe明快Enceladus氣聲Iapetus清晰明瞭
Umbriel輕鬆Algieba流暢Despina流暢自然
Erinome清晰Algenib沙啞Rasalgethi資訊豐富
Laomedeia歡快Achernar柔和Alnilam堅定有力
Schedar平穩Gacrux成熟Pulcherrima積極向上
Achird友好Zubenelgenubi隨意Vindemiatrix溫柔舒緩
Sadachbia活潑Sadaltager博學Sulafat溫暖舒適
預設音色:Zephyr(明快)

語言設定

支援 24 種語言,透過 BCP-47 語言代碼指定:
語言代碼語言代碼
阿拉伯語(埃及)ar-EG德語(德國)de-DE
英語(美國)en-US西班牙語(美國)es-US
法語(法國)fr-FR印地語(印度)hi-IN
印尼語id-ID義大利語(義大利)it-IT
日語(日本)ja-JP韓語(韓國)ko-KR
葡萄牙語(巴西)pt-BR俄語(俄羅斯)ru-RU
荷蘭語(荷蘭)nl-NL波蘭語(波蘭)pl-PL
泰語(泰國)th-TH土耳其語(土耳其)tr-TR
越南語(越南)vi-VN羅馬尼亞語ro-RO
烏克蘭語uk-UA孟加拉語bn-BD
英語(印度)en-IN馬拉地語(印度)mr-IN
泰米爾語(印度)ta-IN泰盧固語(印度)te-IN
中文(繁體)zh-TW
預設語言:根據系統指令中的語言自動推斷

使用範例

const ws = new WebSocket('wss://console.mixroute.io/v1beta/models/gemini-live-2.5-flash-native-audio/liveStream', {
  headers: {
    'Authorization': 'Bearer sk-xxxx'
  }
});

ws.onopen = () => {
  console.log('WebSocket connected');
  
  // 發送 setup 訊息
  ws.send(JSON.stringify({
    setup: {
      model: "gemini-live-2.5-flash-native-audio",
      generationConfig: {
        temperature: 0.7,
        responseModalities: ["AUDIO"]
      },
      systemInstruction: {
        parts: [
          { text: "You are a helpful assistant. Speak naturally and conversationally." }
        ]
      },
      speechConfig: {
        voiceConfig: {
          prebuiltVoiceConfig: {
            voiceName: "Puck"
          }
        }
      }
    }
  }));
};

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  console.log('Received:', message);
  
  if (message.serverContent) {
    // 處理輸出轉錄(音訊轉文字)
    if (message.serverContent.outputTranscription) {
      const text = message.serverContent.outputTranscription.text;
      if (text) {
        console.log('[轉錄]', text);
      }
    }
    
    if (message.serverContent.modelTurn) {
      // 處理模型輸出
      message.serverContent.modelTurn.parts.forEach(part => {
        if (part.text) {
          console.log('Text:', part.text);
        }
        if (part.inlineData && part.inlineData.mimeType === "audio/pcm") {
          // 處理音訊資料
          const audioData = part.inlineData.data;
          // audioData 是 base64 編碼的 PCM 音訊
        }
      });
    }
    if (message.serverContent.turnComplete) {
      console.log('Turn complete');
    }
  }
  
  if (message.setupComplete) {
    console.log('Setup complete');
  }
};

// 發送即時音訊輸入
function sendRealtimeAudio(audioBuffer) {
  const base64Audio = btoa(
    String.fromCharCode(...new Uint8Array(audioBuffer))
  );
  
  ws.send(JSON.stringify({
    realtimeInput: {
      mediaChunks: [
        {
          mimeType: "audio/pcm;rate=16000",
          data: base64Audio
        }
      ]
    }
  }));
}

// 發送文字訊息
function sendText(text) {
  ws.send(JSON.stringify({
    clientContent: {
      turns: [
        {
          role: "user",
          parts: [
            { text: text }
          ]
        }
      ],
      turnComplete: true
    }
  }));
}

設定範例

{
  "setup": {
    "model": "gemini-live-2.5-flash-native-audio",
    "generationConfig": {
      "temperature": 0.7,
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "voiceConfig": {
          "prebuiltVoiceConfig": {
            "voiceName": "Zephyr"
          }
        },
        "languageCode": "zh-TW"
      }
    },
    "systemInstruction": {
      "parts": [
        {"text": "你是一個友好的助手,請用自然、對話式的方式回答問題。"}
      ]
    }
  }
}
設定說明:
  • responseModalities: 回應模態,只能選擇以下兩種之一:
    • ["AUDIO"] - 僅音訊輸出
    • ["AUDIO", "TEXT"] - 音訊 + 文字轉錄(推薦,可同時取得音訊和文字)
  • voiceName: 音色名稱,支援 30 種預設音色(見上方音色設定表)
  • languageCode: 語言代碼,支援 24 種語言(見上方語言設定表)
  • googleSearch: 啟用 Google 搜尋功能
  • proactiveAudio: 主動音訊,模型可以選擇不回應無關音訊
  • empatheticMode: 共情對話,根據情緒調整回覆風格
  • outputAudioTranscription: 啟用輸出音訊轉文字(需要在 responseModalities 中包含 "TEXT" 才能看到轉錄文字)
  • automaticActivityDetection: 語音活動偵測設定

訊息類型

客戶端訊息

訊息類型說明
setup會話設定
clientContent客戶端內容(文字/音訊)
realtimeInput即時音訊輸入
toolResponse工具回應

伺服器訊息

訊息類型說明
setupComplete設定完成確認
serverContent伺服器內容(文字/音訊/轉錄)
toolCall工具呼叫
toolCallCancellation工具呼叫取消
usageMetadata使用量統計

Token 統計

系統會分別統計:
  • 總 Token 數
  • 音訊 Token(輸入/輸出)
  • 文字 Token(輸入/輸出)
使用量資訊會在 usageMetadata 訊息中回傳:
{
  "usageMetadata": {
    "totalTokenCount": 100,
    "inputTokenCount": 50,
    "outputTokenCount": 50,
    "inputTokenDetails": {
      "textTokens": 30,
      "audioTokens": 20
    },
    "outputTokenDetails": {
      "textTokens": 25,
      "audioTokens": 25
    }
  }
}

定價說明

模型價格可能會變動,具體定價請以模型廣場顯示的最新價格為準。
Gemini Live API 按 token 計費,分別統計文字和音訊 tokens:
  • 文字 Token:用於輸入的文字內容和輸出的文字轉錄
  • 音訊 Token:用於輸入的音訊和輸出的音訊內容
系統會在 usageMetadata 訊息中回傳詳細的使用量統計,包括文字和音訊的輸入/輸出 token 數量。

技術規格

音訊格式

輸入音訊:
  • 格式:16-bit PCM
  • 取樣率:16kHz
  • 位元組序:小端序
  • 編碼:Base64
輸出音訊:
  • 格式:16-bit PCM
  • 取樣率:24kHz
  • 位元組序:小端序
  • 編碼:Base64

常見問題

在 setup 訊息的 speechConfig.voiceConfig.prebuiltVoiceConfig.voiceName 中指定音色名稱。支援 30 種預設音色,完整列表請查看上方的音色設定章節。預設音色為 Zephyr。
需要同時滿足兩個條件:
  1. 在 setup 訊息中添加 outputAudioTranscription: {} 欄位
  2. generationConfig.responseModalities 中包含 "TEXT"(例如:["AUDIO", "TEXT"]
啟用後,伺服器會在 serverContent.outputTranscription 中回傳音訊的文字轉錄。
在 setup 訊息中添加 tools: { googleSearch: {} } 欄位。啟用後,模型可以在回答問題時搜尋最新的網路資訊。
在 setup 訊息中添加工具定義:
{
  "setup": {
    "tools": {
      "functionDeclarations": [
        {
          "name": "get_weather",
          "description": "Get the weather",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string"
              }
            }
          }
        }
      ]
    }
  }
}
發送新的 realtimeInputclientContent 訊息會中斷當前回應。
是的,Gemini Live API 支援視訊輸入。在 clientContent 中可以包含視訊資料(JPEG 格式,1 FPS)。
系統會在回應過程中或回應完成時發送 usageMetadata 訊息,包含詳細的使用量統計資訊。
在 setup 訊息的 realtimeInputConfig.automaticActivityDetection 中設定:
{
  "realtimeInputConfig": {
    "automaticActivityDetection": {
      "startOfSpeechSensitivity": "START_SENSITIVITY_LOW",
      "endOfSpeechSensitivity": "END_SENSITIVITY_HIGH",
      "prefixPaddingMs": 0,
      "silenceDurationMs": 0
    }
  }
}

參考文件

wscat -c "wss://console.mixroute.io/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=sk-xxxxxxxxxx"
{
  "setupComplete": {}
}