Chatbot'lar veya temsilci etkileşimleri gibi gerçek zamanlı ve düşük gecikmeli ses desteği gerektiren uygulamalar için Gemini Live API, Gemini modelinin hem girişini hem de çıkışını akış olarak aktarmanın optimize edilmiş bir yolunu sunar. Firebase AI Logic'i kullanarak Gemini Live API'yi arka uç entegrasyonuna gerek kalmadan doğrudan Android uygulamanızdan çağırabilirsiniz. Bu kılavuzda, Android uygulamanızda Firebase AI Logic ile Gemini Live API'yi nasıl kullanacağınız gösterilmektedir.
Başlayın
Başlamadan önce uygulamanızın API düzeyi 23 veya sonraki sürümleri hedeflediğinden emin olun.
Henüz yapmadıysanız bir Firebase projesi oluşturun ve uygulamanızı Firebase'e bağlayın. Ayrıntılar için Firebase AI Logic belgelerine bakın.
Android projenizi oluşturma
Firebase AI Logic kitaplığını ve Uygulama Kontrolü bağımlılıklarını uygulama düzeyindeki build.gradle.kts veya build.gradle dosyanıza ekleyin. Kitaplık sürümlerini yönetmek için Firebase Android BoM'u kullanın.
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
// Add the dependencies for the Firebase AI Logic and App Check libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
implementation("com.google.firebase:firebase-appcheck-debug")
}
Bağımlılıkları ekledikten sonra Android projenizi Gradle ile senkronize edin.
Yerel geliştirme için Uygulama Kontrolü hata ayıklama sağlayıcısını yapılandırma
Temmuz 2026'nın başlarından itibaren, Firebase Console'da AI Logic için rehberli kurulum iş akışı kapsamında, Gemini API'yi korumak için Firebase Uygulama Kontrolü otomatik olarak zorunlu kılınacak. Yerel geliştirme için Uygulama Kontrolü'nün yaptırımını sürdürürken onayı atlamak üzere Uygulama Kontrolü hata ayıklama sağlayıcısını yapılandırmanız gerekir.
Hata ayıklama derlemenizde, Uygulama Kontrolü'nü hata ayıklama sağlayıcı fabrikasını kullanacak şekilde yapılandırın:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )Java
FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance());Hata ayıklama jetonunuzu alın:
Uygulamanızı emülatörde veya test cihazınızda çalıştırın.
Günlüklerinizde Uygulama Kontrolü hata ayıklama jetonunu bulun. Örneğin:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678Jetonu (ör.
123a4567-b89c-12d3-e456-789012345678) kopyalayın.
Hata ayıklama jetonunuzu Uygulama Kontrolü'ne kaydetme:
Firebase konsolunda Güvenlik > Uygulama Kontrolü > Uygulamalar sekmesine gidin.
Uygulamanızı bulun, taşma menüsünü () tıklayın ve ardından Hata ayıklama jetonlarını yönet'i seçin.
Hata ayıklama jetonunuzu kaydetmek için ekrandaki talimatları uygulayın.
Hata ayıklama sağlayıcısı hakkında ayrıntılı bilgi (yeni bir hata ayıklama jetonunun nasıl alınacağı dahil) için resmi Uygulama Kontrolü belgelerine göz atın.
Firebase AI Logic'i entegre etme ve üretken model başlatma
Uygulamanızın AndroidManifest.xml dosyasına RECORD_AUDIO iznini ekleyin:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Gemini Developer API arka uç hizmetini başlatın ve LiveModel modeline erişin.
Live API'yi destekleyen bir model (ör. gemini-2.5-flash-native-audio-preview-12-2025) kullanın.
Kullanılabilir Live API modelleri için Firebase belgelerine bakın.
Ses belirtmek için model yapılandırmasının bir parçası olarak speechConfig nesnesinde ses adını ayarlayın. Ses belirtmezseniz varsayılan olarak Puck kullanılır.
Kotlin
// Initialize the `LiveModel` val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) } )
Java
// Initialize the `LiveModel`
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
null,
null
);
İsteğe bağlı olarak, bir sistem talimatı ayarlayarak modelin oynayacağı bir karakter veya rol tanımlayabilirsiniz:
Kotlin
val systemInstruction = content { text("You are a helpful assistant, you main role is [...]") } val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, )
Java
Content systemInstruction = new Content.Builder()
.addText("You are a helpful assistant, you main role is [...]")
.build();
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
tools, // null if you don't want to use function calling
systemInstruction
);
Uygulamanıza özel bağlam (ör. kullanıcının uygulama içi etkinlik geçmişi) sağlamak için sistem talimatlarını kullanarak modelle olan sohbeti daha da özelleştirebilirsiniz.
Live API oturumu başlatma
LiveModel örneğini oluşturduktan sonra model.connect() yöntemini çağırarak bir LiveSession nesnesi oluşturun ve düşük gecikmeli akışla modelle kalıcı bir bağlantı kurun. LiveSession, sesli oturumu başlatıp durdurarak ve metin gönderip alarak modelle etkileşim kurmanıza olanak tanır.
Ardından, modelle sohbeti başlatmak için startAudioConversation() yöntemini çağırabilirsiniz:
Kotlin
val session = model.connect() session.startAudioConversation()
Java
LiveModelFutures model = LiveModelFutures.from(liveModel);
ListenableFuture<LiveSession> sessionFuture = model.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);
Model ile olan görüşmelerinizde, modelin kesintileri işlemediğini unutmayın. Ayrıca Live API çift yönlü olduğundan içerik göndermek ve almak için aynı bağlantıyı kullanırsınız.
Gemini Live API'yi kullanarak farklı giriş modalitelerinden ses de üretebilirsiniz:
- Metin ve ses girişi gönderme
- Video girişi gönderme (Firebase hızlı başlangıç uygulamasına göz atın).
İşlev çağrısı: Gemini Live API'yi uygulamanıza bağlama
Bir adım daha ileri giderek modelin, işlev çağrısı kullanarak uygulamanızın mantığıyla doğrudan etkileşim kurmasını da sağlayabilirsiniz.
İşlev çağrısı (veya araç çağrısı), üretken yapay zeka uygulamalarının bir özelliğidir. Bu özellik, modelin kendi inisiyatifiyle işlevleri çağırarak işlem yapmasına olanak tanır. İşlevin bir çıkışı varsa model bunu bağlamına ekler ve sonraki nesiller için kullanır.
Uygulamanızda işlev çağrısını kullanmak için modele göstermek istediğiniz her işlev için bir FunctionDeclaration nesnesi oluşturarak başlayın.
Örneğin, bir dizeyi dize listesine ekleyen bir addList işlevini Gemini'a göstermek için işlevin ve parametresinin adını ve kısa bir açıklamasını içeren bir FunctionDeclaration değişkeni oluşturarak başlayın:
Kotlin
val itemList = mutableListOf<String>() fun addList(item: String) { itemList.add(item) } val addListFunctionDeclaration = FunctionDeclaration( name = "addList", description = "Function adding an item the list", parameters = mapOf( "item" to Schema.string("A short string describing the item to add to the list") ) )
Java
HashMap<String, Schema> addListParams = new HashMap<String, Schema>(1);
addListParams.put("item", Schema.str("A short string describing the item to add to the list"));
FunctionDeclaration addListFunctionDeclaration = new FunctionDeclaration(
"addList",
"Function adding an item the list",
addListParams,
Collections.emptyList()
);
Ardından, modeli örneklendirirken bu FunctionDeclaration değerini Tool olarak modele iletin:
Kotlin
val addListTool = Tool.functionDeclarations(listOf(addListFunctionDeclaration)) val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, tools = listOf(addListTool) )
Java
LiveGenerativeModel model = FirebaseAI.getInstance(
GenerativeBackend.googleAI()).liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR")))
.build(),
List.of(Tool.functionDeclarations(List.of(addListFunctionDeclaration))),
null,
systemInstruction
);
Son olarak, modelin yaptığı araç çağrısını işlemek ve yanıtı geri iletmek için bir işleyici işlevi uygulayın. startAudioConversation işlevini çağırdığınızda LiveSession öğesine sağlanan bu işleyici işlevi, bir FunctionCallPart parametresi alır ve FunctionResponsePart döndürür:
Kotlin
session.startAudioConversation(::functionCallHandler) // ... fun functionCallHandler(functionCall: FunctionCallPart): FunctionResponsePart { return when (functionCall.name) { "addList" -> { // Extract function parameter from functionCallPart val itemName = functionCall.args["item"]!!.jsonPrimitive.content // Call function with parameter addList(itemName) // Confirm the function call to the model val response = JsonObject( mapOf( "success" to JsonPrimitive(true), "message" to JsonPrimitive("Item $itemName added to the todo list") ) ) FunctionResponsePart(functionCall.name, response) } else -> { val response = JsonObject( mapOf( "error" to JsonPrimitive("Unknown function: ${functionCall.name}") ) ) FunctionResponsePart(functionCall.name, response) } } }
Java
Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
@RequiresPermission(Manifest.permission.RECORD_AUDIO)
@Override
@OptIn(markerClass = PublicPreviewAPI.class)
public void onSuccess(LiveSessionFutures ses) {
ses.startAudioConversation(::handleFunctionCallFuture);
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
// ...
ListenableFuture<JsonObject> handleFunctionCallFuture = Futures.transform(response, result -> {
for (FunctionCallPart functionCall : result.getFunctionCalls()) {
if (functionCall.getName().equals("addList")) {
Map<String, JsonElement> args = functionCall.getArgs();
String item =
JsonElementKt.getContentOrNull(
JsonElementKt.getJsonPrimitive(
locationJsonObject.get("item")));
return addList(item);
}
}
return null;
}, Executors.newSingleThreadExecutor());
Sonraki adımlar
- Android AI kataloğu örnek uygulamasında Gemini Live API'yi deneyin.
- Gemini Live API hakkında daha fazla bilgiyi Firebase AI Logic belgelerinde bulabilirsiniz.
- Kullanılabilir Gemini modelleri hakkında daha fazla bilgi edinin.
- İşlev çağrısı hakkında daha fazla bilgi edinin.
- İstem tasarımı stratejilerini inceleyin.