Live API capabilities guide

این یک راهنمای جامع است که قابلیت‌ها و پیکربندی‌های موجود با Live API را پوشش می‌دهد. برای مرور کلی و نمونه کد برای موارد استفاده رایج، به صفحه شروع به کار با Live API مراجعه کنید.

قبل از اینکه شروع کنی

  • با مفاهیم اصلی آشنا شوید: اگر هنوز این کار را نکرده‌اید، ابتدا صفحه شروع به کار با Live API را مطالعه کنید. این صفحه شما را با اصول اساسی Live API، نحوه عملکرد آن و رویکردهای مختلف پیاده‌سازی آشنا می‌کند.
  • API زنده را در AI Studio امتحان کنید: ممکن است قبل از شروع ساخت، امتحان کردن API زنده در Google AI Studio مفید باشد. برای استفاده از API زنده در Google AI Studio، گزینه Stream را انتخاب کنید.

ایجاد ارتباط

مثال زیر نحوه ایجاد اتصال با کلید API را نشان می‌دهد:

پایتون

import asyncio
from google import genai

client = genai.Client()

model = "gemini-2.5-flash-native-audio-preview-09-2025"
config = {"response_modalities": ["AUDIO"]}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        print("Session started")
        # Send content...

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

جاوا اسکریپت

import { GoogleGenAI, Modality } from '@google/genai';

const ai = new GoogleGenAI({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = { responseModalities: [Modality.AUDIO] };

async function main() {

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        console.debug(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  console.debug("Session started");
  // Send content...

  session.close();
}

main();

روش‌های تعامل

بخش‌های زیر مثال‌ها و زمینه‌های پشتیبانی برای روش‌های مختلف ورودی و خروجی موجود در Live API را ارائه می‌دهند.

ارسال و دریافت صدا

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

فرمت‌های صوتی

داده‌های صوتی در Live API همیشه خام، little-endian و PCM 16 بیتی هستند. خروجی صدا همیشه از نرخ نمونه‌برداری 24 کیلوهرتز استفاده می‌کند. صدای ورودی به طور طبیعی 16 کیلوهرتز است، اما Live API در صورت نیاز نمونه‌برداری مجدد می‌کند تا هر نرخ نمونه‌برداری بتواند ارسال شود. برای انتقال نرخ نمونه‌برداری صدای ورودی، نوع MIME هر Blob حاوی صدا را روی مقداری مانند audio/pcm;rate=16000 تنظیم کنید.

ارسال متن

نحوه ارسال متن به این صورت است:

پایتون

message = "Hello, how are you?"
await session.send_client_content(turns=message, turn_complete=True)

جاوا اسکریپت

const message = 'Hello, how are you?';
session.sendClientContent({ turns: message, turnComplete: true });

به‌روزرسانی‌های تدریجی محتوا

از به‌روزرسانی‌های افزایشی برای ارسال ورودی متن، ایجاد زمینه جلسه یا بازیابی زمینه جلسه استفاده کنید. برای زمینه‌های کوتاه، می‌توانید تعاملات نوبت به نوبت را برای نمایش توالی دقیق رویدادها ارسال کنید:

پایتون

turns = [
    {"role": "user", "parts": [{"text": "What is the capital of France?"}]},
    {"role": "model", "parts": [{"text": "Paris"}]},
]

await session.send_client_content(turns=turns, turn_complete=False)

turns = [{"role": "user", "parts": [{"text": "What is the capital of Germany?"}]}]

await session.send_client_content(turns=turns, turn_complete=True)

جاوا اسکریپت

let inputTurns = [
  { "role": "user", "parts": [{ "text": "What is the capital of France?" }] },
  { "role": "model", "parts": [{ "text": "Paris" }] },
]

session.sendClientContent({ turns: inputTurns, turnComplete: false })

inputTurns = [{ "role": "user", "parts": [{ "text": "What is the capital of Germany?" }] }]

session.sendClientContent({ turns: inputTurns, turnComplete: true })

برای متن‌های طولانی‌تر، توصیه می‌شود یک خلاصه پیام واحد ارائه دهید تا پنجره متن برای تعاملات بعدی آزاد شود. برای روش دیگری برای بارگیری متن جلسه، به «از سرگیری جلسه» مراجعه کنید.

رونوشت‌های صوتی

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

برای فعال کردن رونویسی خروجی صدای مدل، output_audio_transcription در پیکربندی تنظیمات ارسال کنید. زبان رونویسی از پاسخ مدل استنباط می‌شود.

پایتون

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

client = genai.Client()
model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = {
    "response_modalities": ["AUDIO"],
    "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.output_transcription:
                print("Transcript:", response.server_content.output_transcription.text)

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

جاوا اسکریپت

import { GoogleGenAI, Modality } from '@google/genai';

const ai = new GoogleGenAI({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';

const config = {
  responseModalities: [Modality.AUDIO],
  outputAudioTranscription: {}
};

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

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  const inputTurns = 'Hello how are you?';
  session.sendClientContent({ turns: inputTurns });

  const turns = await handleTurn();

  for (const turn of turns) {
    if (turn.serverContent && turn.serverContent.outputTranscription) {
      console.debug('Received output transcription: %s\n', turn.serverContent.outputTranscription.text);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

main();

برای فعال کردن رونویسی ورودی صدای مدل، input_audio_transcription در تنظیمات پیکربندی ارسال کنید.

پایتون

import asyncio
from pathlib import Path
from google import genai
from google.genai import types

client = genai.Client()
model = "gemini-2.5-flash-native-audio-preview-09-2025"

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

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        audio_data = Path("16000.pcm").read_bytes()

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

        async for msg in session.receive():
            if msg.server_content.input_transcription:
                print('Transcript:', msg.server_content.input_transcription.text)

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

جاوا اسکریپت

import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile';
const { WaveFile } = pkg;

const ai = new GoogleGenAI({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';

const config = {
  responseModalities: [Modality.AUDIO],
  inputAudioTranscription: {}
};

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

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  // Send Audio Chunk
  const fileBuffer = fs.readFileSync("16000.wav");

  // Ensure audio conforms to API requirements (16-bit PCM, 16kHz, mono)
  const wav = new WaveFile();
  wav.fromBuffer(fileBuffer);
  wav.toSampleRate(16000);
  wav.toBitDepth("16");
  const base64Audio = wav.toBase64();

  // If already in correct format, you can use this:
  // const fileBuffer = fs.readFileSync("sample.pcm");
  // const base64Audio = Buffer.from(fileBuffer).toString('base64');

  session.sendRealtimeInput(
    {
      audio: {
        data: base64Audio,
        mimeType: "audio/pcm;rate=16000"
      }
    }
  );

  const turns = await handleTurn();
  for (const turn of turns) {
    if (turn.text) {
      console.debug('Received text: %s\n', turn.text);
    }
    else if (turn.data) {
      console.debug('Received inline data: %s\n', turn.data);
    }
    else if (turn.serverContent && turn.serverContent.inputTranscription) {
      console.debug('Received input transcription: %s\n', turn.serverContent.inputTranscription.text);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

main();

پخش جریانی صدا و تصویر

تغییر صدا و زبان

مدل‌های خروجی صدای بومی از هر یک از صداهای موجود برای مدل‌های تبدیل متن به گفتار (TTS) ما پشتیبانی می‌کنند. می‌توانید به همه صداها در AI Studio گوش دهید.

برای مشخص کردن یک صدا، نام صدا را در شیء speechConfig به عنوان بخشی از پیکربندی جلسه تنظیم کنید:

پایتون

config = {
    "response_modalities": ["AUDIO"],
    "speech_config": {
        "voice_config": {"prebuilt_voice_config": {"voice_name": "Kore"}}
    },
}

جاوا اسکریپت

const config = {
  responseModalities: [Modality.AUDIO],
  speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } }
};

رابط برنامه‌نویسی زنده (Live API) از چندین زبان پشتیبانی می‌کند. مدل‌های خروجی صدای بومی به‌طور خودکار زبان مناسب را انتخاب می‌کنند و از تنظیم صریح کد زبان پشتیبانی نمی‌کنند.

قابلیت‌های صوتی بومی

جدیدترین مدل‌های ما دارای خروجی صدای بومی هستند که گفتار طبیعی و واقع‌گرایانه و عملکرد چندزبانه بهبود یافته را فراهم می‌کند. صدای بومی همچنین ویژگی‌های پیشرفته‌ای مانند گفتگوی عاطفی (آگاه از احساسات) ، صدای پیشگیرانه (که در آن مدل هوشمندانه تصمیم می‌گیرد چه زمانی به ورودی پاسخ دهد) و «تفکر» را امکان‌پذیر می‌کند.

گفتگوی عاطفی

این ویژگی به Gemini اجازه می‌دهد تا سبک پاسخ خود را با بیان و لحن ورودی تطبیق دهد.

برای استفاده از affective dialog، نسخه api را روی v1alpha تنظیم کنید و enable_affective_dialog در پیام تنظیمات روی true تنظیم کنید:

پایتون

client = genai.Client(http_options={"api_version": "v1alpha"})

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    enable_affective_dialog=True
)

جاوا اسکریپت

const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });

const config = {
  responseModalities: [Modality.AUDIO],
  enableAffectiveDialog: true
};

صدای پیشگیرانه

وقتی این ویژگی فعال باشد، Gemini می‌تواند به صورت پیشگیرانه تصمیم بگیرد که در صورت نامرتبط بودن محتوا، پاسخی ندهد.

برای استفاده از آن، نسخه api را روی v1alpha تنظیم کنید و فیلد proactivity را در پیام راه‌اندازی پیکربندی کنید و proactive_audio روی true تنظیم کنید:

پایتون

client = genai.Client(http_options={"api_version": "v1alpha"})

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    proactivity={'proactive_audio': True}
)

جاوا اسکریپت

const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });

const config = {
  responseModalities: [Modality.AUDIO],
  proactivity: { proactiveAudio: true }
}

تفکر

جدیدترین مدل خروجی صدای بومی gemini-2.5-flash-native-audio-preview-09-2025 از قابلیت‌های تفکر پشتیبانی می‌کند و تفکر پویا به طور پیش‌فرض فعال است.

پارامتر thinkingBudget مدل را در مورد تعداد توکن‌های تفکر که هنگام تولید پاسخ استفاده می‌شوند، راهنمایی می‌کند. می‌توانید با تنظیم thinkingBudget روی 0 ، thinking را غیرفعال کنید. برای اطلاعات بیشتر در مورد جزئیات پیکربندی thinkingBudget مدل، به مستندات thinking Budgets مراجعه کنید.

پایتون

model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"]
    thinking_config=types.ThinkingConfig(
        thinking_budget=1024,
    )
)

async with client.aio.live.connect(model=model, config=config) as session:
    # Send audio input and receive audio

جاوا اسکریپت

const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  thinkingConfig: {
    thinkingBudget: 1024,
  },
};

async function main() {

  const session = await ai.live.connect({
    model: model,
    config: config,
    callbacks: ...,
  });

  // Send audio input and receive audio

  session.close();
}

main();

علاوه بر این، می‌توانید با تنظیم includeThoughts روی true در پیکربندی خود، خلاصه‌های فکر را فعال کنید. برای اطلاعات بیشتر به خلاصه‌های فکر مراجعه کنید:

پایتون

model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"]
    thinking_config=types.ThinkingConfig(
        thinking_budget=1024,
        include_thoughts=True
    )
)

جاوا اسکریپت

const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  thinkingConfig: {
    thinkingBudget: 1024,
    includeThoughts: true,
  },
};

تشخیص فعالیت صوتی (VAD)

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

وقتی VAD یک وقفه را تشخیص می‌دهد، تولید مداوم لغو و کنار گذاشته می‌شود. فقط اطلاعاتی که قبلاً به کلاینت ارسال شده است در تاریخچه جلسه نگه داشته می‌شود. سپس سرور یک پیام BidiGenerateContentServerContent برای گزارش وقفه ارسال می‌کند.

سپس سرور Gemini هرگونه فراخوانی تابع در حال انتظار را حذف می‌کند و یک پیام BidiGenerateContentServerContent با شناسه‌های فراخوانی‌های لغو شده ارسال می‌کند.

پایتون

async for response in session.receive():
    if response.server_content.interrupted is True:
        # The generation was interrupted

        # If realtime playback is implemented in your application,
        # you should stop playing audio and clear queued playback here.

جاوا اسکریپت

const turns = await handleTurn();

for (const turn of turns) {
  if (turn.serverContent && turn.serverContent.interrupted) {
    // The generation was interrupted

    // If realtime playback is implemented in your application,
    // you should stop playing audio and clear queued playback here.
  }
}

VAD خودکار

به طور پیش‌فرض، مدل به طور خودکار VAD را روی یک جریان ورودی صوتی پیوسته انجام می‌دهد. VAD را می‌توان با فیلد realtimeInputConfig.automaticActivityDetection از setup configuration پیکربندی کرد.

وقتی جریان صدا بیش از یک ثانیه متوقف می‌شود (مثلاً به دلیل خاموش کردن میکروفون توسط کاربر)، باید یک رویداد audioStreamEnd برای پاک کردن هرگونه صدای ذخیره شده ارسال شود. کلاینت می‌تواند ارسال داده‌های صوتی را در هر زمانی از سر بگیرد.

پایتون

# example audio file to try:
# URL = "https://storage.googleapis.com/generativeai-downloads/data/hello_are_you_there.pcm"
# !wget -q $URL -O sample.pcm
import asyncio
from pathlib import Path
from google import genai
from google.genai import types

client = genai.Client()
model = "gemini-live-2.5-flash-preview"

config = {"response_modalities": ["TEXT"]}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        audio_bytes = Path("sample.pcm").read_bytes()

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

        # if stream gets paused, send:
        # await session.send_realtime_input(audio_stream_end=True)

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

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

جاوا اسکریپت

// example audio file to try:
// URL = "https://storage.googleapis.com/generativeai-downloads/data/hello_are_you_there.pcm"
// !wget -q $URL -O sample.pcm
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";

const ai = new GoogleGenAI({});
const model = 'gemini-live-2.5-flash-preview';
const config = { responseModalities: [Modality.TEXT] };

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

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  // Send Audio Chunk
  const fileBuffer = fs.readFileSync("sample.pcm");
  const base64Audio = Buffer.from(fileBuffer).toString('base64');

  session.sendRealtimeInput(
    {
      audio: {
        data: base64Audio,
        mimeType: "audio/pcm;rate=16000"
      }
    }

  );

  // if stream gets paused, send:
  // session.sendRealtimeInput({ audioStreamEnd: true })

  const turns = await handleTurn();
  for (const turn of turns) {
    if (turn.text) {
      console.debug('Received text: %s\n', turn.text);
    }
    else if (turn.data) {
      console.debug('Received inline data: %s\n', turn.data);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

main();

با send_realtime_input ، API به صورت خودکار بر اساس VAD به صدا پاسخ می‌دهد. در حالی که send_client_content پیام‌ها را به ترتیب به متن مدل اضافه می‌کند، send_realtime_input برای پاسخگویی بهینه شده است، البته با وجود اینکه ترتیب قطعی را از دست می‌دهد.

پیکربندی خودکار VAD

برای کنترل بیشتر بر فعالیت VAD، می‌توانید پارامترهای زیر را پیکربندی کنید. برای اطلاعات بیشتر به مرجع API مراجعه کنید.

پایتون

from google.genai import types

config = {
    "response_modalities": ["TEXT"],
    "realtime_input_config": {
        "automatic_activity_detection": {
            "disabled": False, # default
            "start_of_speech_sensitivity": types.StartSensitivity.START_SENSITIVITY_LOW,
            "end_of_speech_sensitivity": types.EndSensitivity.END_SENSITIVITY_LOW,
            "prefix_padding_ms": 20,
            "silence_duration_ms": 100,
        }
    }
}

جاوا اسکریپت

import { GoogleGenAI, Modality, StartSensitivity, EndSensitivity } from '@google/genai';

const config = {
  responseModalities: [Modality.TEXT],
  realtimeInputConfig: {
    automaticActivityDetection: {
      disabled: false, // default
      startOfSpeechSensitivity: StartSensitivity.START_SENSITIVITY_LOW,
      endOfSpeechSensitivity: EndSensitivity.END_SENSITIVITY_LOW,
      prefixPaddingMs: 20,
      silenceDurationMs: 100,
    }
  }
};

غیرفعال کردن VAD خودکار

از طرف دیگر، می‌توان VAD خودکار را با تنظیم realtimeInputConfig.automaticActivityDetection.disabled روی true در پیام راه‌اندازی غیرفعال کرد. در این پیکربندی، کلاینت مسئول تشخیص گفتار کاربر و ارسال پیام‌های activityStart و activityEnd در زمان‌های مناسب است. در این پیکربندی، audioStreamEnd ارسال نمی‌شود. در عوض، هرگونه وقفه در جریان با یک پیام activityEnd مشخص می‌شود.

پایتون

config = {
    "response_modalities": ["TEXT"],
    "realtime_input_config": {"automatic_activity_detection": {"disabled": True}},
}

async with client.aio.live.connect(model=model, config=config) as session:
    # ...
    await session.send_realtime_input(activity_start=types.ActivityStart())
    await session.send_realtime_input(
        audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
    )
    await session.send_realtime_input(activity_end=types.ActivityEnd())
    # ...

جاوا اسکریپت

const config = {
  responseModalities: [Modality.TEXT],
  realtimeInputConfig: {
    automaticActivityDetection: {
      disabled: true,
    }
  }
};

session.sendRealtimeInput({ activityStart: {} })

session.sendRealtimeInput(
  {
    audio: {
      data: base64Audio,
      mimeType: "audio/pcm;rate=16000"
    }
  }

);

session.sendRealtimeInput({ activityEnd: {} })

تعداد توکن‌ها

می‌توانید تعداد کل توکن‌های مصرف‌شده را در فیلد usageMetadata پیام سرور برگشتی پیدا کنید.

پایتون

async for message in session.receive():
    # The server will periodically send messages that include UsageMetadata.
    if message.usage_metadata:
        usage = message.usage_metadata
        print(
            f"Used {usage.total_token_count} tokens in total. Response token breakdown:"
        )
        for detail in usage.response_tokens_details:
            match detail:
                case types.ModalityTokenCount(modality=modality, token_count=count):
                    print(f"{modality}: {count}")

جاوا اسکریپت

const turns = await handleTurn();

for (const turn of turns) {
  if (turn.usageMetadata) {
    console.debug('Used %s tokens in total. Response token breakdown:\n', turn.usageMetadata.totalTokenCount);

    for (const detail of turn.usageMetadata.responseTokensDetails) {
      console.debug('%s\n', detail);
    }
  }
}

وضوح رسانه

شما می‌توانید با تنظیم فیلد mediaResolution به عنوان بخشی از پیکربندی جلسه، وضوح رسانه را برای رسانه ورودی مشخص کنید:

پایتون

from google.genai import types

config = {
    "response_modalities": ["AUDIO"],
    "media_resolution": types.MediaResolution.MEDIA_RESOLUTION_LOW,
}

جاوا اسکریپت

import { GoogleGenAI, Modality, MediaResolution } from '@google/genai';

const config = {
    responseModalities: [Modality.TEXT],
    mediaResolution: MediaResolution.MEDIA_RESOLUTION_LOW,
};

محدودیت‌ها

هنگام برنامه‌ریزی پروژه خود، محدودیت‌های زیر را در مورد Live API در نظر بگیرید.

روش‌های پاسخ‌دهی

شما فقط می‌توانید یک روش پاسخ ( TEXT یا AUDIO ) را در هر جلسه در پیکربندی جلسه تنظیم کنید. تنظیم هر دو منجر به یک پیام خطای پیکربندی می‌شود. این بدان معناست که می‌توانید مدل را طوری پیکربندی کنید که با متن یا صدا پاسخ دهد، اما نمی‌تواند هر دو را در یک جلسه داشته باشد.

احراز هویت کلاینت

API زنده (Live API) به طور پیش‌فرض فقط احراز هویت سرور به سرور را ارائه می‌دهد. اگر برنامه API زنده خود را با استفاده از رویکرد کلاینت به سرور پیاده‌سازی می‌کنید، برای کاهش خطرات امنیتی باید از توکن‌های موقت (ephemeral tokens) استفاده کنید.

مدت زمان جلسه

جلسات فقط صوتی به ۱۵ دقیقه و جلسات صوتی به همراه تصویری به ۲ دقیقه محدود می‌شوند. با این حال، می‌توانید تکنیک‌های مختلف مدیریت جلسه را برای افزایش نامحدود مدت زمان جلسه پیکربندی کنید.

پنجره زمینه

یک جلسه محدودیت پنجره زمینه‌ای به میزان زیر دارد:

  • ۱۲۸ هزار توکن برای مدل‌های خروجی صدای بومی
  • ۳۲ هزار توکن برای سایر مدل‌های Live API

زبان‌های پشتیبانی‌شده

API زنده از زبان‌های زیر پشتیبانی می‌کند.

زبان کد BCP-47 زبان کد BCP-47
آلمانی (آلمان) de-DE انگلیسی (استرالیا)* en-AU
انگلیسی (بریتانیا)* en-GB انگلیسی (هند) en-IN
انگلیسی (آمریکایی) en-US اسپانیایی (آمریکایی) es-US
فرانسوی (فرانسه) fr-FR هندی (هند) hi-IN
پرتغالی (برزیل) pt-BR عربی (عمومی) ar-XA
اسپانیایی (اسپانیا)* es-ES فرانسوی (کانادا)* fr-CA
اندونزیایی (اندونزیایی) id-ID ایتالیایی (ایتالیا) it-IT
ژاپنی (ژاپن) ja-JP ترکی (ترکیه) tr-TR
ویتنامی (ویتنام) vi-VN بنگالی (هند) bn-IN
گجراتی (هند)* gu-IN زبان کانارا (هند)* kn-IN
مراتی (هند) mr-IN مالایالامی (هند)* ml-IN
تامیل (هند) ta-IN تلوگو (هند) te-IN
هلندی (هلند) nl-NL کره‌ای (کره جنوبی) ko-KR
چینی ماندارین (چین)* cmn-CN لهستانی (لهستان) pl-PL
روسی (روسیه) ru-RU تایلندی (تایلند) th-TH

زبان‌هایی که با ستاره (*) مشخص شده‌اند، برای صدای بومی در دسترس نیستند .

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