gemini-live-api-dev

google-gemini/gemini-skills · Agent Skill

使用Gemini Live API建立實時雙向串流應用程式,包括WebSocket音訊、影片和文字、VAD、會話管理和客戶端驗證的臨時令牌。

前往安裝 ↓

總覽

發布者google-gemini組織
儲存庫google-gemini/gemini-skills ↗
技能資料夾gemini-live-api-dev
星4,341
分支467
附帶檔案2
授權Apache-2.0
最近更新2026年10月13日
連結技能原始碼 ↗ · 儲存庫 ↗

Mozgi 檢查

我們在技能檔案中發現的內容。詳細資訊需訂閱。

安全性
中等風險 · 發現 2 個需要注意的地方
相容性
需要額外軟體
相似技能
找到 144 個相似技能
訂閱另含

安裝

技能就是一個含 SKILL.md 的資料夾。選擇你的代理,在專案根目錄的終端機(macOS、Linux 或 Windows 的 Git Bash)執行指令。

把提示貼到 Claude、Codex 或其他助理:它會自行檢查並安裝技能。

Install the “gemini-live-api-dev” skill from mozgi.io (https://mozgi.io/skills/google-gemini-gemini-live-api-dev/) for me.

1. Download the archive: https://mozgi.io/skills/google-gemini-gemini-live-api-dev/download
   If it fails, take the skill folder from the source: https://github.com/google-gemini/gemini-skills/tree/main/skills/gemini-live-api-dev
2. Read SKILL.md and the other files. Check the skill is safe: no hidden commands, no sending data elsewhere, no scripts doing something other than described. If anything looks suspicious, stop and tell me.
3. Put the “gemini-live-api-dev” folder into your agent's skills folder: .claude/skills/ for Claude Code, .agents/skills/ for Codex, .cursor/skills/ for Cursor, .gemini/skills/ for Gemini CLI. Inside the project if we are in one, otherwise in the home folder (~/.claude/skills/ etc.).
4. Make sure <skills folder>/gemini-live-api-dev/SKILL.md exists.
5. Briefly tell me what this skill does and offer to try it on my task.

If you cannot do a step yourself, tell me what to click or type.

技能檔案

2 個檔案 下載 ZIP

安裝前請先檢視 SKILL.md 與相關檔案。點擊檔案即可預覽。

SKILL.md 內容

作者原文 · 唯讀

Gemini Live API Development Skill

Overview

The Live API enables low-latency, real-time voice and video interactions with Gemini over WebSockets. It processes continuous streams of audio, video, or text to deliver immediate, human-like spoken responses and background reasoning.

Key capabilities:

  • Bidirectional audio streaming — real-time mic-to-speaker conversations
  • Background reasoning (extended thinking) — multi-step background reasoning with spoken conversational fillers
  • Live streaming transcription — real-time speech-to-text with interim and finalized streams
  • Video streaming — send camera/screen frames alongside audio
  • Text input/output — send and receive text within a live session
  • Audio transcriptions — get text transcripts of both input and output audio
  • Voice Activity Detection (VAD) — automatic server VAD, client-side Hybrid VAD, and manual Push-to-Talk
  • Asynchronous function calling — non-blocking tool execution while audio continues streaming
  • Full-session client content — inject and update conversation turns mid-stream
  • Session management — context compression, session resumption, GoAway signals
  • Ephemeral tokens — secure client-side authentication

> [!NOTE]

> The Live API connects directly via WebSockets. For WebRTC support or simplified integration, use a partner integration.

Models

Current Models (Use These)

  • gemini-3.8-live — Default option for most low-latency voice agent experiences and real-time dialogue without reasoning delays. Supports interleaved reasoning, asynchronous function calling by default (behavior: NON_BLOCKING), and full-session client content updates.
  • gemini-3.8-live-extended-thinking — High-reasoning audio-to-audio model recommended when higher background reasoning is required during live interactions. Processes background reasoning and async tool calls (behavior: NON_BLOCKING required) while streaming continuous spoken conversational fillers; lifecycle managed via interaction_status (IN_PROGRESS vs IDLE).
  • gemini-3.5-transcribe-live — Real-time streaming speech-to-text with interim hypotheses, finalized transcripts, smart formatting, and Hybrid VAD.
  • gemini-3.5-live-translate-preview — Real-time speech-to-speech streaming translation across 70+ languages.

> [!WARNING]

> **Legacy Models (gemini-3.1-flash-live-preview, gemini-2.5-flash-native-audio-*, gemini-live-2.5-flash-preview, gemini-2.0-flash-live-001)**: Read references/migration.md ↗ for breaking protocol changes (behavior: "NON_BLOCKING", thinking_level, interaction_status, send_client_content).

SDKs

  • Python: google-genai >= 2.3.0 — pip install -U google-genai
  • JavaScript/TypeScript: @google/genai >= 2.3.0 — npm install @google/genai

> [!WARNING]

> Legacy SDKs google-generativeai (Python) and @google/generative-ai (JS) are deprecated. Never use them.

Partner Integrations

To streamline real-time audio/video app development, use a third-party integration supporting the Gemini Live API over WebRTC or WebSockets:

Audio Formats

  • Input: Raw PCM, little-endian, 16-bit, mono. 16kHz native (will resample others). MIME type: audio/pcm;rate=16000
  • Output: Raw PCM, little-endian, 16-bit, mono. 24kHz sample rate.

> [!IMPORTANT]

> Use send_realtime_input / sendRealtimeInput for all real-time streaming user input (audio, video, and text). On Gemini 3.8 models, send_client_content / sendClientContent is supported across the full session lifecycle with explicit roles (user or model) to inject conversation context (turn_complete=true unconditionally interrupts active generation).

> [!WARNING]

> Do not use media in sendRealtimeInput. Use the specific keys: audio for audio data, video for images/video frames, and text for text input.

---

Quick Start

Authentication

Python
from google import genai

client = genai.Client(api_key="YOUR_API_KEY")
JavaScript
import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({ apiKey: 'YOUR_API_KEY' });

Connecting to the Live API

Python
from google.genai import types

config = types.LiveConnectConfig(
    response_modalities=[types.Modality.AUDIO],
    system_instruction=types.Content(
        parts=[types.Part(text="You are a helpful assistant.")]
    )
)

async with client.aio.live.connect(model="gemini-3.8-live", config=config) as session:
    pass  # Session is active
JavaScript
const session = await ai.live.connect({
  model: 'gemini-3.8-live',
  config: {
    responseModalities: ['audio'],
    systemInstruction: { parts: [{ text: 'You are a helpful assistant.' }] }
  },
  callbacks: {
    onopen: () => console.log('Connected'),
    onmessage: (response) => console.log('Message:', response),
    onerror: (error) => console.error('Error:', error),
    onclose: () => console.log('Closed')
  }
});

Sending Text

Python
await session.send_realtime_input(text="Hello, how are you?")
JavaScript
session.sendRealtimeInput({ text: 'Hello, how are you?' });

Sending Audio

Python
await session.send_realtime_input(
    audio=types.Blob(data=chunk, mime_type="audio/pcm;rate=16000")
)
JavaScript
session.sendRealtimeInput({
  audio: { data: chunk.toString('base64'), mimeType: 'audio/pcm;rate=16000' }
});

Sending Video

Python
# frame: raw JPEG-encoded bytes
await session.send_realtime_input(
    video=types.Blob(data=frame, mime_type="image/jpeg")
)
JavaScript
session.sendRealtimeInput({
  video: { data: frame.toString('base64'), mimeType: 'image/jpeg' }
});

Receiving Audio and Text

> [!IMPORTANT]

> A single server event can contain multiple content parts simultaneously (e.g., audio chunks and transcript). Always process all parts in each event to avoid missing content.

Python
async for response in session.receive():
    content = response.server_content
    if content:
        # Audio — process ALL parts in each event
        if content.model_turn:
            for part in content.model_turn.parts:
                if part.inline_data:
                    audio_data = part.inline_data.data
        # Transcription
        if content.input_transcription:
            print(f"User: {content.input_transcription.text}")
        if content.output_transcription:
            print(f"Gemini: {content.output_transcription.text}")
        # Interruption
        if content.interrupted is True:
            pass  # Stop playback, clear audio queue
JavaScript
// Inside the onmessage callback
const content = response.serverContent;
if (content?.modelTurn?.parts) {
  for (const part of content.modelTurn.parts) {
    if (part.inlineData) {
      const audioData = part.inlineData.data; // Base64 encoded
    }
  }
}
if (content?.inputTranscription) console.log('User:', content.inputTranscription.text);
if (content?.outputTranscription) console.log('Gemini:', content.outputTranscription.text);
if (content?.interrupted) { /* Stop playback, clear audio queue */ }

---

Background Reasoning (Extended Thinking)

Use gemini-3.8-live-extended-thinking when your voice agent must evaluate complex data, plan multiple steps, or handle long-running tools. The model speaks natural conversational fillers (e.g. *"Checking flight options now..."*) while executing asynchronous tools in the background.

Key requirements:

  • Thinking config: Set thinking_config=types.ThinkingConfig(thinking_level="low") ("minimal" | "low" | "medium" | "high").
  • Non-blocking tools: All function declarations must set behavior="NON_BLOCKING". Synchronous blocking mode is not supported and returns an error.
  • Lifecycle tracking (interaction_status): Do not rely on turn_complete=True alone to detect turn completion. Monitor message.interaction_status (Python) / message.interactionStatus (JS):
  • "IN_PROGRESS": Server is reasoning, speaking conversational fillers, or waiting for async tool responses.
  • "IDLE": Server has completed all background reasoning and tool calls; session is ready for user input.

See references/migration.md ↗ and the Thinking in Live API Guide ↗ for complete Python and JavaScript implementation examples.

---

Live Translation (Gemini Live Translate)

The Live API supports real-time, low-latency streaming translation of speech (audio) across 70+ languages. For full details on options and capabilities, see the Live Translate Guide ↗.

Model

  • gemini-3.5-live-translate-preview — The recommended translation model for all Live Translate use cases.

Configuration (TranslationConfig)

To enable translation, specify a TranslationConfig object inside your live session setup:

  • Python SDK: Configure the connection using translation_config on LiveConnectConfig:

```python

config = types.LiveConnectConfig(

response_modalities=[types.Modality.AUDIO],

translation_config=types.TranslationConfig(

target_language_code="es", # Target language code (e.g. es, fr, pl)

echo_target_language=True,

),

input_audio_transcription=types.AudioTranscriptionConfig(),

output_audio_transcription=types.AudioTranscriptionConfig(),

)

```

  • Raw WebSockets: Place translationConfig inside generationConfig:

```json

{

"setup": {

"model": "models/gemini-3.5-live-translate-preview",

"generationConfig": {

"responseModalities": ["AUDIO"],

"translationConfig": {

"targetLanguageCode": "es",

"echoTargetLanguage": true

}

}

}

}

```

---

Live Streaming Transcription (Gemini Live Transcribe)

The Live API supports real-time streaming speech-to-text over WebSockets with low-latency interim hypotheses, finalized transcripts, and Hybrid VAD. For full details, see the Live Transcription Guide ↗ and Colab Cookbook ↗.

Model

  • gemini-3.5-transcribe-live

Modes

  • smart: cleans up filler words, resolves inline self-corrections, and structures formatting.
  • verbatim (default): exact word-for-word transcript.

Python

config = types.LiveConnectConfig(
    response_modalities=["TEXT"],
    input_audio_transcription=types.AudioTranscriptionConfig(),
)

async with client.aio.live.connect(model="gemini-3.5-transcribe-live", config=config) as session:
    # Stream audio
    await session.send_realtime_input(audio=types.Blob(data=chunk, mime_type="audio/pcm;rate=16000"))
    # Hybrid VAD: notify turn end on client-detected silence for zero latency
    await session.send_realtime_input(audio_stream_end=True)

JavaScript

const session = await ai.live.connect({
  model: 'gemini-3.5-transcribe-live',
  config: {
    responseModalities: ['text'],
    inputAudioTranscription: { mode: 'smart' }
  },
  callbacks: {
    onmessage: (msg) => {
      if (msg.serverContent?.interimInputTranscription) {
        console.log('Interim:', msg.serverContent.interimInputTranscription.text);
      }
      if (msg.serverContent?.inputTranscription) {
        console.log('Final:', msg.serverContent.inputTranscription.text);
      }
    }
  }
});

session.sendRealtimeInput({ audio: { data: chunkBase64, mimeType: 'audio/pcm;rate=16000' } });
session.sendRealtimeInput({ audioStreamEnd: true }); // Hybrid VAD

Raw WebSockets

{
  "setup": {
    "model": "models/gemini-3.5-transcribe-live",
    "generationConfig": {
      "responseModalities": ["TEXT"],
      "speechConfig": {
        "voiceConfig": {}
      }
    },
    "inputAudioTranscription": {
      "mode": "smart"
    }
  }
}

---

Limitations

  • Response modality — Only TEXT or AUDIO per session, not both. Native audio models output audio (response_modalities=["AUDIO"]); enable output_audio_transcription if you need text transcripts.
  • Audio-only session — 15 min without compression
  • Audio+video session — 2 min without compression
  • Connection lifetime — ~10 min (use session resumption)
  • Context window — 128k input tokens / 64k output tokens
  • Code execution / URL context — Not supported

Upgrading & Migration

For step-by-step migration checklists and protocol deltas when upgrading from gemini-3.1-flash-live-preview, gemini-2.5-flash-native-audio-*, or gemini-2.0-flash-live-001 to Gemini 3.8 Live or Gemini 3.8 Live Extended Thinking, read references/migration.md ↗.

Best Practices

1. Use headphones when testing mic audio to prevent echo/self-interruption

2. Enable context window compression for sessions longer than 15 minutes

3. Implement session resumption to handle connection resets gracefully

4. Use ephemeral tokens for client-side deployments — never expose API keys in browsers

5. Use send_realtime_input for real-time user input (audio, video, text). Use send_client_content with explicit user/model roles to inject context turns mid-stream

6. Send audioStreamEnd / audio_stream_end (Hybrid VAD) when the mic is paused or user finishes speaking

7. Clear audio playback queues on interruption signals (interrupted: true)

8. Process all parts in each server event — events can contain multiple content parts

9. Monitor interaction_status (IN_PROGRESS vs IDLE) when using gemini-3.8-live-extended-thinking rather than relying on turn_complete alone

Documentation Lookup

When MCP is Installed (Preferred)

If the search_docs tool (from the Google MCP server) is available, use it as your only documentation source:

1. Call search_docs with your query

2. Read the returned documentation

3. Trust MCP results as source of truth for API details — they are always up-to-date.

> [!IMPORTANT]

> When MCP tools are present, never fetch URLs manually. MCP provides up-to-date, indexed documentation that is more accurate and token-efficient than URL fetching.

When MCP is NOT Installed (Fallback Only)

If no MCP documentation tools are available, fetch from the official docs index:

llms.txt URL: https://ai.google.dev/gemini-api/docs/llms.txt

This index contains links to all documentation pages in .md.txt format. Use web fetch tools to:

1. Fetch llms.txt to discover available documentation pages

2. Fetch specific pages (e.g., https://ai.google.dev/gemini-api/docs/live-session.md.txt)

Key Documentation Pages

> [!IMPORTANT]

> Those are not all the documentation pages. Use the llms.txt index to discover available documentation pages

Supported Languages

The Live API supports 70 languages including: English, Spanish, French, German, Italian, Portuguese, Chinese, Japanese, Korean, Hindi, Arabic, Russian, and many more. Native audio models automatically detect and switch languages.

常見問題

gemini-live-api-dev 技能有什麼用途?

使用Gemini Live API建立實時雙向串流應用程式,包括WebSocket音訊、影片和文字、VAD、會話管理和客戶端驗證的臨時令牌。

如何安裝 gemini-live-api-dev?

打開本頁的「安裝」區塊並選擇你的代理 — Claude Code、Codex、Cursor 或 Gemini CLI:那裡有把技能資料夾複製到正確位置的現成指令。也可以複製「透過助理」分頁中的提示,讓助理自行檢查並安裝技能。

gemini-live-api-dev 適用哪些 AI 模型?

技能是純 Markdown 指示(Agent Skills 格式),因此 gemini-live-api-dev 適用任何讀取 SKILL.md 的代理:Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot、OpenCode 等。只有在任務符合技能描述時,模型才會載入指示。

gemini-live-api-dev 是免費的嗎?

此技能由 google-gemini 公開發布,採用 Apache-2.0 授權。技能本身免費 — 你只需向 AI 供應商支付實際使用的 token 費用。

安裝技能安全嗎?

技能是代理會遵循的指示,安裝前請閱讀 SKILL.md 及相關檔案。技能資料夾中的腳本只有在代理執行時才會運行 — 留意它的動作,不要授予多餘權限。

技能和 MCP 伺服器或外掛有何不同?

MCP 伺服器或外掛為模型提供新工具 — 會執行並回傳結果的程式碼。技能提供的是知識與流程:如何處理任務、要遵循哪些步驟、好的成果長什麼樣子。它不需要伺服器或 API 金鑰。

相關技能

所有技能 →
gemini-api-dev 使用Python和TypeScript的Gemini API可以實現文字生成、聊天、多模態理解、影象生成、影片生成、串流、函式呼叫、結構化輸出和代理工作流等功能。 Python可以使用requests庫傳送HTTP請求給API,而TypeScript可以使用axios或fetch庫。 Python範例程式碼: import requests response = requests.post('https://api.gemini.ai/generate', json={'prompt': '你好,怎麼樣?'}) print(response.json()) 影象和影片生成可以使用/generate端點,傳入相應的引數。 TypeScript範例程式碼: import axios from 'axios'; const response = await axios.post('https://api.gemini.ai/generate', { prompt: '你好,怎麼樣?' }); console.log(response.data); 類似地,可以實現聊天、多模態理解、串流、函式呼叫、結構化輸出和代理工作流的API呼叫,使用相應的端點和引數。 此外,可以使用Flask或Django等Python庫,和Express.js等TypeScript庫,建立更複雜的應用程式,與Gemini API互動。 例如,建立聊天機器人可以使用/chat端點,使用requests或axios庫傳送請求給API。 Python範例程式碼使用Flask: from flask import Flask, request app = Flask(__name__) @app.route('/chat', methods=['POST']) def chat(): prompt = request.json['prompt'] response = requests.post('https://api.gemini.ai/chat', json={'prompt': prompt}) return response.json() TypeScript範例程式碼使用Express.js: import express from 'express'; const app = express(); app.post('/chat', async (req, res) => { const prompt = req.body.prompt; const response = await axios.post('https://api.gemini.ai/chat', { prompt }); res.json(response.data); }); 因此,可以建立各種應用程式,使用Gemini API的文字生成、聊天、多模態理解、影象生成、影片生成、串流、函式呼叫、結構化輸出和代理工作流等功能。 google-gemini4.3k agent-transcript 在 OpenClaw 代理建立的 PR/issue 工作流程中,將已編輯的代理記錄新增到 GitHub PR 或 issue 正文中。 openclaw389k autoreview 使用各種人工智慧模型自動執行程式碼審查,提供結構化報告和建議。 openclaw389k to-issues 將計劃或PRD分解為獨立可實現的任務。 mattpocock304k improve-codebase-architecture 掃描程式碼庫以找出改進的機會,並將其轉換為優先順序的視覺化報告。 mattpocock304k triage 將問題透過結構化的狀態機三診進行轉移 mattpocock304k