يتيح Gemini Live API التفاعلات الصوتية والمرئية في الوقت الفعلي وبزمن انتقال منخفض مع نموذج Gemini ثنائي الاتجاه.
يمكن لـ Live API ومجموعة نماذجه الخاصة معالجة تدفقات مستمرة من الصوت أو الفيديو أو النص لتقديم ردود شفهية فورية تشبه ردود البشر، ما يوفّر تجربة حوارية طبيعية للمستخدمين.
توضّح هذه الصفحة كيفية بدء استخدام الميزة الأكثر شيوعًا، وهي إدخال وإخراج الصوت في الوقت الفعلي، ولكن Live API يتيح استخدام العديد من الميزات وخيارات الضبط المختلفة.
Live API هي واجهة برمجة تطبيقات ذات حالة تنشئ اتصال WebSocket لإنشاء جلسة بين العميل وخادم Gemini. لمعرفة التفاصيل، يُرجى الاطّلاع على المستندات المرجعية لـ Live API (Gemini Developer API | Agent Platform Gemini API (formerly Vertex AI)).
الانتقال إلى عيّنات التعليمات البرمجية
الاطّلاع على مراجع مفيدة
Swift: تطبيق البدء السريع | Android: تطبيق البدء السريع | الويب: تطبيق البدء السريع | Flutter: تطبيق البدء السريع | Unity: سيتوفّر قريبًا
يمكنك تجربة Gemini Live API في تطبيق حقيقي منشور، من خلال الاطّلاع على تطبيق Flutter AI Playground الذي يمكن الوصول إليه عبر وحدة تحكّم Firebase.
قبل البدء
إذا لم يسبق لك ذلك، أكمِل
دليل البدء
الذي يوضّح كيفية إعداد مشروع Firebase
وربط تطبيقك بمنصة Firebase وإضافة حزمة تطوير البرامج (SDK)
وإعداد خدمة الخلفية لمزوّد Gemini API الذي اخترته
وإنشاء مثيل LiveModel.
يمكنك إنشاء نماذج أولية باستخدام الطلبات وLive API في Google AI Studio أو Agent Studio.
النماذج التي تتيح هذه الميزة
نماذج 3.x
Gemini Developer API
gemini-3.1-flash-live-preview
على الرغم من أنّ هذا النموذج هو نسخة حصرية، إلا أنّه متاح في "الخطة المجانية" من Gemini Developer API.
Agent Platform Gemini API (formerly Vertex AI)
عدم توفّر نماذج Gemini Live 3.x
نماذج 2.5
على الرغم من أنّ النموذج يحمل أسماء مختلفة حسب مقدّم واجهة برمجة التطبيقات Gemini، فإنّ ميزاته هي نفسها.
Gemini Developer API
gemini-2.5-flash-native-audio-preview-12-2025gemini-2.5-flash-native-audio-preview-09-2025
على الرغم من أنّ هذه النماذج حصرية، إلا أنّها متاحة في "الخطة المجانية" من Gemini Developer API.
Agent Platform Gemini API (formerly Vertex AI)
gemini-live-2.5-flash-native-audio(تم إصداره في ديسمبر 2025)gemini-live-2.5-flash-preview-native-audio-09-2025
عند استخدام Agent Platform Gemini API (formerly Vertex AI)، لا تتوفّر نماذج Live API 2.5 في الموقع الجغرافي
global.
بث الإدخال والإخراج الصوتي
|
انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة. |
يوضّح المثال التالي التنفيذ الأساسي لإرسال إدخال صوتي عبر البث المباشر وتلقّي مخرجات صوتية عبر البث المباشر.
للاطّلاع على خيارات وإمكانات إضافية في Live API، يُرجى مراجعة قسم "ما هي الإجراءات الأخرى التي يمكنك اتّخاذها؟" أدناه في هذه الصفحة.
Swift
لاستخدام Live API، أنشِئ مثيل
LiveModel
واضبط
صيغة الردّ
على audio.
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
// Create a `liveModel` instance with a model that supports the Live API.
let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
modelName: "GEMINI_LIVE_API_MODEL_NAME",
// Configure the model to respond with audio.
generationConfig: LiveGenerationConfig(
responseModalities: [.audio]
)
)
do {
let session = try await liveModel.connect()
// Load the audio file, or tap a microphone.
guard let audioFile = NSDataAsset(name: "audio.pcm") else {
fatalError("Failed to load audio file")
}
// Provide the audio data.
await session.sendAudioRealtime(audioFile.data)
var outputText = ""
for try await message in session.responses {
if case let .content(content) = message.payload {
content.modelTurn?.parts.forEach { part in
if let part = part as? InlineDataPart, part.mimeType.starts(with: "audio/pcm") {
// Handle 16bit pcm audio data at 24khz
playAudio(part.data)
}
}
// Optional: if you don't need to send more requests.
if content.isTurnComplete {
await session.close()
}
}
}
} catch {
fatalError(error.localizedDescription)
}
Kotlin
لاستخدام Live API، أنشِئ مثيل
LiveModel
واضبط
صيغة الردّ
على AUDIO.
// Initialize the Gemini Developer API backend service.
// Create a `liveModel` instance with a model that supports the Live API.
val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
modelName = "GEMINI_LIVE_API_MODEL_NAME",
// Configure the model to respond with audio.
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
}
)
val session = liveModel.connect()
// This is the recommended approach.
// However, you can create your own recorder and handle the stream.
session.startAudioConversation()
Java
لاستخدام Live API، أنشِئ مثيل
LiveModel
واضبط
صيغة الردّ
على AUDIO.
ExecutorService executor = Executors.newFixedThreadPool(1);
// Initialize the Gemini Developer API backend service.
// Create a `liveModel` instance with a model that supports the Live API.
LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
"GEMINI_LIVE_API_MODEL_NAME",
// Configure the model to respond with audio.
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.build()
);
LiveModelFutures liveModel = LiveModelFutures.from(lm);
ListenableFuture<LiveSession> sessionFuture = liveModel.connect();
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
@Override
public void onSuccess(LiveSession ses) {
LiveSessionFutures session = LiveSessionFutures.from(ses);
session.startAudioConversation();
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
Web
لاستخدام Live API، أنشِئ مثيل
LiveGenerativeModel
واضبط
صيغة الردّ
على AUDIO.
import { initializeApp } from "firebase/app";
import { getAI, getLiveGenerativeModel, GoogleAIBackend, ResponseModality } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `LiveGenerativeModel` instance with a model that supports the Live API.
const liveModel = getLiveGenerativeModel(ai, {
model: "GEMINI_LIVE_API_MODEL_NAME",
// Configure the model to respond with audio.
generationConfig: {
responseModalities: [ResponseModality.AUDIO],
},
});
const session = await liveModel.connect();
// Start the audio conversation.
const audioConversationController = await startAudioConversation(session);
// ... Later, to stop the audio conversation
// await audioConversationController.stop()
Dart
لاستخدام Live API، أنشِئ مثيل
LiveGenerativeModel
واضبط
صيغة الردّ
على audio.
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
import 'package:your_audio_recorder_package/your_audio_recorder_package.dart';
late LiveSession _session;
final _audioRecorder = YourAudioRecorder();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service.
// Create a `liveGenerativeModel` instance with a model that supports the Live API.
final liveModel = FirebaseAI.googleAI().liveGenerativeModel(
model: 'GEMINI_LIVE_API_MODEL_NAME',
// Configure the model to respond with audio.
liveGenerationConfig: LiveGenerationConfig(
responseModalities: [ResponseModalities.audio],
),
);
_session = await liveModel.connect();
final audioRecordStream = _audioRecorder.startRecordingStream();
// Map the Uint8List stream to InlineDataPart stream.
final mediaChunkStream = audioRecordStream.map((data) {
return InlineDataPart('audio/pcm', data);
});
await for (final chunk in mediaChunkStream) {
await _session.sendAudioRealtime(chunk);
}
// In a separate thread, receive the audio response from the model.
await for (final message in _session.receive()) {
// Process the received message.
}
Unity
لاستخدام Live API، أنشِئ مثيل
LiveModel
واضبط
صيغة الردّ
على Audio.
using Firebase;
using Firebase.AI;
async Task SendTextReceiveAudio() {
// Initialize the Gemini Developer API backend service.
// Create a `LiveModel` instance with a model that supports the Live API.
var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
modelName: "GEMINI_LIVE_API_MODEL_NAME",
// Configure the model to respond with audio.
liveGenerationConfig: new LiveGenerationConfig(
responseModalities: new[] { ResponseModality.Audio })
);
LiveSession session = await liveModel.ConnectAsync();
// Start a coroutine to send audio from the Microphone.
var recordingCoroutine = StartCoroutine(SendAudio(session));
// Start receiving the response.
await ReceiveAudio(session);
}
IEnumerator SendAudio(LiveSession liveSession) {
string microphoneDeviceName = null;
int recordingFrequency = 16000;
int recordingBufferSeconds = 2;
var recordingClip = Microphone.Start(microphoneDeviceName, true,
recordingBufferSeconds, recordingFrequency);
int lastSamplePosition = 0;
while (true) {
if (!Microphone.IsRecording(microphoneDeviceName)) {
yield break;
}
int currentSamplePosition = Microphone.GetPosition(microphoneDeviceName);
if (currentSamplePosition != lastSamplePosition) {
// The Microphone uses a circular buffer, so we need to check if the
// current position wrapped around to the beginning, and handle it accordingly.
int sampleCount;
if (currentSamplePosition > lastSamplePosition) {
sampleCount = currentSamplePosition - lastSamplePosition;
} else {
sampleCount = recordingClip.samples - lastSamplePosition + currentSamplePosition;
}
if (sampleCount > 0) {
// Get the audio chunk.
float[] samples = new float[sampleCount];
recordingClip.GetData(samples, lastSamplePosition);
// Send the data, discarding the resulting Task to avoid the warning.
_ = liveSession.SendAudioAsync(samples);
lastSamplePosition = currentSamplePosition;
}
}
// Wait for a short delay before reading the next sample from the Microphone.
const float MicrophoneReadDelay = 0.5f;
yield return new WaitForSeconds(MicrophoneReadDelay);
}
}
Queue<float> audioBuffer = new();
async Task ReceiveAudio(LiveSession liveSession) {
int sampleRate = 24000;
int channelCount = 1;
// Create a looping AudioClip to fill with the received audio data.
int bufferSamples = (int)(sampleRate * channelCount);
AudioClip clip = AudioClip.Create("StreamingPCM", bufferSamples, channelCount,
sampleRate, true, OnAudioRead);
// Attach the clip to an AudioSource and start playing it.
AudioSource audioSource = GetComponent<AudioSource>();
audioSource.clip = clip;
audioSource.loop = true;
audioSource.Play();
// Start receiving the response.
await foreach (var message in liveSession.ReceiveAsync()) {
// Process the received message
foreach (float[] pcmData in message.AudioAsFloat) {
lock (audioBuffer) {
foreach (float sample in pcmData) {
audioBuffer.Enqueue(sample);
}
}
}
}
}
// This method is called by the AudioClip to load audio data.
private void OnAudioRead(float[] data) {
int samplesToProvide = data.Length;
int samplesProvided = 0;
lock(audioBuffer) {
while (samplesProvided < samplesToProvide && audioBuffer.Count > 0) {
data[samplesProvided] = audioBuffer.Dequeue();
samplesProvided++;
}
}
while (samplesProvided < samplesToProvide) {
data[samplesProvided] = 0.0f;
samplesProvided++;
}
}
الأسعار واحتساب الرموز المميّزة
يمكنك العثور على معلومات الأسعار لنماذج Live API في مستندات مقدّم خدمة Gemini API الذي اخترته: Gemini Developer API | Agent Platform Gemini API (formerly Vertex AI).
بغض النظر عن مقدّم خدمة Gemini API، لا تتيح واجهة برمجة التطبيقات Live API استخدام Count Tokens API.
ما هي المهام الأخرى التي يمكنني تنفيذها؟
يمكنك الاطّلاع على المجموعة الكاملة من إمكانات Live API، مثل بثّ أنواع مختلفة من الإدخالات (الصوت أو النص أو الفيديو مع الصوت).
يمكنك تخصيص عملية التنفيذ باستخدام خيارات ضبط مختلفة، مثل إضافة ميزة تحويل الصوت إلى نص أو ضبط صوت الردّ أو ضبط ميزة "رصد النشاط الصوتي" (VAD) (على سبيل المثال، للتعامل مع المقاطعات).
تعرَّف على كيفية إدارة الجلسات، بما في ذلك تعديل المحتوى في منتصف الجلسة، والإشارة يدويًا إلى نشاط المستخدم، وضغط نافذة السياق، ورصد اقتراب انتهاء الجلسة، واستئناف الجلسة.
يمكنك تعزيز عملية التنفيذ من خلال منح النموذج إمكانية الوصول إلى أدوات، مثل استدعاء الدوال والربط بمعلومات واقعية من خلال "
Google Search ". ستتوفّر قريبًا المستندات الرسمية حول استخدام الأدوات مع Live API.يمكنك الاطّلاع على الحدود والمواصفات لاستخدام "Live API"، مثل مدة الجلسة والحدود القصوى للطلبات واللغات المتاحة وغير ذلك.