تتيح Live API التفاعلات الصوتية والمرئية في الوقت الفعلي وبزمن استجابة منخفض مع Gemini. تعالج هذه الواجهة تدفقات مستمرة من الصوت أو الفيديو أو النص لتقديم ردود فورية منطوقة تشبه الردود البشرية، ما يتيح للمستخدمين تجربة محادثة طبيعية.

تقدّم Live API مجموعة شاملة من الميزات، مثل رصد النشاط الصوتي واستخدام الأدوات واستدعاء الدوال وإدارة الجلسات (لإدارة المحادثات الطويلة) والرموز المميزة المؤقتة (للمصادقة الآمنة من جهة العميل).
تساعدك هذه الصفحة في البدء باستخدام أمثلة ونماذج أساسية من الرموز البرمجية.
تجربة Live API في Google AI Studio
اختيار طريقة التنفيذ
عند الدمج مع Live API، عليك اختيار أحد أساليب التنفيذ التالية:
- الخادم إلى الخادم: يتصل الخلفية بواجهة Live API باستخدام WebSockets. عادةً، يرسل العميل بيانات البث (الصوت والفيديو والنص) إلى الخادم، الذي يعيد توجيهها إلى Live API.
- من العميل إلى الخادم: يتصل رمز الواجهة الأمامية مباشرةً بواجهة برمجة التطبيقات Live API باستخدام WebSockets لبث البيانات، ما يؤدي إلى تجاوز الواجهة الخلفية.
عمليات الدمج مع الشركاء
لتسهيل عملية تطوير تطبيقات الصوت والفيديو في الوقت الفعلي، يمكنك استخدام عملية تكامل تابعة لجهة خارجية تتوافق مع واجهة برمجة التطبيقات Gemini Live عبر WebRTC أو WebSockets.
البدء
في مثال الجهة الخلفية هذا، يتم بث الصوت من الميكروفون وتشغيل الصوت الذي تم إرجاعه. للاطّلاع على أمثلة كاملة من البداية إلى النهاية تتضمّن تطبيق عميل، راجِع أمثلة على التطبيقات.
يجب أن يكون تنسيق الصوت المُدخَل بتنسيق PCM بمعدل 16 بت و16 كيلوهرتز وبقناة صوتية واحدة، وأن يستخدم الصوت المستلَم معدل بيانات في الملف الصوتي يبلغ 24 كيلوهرتز.
Python
تثبيت تطبيقات مساعدة لبث الصوت قد تكون هناك تبعيات إضافية على مستوى النظام (مثل portaudio). يمكنك الرجوع إلى مستندات PyAudio
للاطّلاع على خطوات التثبيت التفصيلية.
pip install pyaudioimport 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.")
JavaScript
تثبيت تطبيقات مساعدة لبث الصوت قد تكون هناك متطلبات إضافية على مستوى النظام (sox لنظام التشغيل Mac أو Windows أو ALSA لنظام التشغيل Linux). يمكنك الرجوع إلى مستندات مكبر الصوت والميكروفون للاطّلاع على خطوات التثبيت التفصيلية.
npm install mic speakerimport { 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، باستخدام مكتبات JavaScript للربط بواجهة Live API وبث الصوت ثنائي الاتجاه من خلال الميكروفون ومكبرات الصوت
- اطّلِع على عمليات الدمج مع الشركاء للحصول على أمثلة إضافية وأدلة حول كيفية البدء.
الخطوات التالية
- اطّلِع على دليل الإمكانات الكامل لواجهة Live API لمعرفة الإمكانات والإعدادات الرئيسية، بما في ذلك ميزة "رصد النشاط الصوتي" وميزات الصوت الأصلية.
- اطّلِع على دليل استخدام الأدوات لمعرفة كيفية دمج Live API مع الأدوات واستخدام ميزة "استدعاء الدوال".
- اطّلِع على دليل إدارة الجلسات لإدارة المحادثات الطويلة.
- اطّلِع على دليل الرموز المميزة المؤقتة لإجراء مصادقة آمنة في تطبيقات العميل إلى الخادم.
- لمزيد من المعلومات عن واجهة برمجة تطبيقات WebSockets الأساسية، يُرجى الاطّلاع على مرجع واجهة برمجة تطبيقات WebSockets.