Get started with Live API

رابط برنامه‌نویسی کاربردی زنده (Live API) امکان تعاملات صوتی و تصویری با تأخیر کم و به‌صورت بلادرنگ را با Gemini فراهم می‌کند. این رابط، جریان‌های مداوم صدا، تصویر یا متن را پردازش می‌کند تا پاسخ‌های گفتاری فوری و شبیه به انسان ارائه دهد و یک تجربه مکالمه طبیعی را برای کاربران شما ایجاد کند.

بررسی اجمالی API زنده

API زنده مجموعه‌ای جامع از ویژگی‌ها مانند تشخیص فعالیت صوتی ، استفاده از ابزار و فراخوانی توابع ، مدیریت جلسه (برای مدیریت مکالمات طولانی مدت) و توکن‌های موقت (برای احراز هویت امن سمت کلاینت) را ارائه می‌دهد.

این صفحه با مثال‌ها و نمونه‌های کد اولیه، شما را برای شروع کار آماده می‌کند.

API زنده را در Google AI Studio امتحان کنید

انتخاب رویکرد پیاده‌سازی

هنگام ادغام با Live API، باید یکی از رویکردهای پیاده‌سازی زیر را انتخاب کنید:

  • سرور به سرور : بک‌اند شما با استفاده از WebSockets به Live API متصل می‌شود. معمولاً کلاینت شما داده‌های استریم (صوت، تصویر، متن) را به سرور شما ارسال می‌کند، که سپس آن را به Live API ارسال می‌کند.
  • کلاینت به سرور : کد فرانت‌اند شما مستقیماً با استفاده از WebSockets به Live API متصل می‌شود تا داده‌ها را پخش کند و بک‌اند شما را دور بزند.

ادغام شرکا

برای ساده‌سازی توسعه برنامه‌های صوتی و تصویری بلادرنگ، می‌توانید از یکپارچه‌سازی شخص ثالثی استفاده کنید که از Gemini Live API روی WebRTC یا WebSockets پشتیبانی می‌کند.

شروع کنید

این مثال سمت سرور، صدا را از میکروفون پخش می‌کند و صدای برگشتی را پخش می‌کند. برای مثال‌های کامل سرتاسری شامل یک برنامه کلاینت، به مثال برنامه‌ها مراجعه کنید.

فرمت صدای ورودی باید PCM شانزده بیتی، ۱۶ کیلوهرتز و مونو باشد و صدای دریافتی از نرخ نمونه‌برداری ۲۴ کیلوهرتز استفاده می‌کند.

پایتون

نصب ابزارهای کمکی برای پخش صدا. ممکن است به وابستگی‌های سطح سیستمی اضافی (مثلاً portaudio ) نیاز باشد. برای مراحل نصب دقیق به مستندات PyAudio مراجعه کنید.

pip install pyaudio
import asyncio
from google import genai
import pyaudio

client = genai.Client()

# --- pyaudio config ---
FORMAT = pyaudio.paInt16
CHANNELS = 1
SEND_SAMPLE_RATE = 16000
RECEIVE_SAMPLE_RATE = 24000
CHUNK_SIZE = 1024

pya = pyaudio.PyAudio()

# --- Live API config ---
MODEL = "gemini-2.5-flash-native-audio-preview-09-2025"
CONFIG = {
    "response_modalities": ["AUDIO"],
    "system_instruction": "You are a helpful and friendly AI assistant.",
}

audio_queue_output = asyncio.Queue()
audio_queue_mic = asyncio.Queue(maxsize=5)
audio_stream = None

async def listen_audio():
    """Listens for audio and puts it into the mic audio queue."""
    global audio_stream
    mic_info = pya.get_default_input_device_info()
    audio_stream = await asyncio.to_thread(
        pya.open,
        format=FORMAT,
        channels=CHANNELS,
        rate=SEND_SAMPLE_RATE,
        input=True,
        input_device_index=mic_info["index"],
        frames_per_buffer=CHUNK_SIZE,
    )
    kwargs = {"exception_on_overflow": False} if __debug__ else {}
    while True:
        data = await asyncio.to_thread(audio_stream.read, CHUNK_SIZE, **kwargs)
        await audio_queue_mic.put({"data": data, "mime_type": "audio/pcm"})

async def send_realtime(session):
    """Sends audio from the mic audio queue to the GenAI session."""
    while True:
        msg = await audio_queue_mic.get()
        await session.send_realtime_input(audio=msg)

async def receive_audio(session):
    """Receives responses from GenAI and puts audio data into the speaker audio queue."""
    while True:
        turn = session.receive()
        async for response in turn:
            if (response.server_content and response.server_content.model_turn):
                for part in response.server_content.model_turn.parts:
                    if part.inline_data and isinstance(part.inline_data.data, bytes):
                        audio_queue_output.put_nowait(part.inline_data.data)

        # Empty the queue on interruption to stop playback
        while not audio_queue_output.empty():
            audio_queue_output.get_nowait()

async def play_audio():
    """Plays audio from the speaker audio queue."""
    stream = await asyncio.to_thread(
        pya.open,
        format=FORMAT,
        channels=CHANNELS,
        rate=RECEIVE_SAMPLE_RATE,
        output=True,
    )
    while True:
        bytestream = await audio_queue_output.get()
        await asyncio.to_thread(stream.write, bytestream)

async def run():
    """Main function to run the audio loop."""
    try:
        async with client.aio.live.connect(
            model=MODEL, config=CONFIG
        ) as live_session:
            print("Connected to Gemini. Start speaking!")
            async with asyncio.TaskGroup() as tg:
                tg.create_task(send_realtime(live_session))
                tg.create_task(listen_audio())
                tg.create_task(receive_audio(live_session))
                tg.create_task(play_audio())
    except asyncio.CancelledError:
        pass
    finally:
        if audio_stream:
            audio_stream.close()
        pya.terminate()
        print("\nConnection closed.")

if __name__ == "__main__":
    try:
        asyncio.run(run())
    except KeyboardInterrupt:
        print("Interrupted by user.")

جاوا اسکریپت

نصب ابزارهای کمکی برای پخش صدا. ممکن است به وابستگی‌های سطح سیستمی بیشتری نیاز باشد ( sox برای مک/ویندوز یا ALSA برای لینوکس). برای مراحل نصب دقیق به مستندات بلندگو و میکروفون مراجعه کنید.

npm install mic speaker
import { GoogleGenAI, Modality } from '@google/genai';
import mic from 'mic';
import Speaker from 'speaker';

const ai = new GoogleGenAI({});
// WARNING: Do not use API keys in client-side (browser based) applications
// Consider using Ephemeral Tokens instead
// More information at: https://ai.google.dev/gemini-api/docs/ephemeral-tokens

// --- Live API config ---
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  systemInstruction: "You are a helpful and friendly AI assistant.",
};

async function live() {
  const responseQueue = [];
  const audioQueue = [];
  let speaker;

  async function waitMessage() {
    while (responseQueue.length === 0) {
      await new Promise((resolve) => setImmediate(resolve));
    }
    return responseQueue.shift();
  }

  function createSpeaker() {
    if (speaker) {
      process.stdin.unpipe(speaker);
      speaker.end();
    }
    speaker = new Speaker({
      channels: 1,
      bitDepth: 16,
      sampleRate: 24000,
    });
    speaker.on('error', (err) => console.error('Speaker error:', err));
    process.stdin.pipe(speaker);
  }

  async function messageLoop() {
    // Puts incoming messages in the audio queue.
    while (true) {
      const message = await waitMessage();
      if (message.serverContent && message.serverContent.interrupted) {
        // Empty the queue on interruption to stop playback
        audioQueue.length = 0;
        continue;
      }
      if (message.serverContent && message.serverContent.modelTurn && message.serverContent.modelTurn.parts) {
        for (const part of message.serverContent.modelTurn.parts) {
          if (part.inlineData && part.inlineData.data) {
            audioQueue.push(Buffer.from(part.inlineData.data, 'base64'));
          }
        }
      }
    }
  }

  async function playbackLoop() {
    // Plays audio from the audio queue.
    while (true) {
      if (audioQueue.length === 0) {
        if (speaker) {
          // Destroy speaker if no more audio to avoid warnings from speaker library
          process.stdin.unpipe(speaker);
          speaker.end();
          speaker = null;
        }
        await new Promise((resolve) => setImmediate(resolve));
      } else {
        if (!speaker) createSpeaker();
        const chunk = audioQueue.shift();
        await new Promise((resolve) => {
          speaker.write(chunk, () => resolve());
        });
      }
    }
  }

  // Start loops
  messageLoop();
  playbackLoop();

  // Connect to Gemini Live API
  const session = await ai.live.connect({
    model: model,
    config: config,
    callbacks: {
      onopen: () => console.log('Connected to Gemini Live API'),
      onmessage: (message) => responseQueue.push(message),
      onerror: (e) => console.error('Error:', e.message),
      onclose: (e) => console.log('Closed:', e.reason),
    },
  });

  // Setup Microphone for input
  const micInstance = mic({
    rate: '16000',
    bitwidth: '16',
    channels: '1',
  });
  const micInputStream = micInstance.getAudioStream();

  micInputStream.on('data', (data) => {
    // API expects base64 encoded PCM data
    session.sendRealtimeInput({
      audio: {
        data: data.toString('base64'),
        mimeType: "audio/pcm;rate=16000"
      }
    });
  });

  micInputStream.on('error', (err) => {
    console.error('Microphone error:', err);
  });

  micInstance.start();
  console.log('Microphone started. Speak now...');
}

live().catch(console.error);

مثال‌های کاربردی

به مثال‌های زیر که نحوه استفاده از Live API را برای موارد استفاده سرتاسری نشان می‌دهند، نگاهی بیندازید:

  • اپلیکیشن شروع پخش زنده صدا در AI Studio، با استفاده از کتابخانه‌های جاوا اسکریپت برای اتصال به Live API و پخش صدای دو طرفه از طریق میکروفون و بلندگوهای شما.
  • برای مثال‌های بیشتر و راهنماهای شروع به کار، به بخش ادغام‌های شرکا مراجعه کنید.

قدم بعدی چیست؟

  • برای آشنایی با قابلیت‌ها و پیکربندی‌های کلیدی، راهنمای کامل قابلیت‌های Live API را مطالعه کنید؛ از جمله تشخیص فعالیت صوتی و ویژگی‌های صوتی بومی.
  • برای یادگیری نحوه ادغام Live API با ابزارها و فراخوانی توابع، راهنمای استفاده از ابزار را مطالعه کنید.
  • برای مدیریت مکالمات طولانی مدت، راهنمای مدیریت جلسه را مطالعه کنید.
  • برای احراز هویت امن در برنامه‌های کلاینت به سرور، راهنمای توکن‌های زودگذر را مطالعه کنید.
  • برای اطلاعات بیشتر در مورد API مربوط به WebSockets، به مرجع API مربوط به WebSockets مراجعه کنید.