API Live

Live API memungkinkan interaksi suara dan video dua arah dengan latensi rendah bersama Gemini. Gunakan Live API untuk memberikan percakapan suara yang alami dan seperti manusia kepada pengguna akhir, termasuk kemampuan untuk menyela respons model dengan perintah suara.

Dokumen ini membahas dasar-dasar penggunaan Live API, termasuk kemampuannya, contoh untuk memulai, dan contoh kode kasus penggunaan dasar. Jika Anda mencari informasi tentang cara memulai percakapan interaktif menggunakan Live API, lihat Percakapan interaktif dengan Live API. Jika Anda mencari informasi tentang alat yang dapat digunakan Live API, lihat Alat bawaan.

Model yang didukung

Live API didukung untuk digunakan di Google Gen AI SDK dan menggunakan Vertex AI Studio. Beberapa fitur (seperti input dan output teks) hanya tersedia menggunakan Gen AI SDK.

Anda dapat menggunakan Live API dengan model berikut:

Versi model Tingkat ketersediaan
gemini-live-2.5-flash GA Pribadi*
gemini-live-2.5-flash-preview-native-audio Pratinjau publik

* Hubungi perwakilan tim akun Google Anda untuk meminta akses.

Untuk mengetahui informasi selengkapnya, termasuk spesifikasi dan batasan teknis, lihat panduan referensi Live API.

Contoh pemicu

Anda dapat mulai menggunakan Live API dengan salah satu contoh kami:

Notebook Jupyter:

Aplikasi dan panduan demo:

Kemampuan Live API

  • Pemahaman multimodal real-time: Lakukan percakapan dengan Gemini tentang apa yang dilihatnya di feed video atau melalui berbagi layar, menggunakan dukungan bawaan untuk streaming audio dan video.
  • Penggunaan alat bawaan: Integrasikan alat seperti panggilan fungsi dan Perujukan dengan Google Penelusuran ke dalam percakapan Anda dengan lancar untuk interaksi yang lebih praktis dan dinamis.
  • Interaksi latensi rendah: Lakukan interaksi latensi rendah yang mirip dengan interaksi manusia dengan Gemini.
  • Dukungan multibahasa: Berbicara dalam 24 bahasa yang didukung.
  • (Khusus versi GA) Dukungan untuk Throughput yang Disediakan: Gunakan langganan biaya tetap dan jangka waktu tetap yang tersedia dalam beberapa jangka waktu yang mencadangkan throughput untuk model AI generatif yang didukung di Vertex AI, termasuk Live API.

Gemini 2.5 Flash dengan Live API juga menyertakan audio asli sebagai penawaran pratinjau publik. Audio native memperkenalkan:

  • Dialog Afektif: API Live memahami dan merespons intonasi suara pengguna. Kata-kata yang sama yang diucapkan dengan cara yang berbeda dapat menghasilkan percakapan yang sangat berbeda dan lebih bernuansa.
  • Audio Proaktif dan kepekaan terhadap konteks: Live API secara cerdas mengabaikan percakapan di sekitar dan audio lain yang tidak relevan, memahami kapan harus mendengarkan dan kapan harus tetap diam.

Untuk mengetahui informasi selengkapnya tentang audio native, lihat Alat bawaan.

Format audio yang didukung

Live API mendukung format audio berikut:

  • Input audio: Audio PCM 16-bit mentah pada 16 kHz, little-endian
  • Output audio: Audio PCM 16-bit mentah pada 24 kHz, little-endian

Mendapatkan respons teks dari input audio

Anda dapat mengirim audio dan menerima respons teks dengan mengonversi audio ke format PCM 16-bit, 16 kHz, mono. Contoh berikut membaca file WAV dan mengirimkannya dalam format yang benar:

Gen AI SDK untuk Python

# Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav
# Install helpers for converting files: pip install librosa soundfile

import asyncio
import io
from pathlib import Path
from google import genai
from google.genai import types
import soundfile as sf
import librosa

client = genai.Client(
    vertexai=True,
    project=GOOGLE_CLOUD_PROJECT,
    location=GOOGLE_CLOUD_LOCATION,
)
model = "gemini-live-2.5-flash"
config = {"response_modalities": ["TEXT"]}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:

        buffer = io.BytesIO()
        y, sr = librosa.load("sample.wav", sr=16000)
        sf.write(buffer, y, sr, format="RAW", subtype="PCM_16")
        buffer.seek(0)
        audio_bytes = buffer.read()

        # If already in correct format, you can use this:
        # audio_bytes = Path("sample.pcm").read_bytes()

        await session.send_realtime_input(
            audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
        )

        async for response in session.receive():
            if response.text is not None:
                print(response.text)

if __name__ == "__main__":
    asyncio.run(main())
      

Mendapatkan respons suara dari input teks

Gunakan contoh ini untuk mengirim input teks dan menerima respons ucapan yang disintesis:

Gen AI SDK untuk Python

import asyncio
import numpy as np
from IPython.display import Audio, Markdown, display
from google import genai
from google.genai.types import (
  Content,
  LiveConnectConfig,
  HttpOptions,
  Modality,
  Part,
  SpeechConfig,
  VoiceConfig,
  PrebuiltVoiceConfig,
)

client = genai.Client(
  vertexai=True,
  project=GOOGLE_CLOUD_PROJECT,
  location=GOOGLE_CLOUD_LOCATION,
)

voice_name = "Aoede"

config = LiveConnectConfig(
  response_modalities=["AUDIO"],
  speech_config=SpeechConfig(
      voice_config=VoiceConfig(
          prebuilt_voice_config=PrebuiltVoiceConfig(
              voice_name=voice_name,
          )
      ),
  ),
)

async with client.aio.live.connect(
  model="gemini-live-2.5-flash",
  config=config,
) as session:
  text_input = "Hello? Gemini are you there?"
  display(Markdown(f"**Input:** {text_input}"))

  await session.send_client_content(
      turns=Content(role="user", parts=[Part(text=text_input)]))

  audio_data = []
  async for message in session.receive():
      if (
          message.server_content.model_turn
          and message.server_content.model_turn.parts
      ):
          for part in message.server_content.model_turn.parts:
              if part.inline_data:
                  audio_data.append(
                      np.frombuffer(part.inline_data.data, dtype=np.int16)
                  )

  if audio_data:
      display(Audio(np.concatenate(audio_data), rate=24000, autoplay=True))
    

Untuk contoh pengiriman teks lainnya, lihat panduan Memulai kami.

Mentranskripsikan audio

Live API dapat mentranskripsikan audio input dan output. Gunakan contoh berikut untuk mengaktifkan transkripsi:

Gen AI SDK untuk Python

import asyncio
from google import genai
from google.genai import types

client = genai.Client(
    vertexai=True,
    project=GOOGLE_CLOUD_PROJECT,
    location=GOOGLE_CLOUD_LOCATION,
)
model = "gemini-live-2.5-flash"

config = {
    "response_modalities": ["AUDIO"],
    "input_audio_transcription": {},
    "output_audio_transcription": {}
}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        message = "Hello? Gemini are you there?"

        await session.send_client_content(
            turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
        )

        async for response in session.receive():
            if response.server_content.model_turn:
                print("Model turn:", response.server_content.model_turn)
            if response.server_content.input_transcription:
                print("Input transcript:", response.server_content.input_transcription.text)
            if response.server_content.output_transcription:
                print("Output transcript:", response.server_content.output_transcription.text)

if __name__ == "__main__":
    asyncio.run(main())

      

WebSockets

# Set model generation_config
CONFIG = {
    'response_modalities': ['AUDIO'],
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {bearer_token[0]}",
}

# Connect to the server
async with connect(SERVICE_URL, additional_headers=headers) as ws:
    # Setup the session
    await ws.send(
        json.dumps(
            {
                "setup": {
                    "model": "gemini-2.0-flash-live-preview-04-09",
                    "generation_config": CONFIG,
                    'input_audio_transcription': {},
                    'output_audio_transcription': {}
                }
            }
        )
    )

    # Receive setup response
    raw_response = await ws.recv(decode=False)
    setup_response = json.loads(raw_response.decode("ascii"))

    # Send text message
    text_input = "Hello? Gemini are you there?"
    display(Markdown(f"**Input:** {text_input}"))

    msg = {
        "client_content": {
            "turns": [{"role": "user", "parts": [{"text": text_input}]}],
            "turn_complete": True,
        }
    }

    await ws.send(json.dumps(msg))

    responses = []
    input_transcriptions = []
    output_transcriptions = []

    # Receive chucks of server response
    async for raw_response in ws:
        response = json.loads(raw_response.decode())
        server_content = response.pop("serverContent", None)
        if server_content is None:
            break

        if (input_transcription := server_content.get("inputTranscription")) is not None:
            if (text := input_transcription.get("text")) is not None:
                input_transcriptions.append(text)
        if (output_transcription := server_content.get("outputTranscription")) is not None:
            if (text := output_transcription.get("text")) is not None:
                output_transcriptions.append(text)

        model_turn = server_content.pop("modelTurn", None)
        if model_turn is not None:
            parts = model_turn.pop("parts", None)
            if parts is not None:
                for part in parts:
                    pcm_data = base64.b64decode(part["inlineData"]["data"])
                    responses.append(np.frombuffer(pcm_data, dtype=np.int16))

        # End of turn
        turn_complete = server_content.pop("turnComplete", None)
        if turn_complete:
            break

    if input_transcriptions:
        display(Markdown(f"**Input transcription >** {''.join(input_transcriptions)}"))

    if responses:
        # Play the returned audio message
        display(Audio(np.concatenate(responses), rate=24000, autoplay=True))

    if output_transcriptions:
        display(Markdown(f"**Output transcription >** {''.join(output_transcriptions)}"))
      

Informasi selengkapnya

Untuk mengetahui informasi selengkapnya tentang penggunaan Live API, lihat: