ऐसे ऐप्लिकेशन जिनके लिए रीयल-टाइम में और कम समय में आवाज़ से जुड़ी सहायता की ज़रूरत होती है, जैसे कि चैटबॉट या एजेंट से बातचीत करने वाले ऐप्लिकेशन, उनके लिए Gemini Live API, Gemini मॉडल के इनपुट और आउटपुट, दोनों को स्ट्रीम करने का बेहतर तरीका उपलब्ध कराता है. Firebase AI Logic का इस्तेमाल करके, Gemini Live API को सीधे अपने Android ऐप्लिकेशन से कॉल किया जा सकता है. इसके लिए, बैकएंड इंटिग्रेशन की ज़रूरत नहीं होती. इस गाइड में, Firebase AI Logic के साथ अपने Android ऐप्लिकेशन में Gemini Live API इस्तेमाल करने का तरीका बताया गया है.
शुरू करें
शुरू करने से पहले, पक्का करें कि आपका ऐप्लिकेशन एपीआई लेवल 23 या उसके बाद के लेवल को टारगेट करता हो.
अगर आपने पहले से ही Firebase प्रोजेक्ट सेट अप नहीं किया है और अपने ऐप्लिकेशन को Firebase से कनेक्ट नहीं किया है, तो ऐसा करें. ज़्यादा जानकारी के लिए, Firebase AI Logic का दस्तावेज़ देखें.
Android प्रोजेक्ट सेट अप करना
ऐप्लिकेशन-लेवल की build.gradle.kts या build.gradle फ़ाइल में, Firebase AI Logic लाइब्रेरी और App Check की डिपेंडेंसी जोड़ें. लाइब्रेरी के वर्शन मैनेज करने के लिए, Firebase Android BoM का इस्तेमाल करें.
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.19.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")
}
डिपेंडेंसी जोड़ने के बाद, अपने Android प्रोजेक्ट को Gradle के साथ सिंक करें.
स्थानीय डेवलपमेंट के लिए, App Check के डीबग प्रोवाइडर को कॉन्फ़िगर करना
जुलाई 2026 की शुरुआत से, Firebase कंसोल में एआई लॉजिक के लिए, सेटअप करने के तरीके के बारे में जानकारी देने वाले वर्कफ़्लो के तहत, Gemini API को सुरक्षित रखने के लिए Firebase App Check को अपने-आप लागू किया जाता है. लोकल डेवलपमेंट के लिए, आपको App Check के डीबग प्रोवाइडर को कॉन्फ़िगर करना होगा. इससे, पुष्टि को बायपास किया जा सकेगा. हालांकि, App Check लागू रहेगा.
अपनी डीबग बिल्ड में, App Check को कॉन्फ़िगर करें, ताकि वह डीबग प्रोवाइडर फ़ैक्ट्री का इस्तेमाल कर सके:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )Java
FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance());अपना डीबग टोकन पाएं:
अपने ऐप्लिकेशन को एम्युलेटर में या टेस्ट के लिए डिवाइस पर चलाएं.
अपने लॉग में App Check डीबग टोकन ढूंढें. उदाहरण के लिए:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678टोकन को कॉपी करें. उदाहरण के लिए,
123a4567-b89c-12d3-e456-789012345678.
App Check में अपना डीबग टोकन रजिस्टर करें:
Firebase कंसोल में, सुरक्षा > App Check > ऐप्लिकेशन टैब पर जाएं.
अपना ऐप्लिकेशन ढूंढें. इसके बाद, ओवरफ़्लो मेन्यू () पर क्लिक करें. इसके बाद, डीबग टोकन मैनेज करें चुनें.
अपने डीबग टोकन को रजिस्टर करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
डीबग करने की सुविधा देने वाली कंपनी के बारे में जानकारी पाने के लिए (इसमें नया डीबग टोकन पाने का तरीका भी शामिल है), App Check के आधिकारिक दस्तावेज़ देखें.
Firebase AI Logic को इंटिग्रेट करना और जनरेटिव मॉडल को शुरू करना
अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में, RECORD_AUDIO अनुमति जोड़ें:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Gemini Developer API की बैकएंड सेवा शुरू करें और LiveModel को ऐक्सेस करें.
ऐसे मॉडल का इस्तेमाल करें जो Live API के साथ काम करता हो. जैसे, gemini-2.5-flash-native-audio-preview-12-2025.
उपलब्ध Live API मॉडल के बारे में जानने के लिए, Firebase का दस्तावेज़ देखें.
आवाज़ तय करने के लिए, मॉडल कॉन्फ़िगरेशन के हिस्से के तौर पर, speechConfig ऑब्जेक्ट में आवाज़ का नाम सेट करें. अगर आपने कोई आवाज़ नहीं चुनी है, तो डिफ़ॉल्ट रूप से Puck का इस्तेमाल किया जाएगा.
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
);
सिस्टम के निर्देश सेट करके, मॉडल के लिए कोई पर्सोना या भूमिका तय की जा सकती है. हालांकि, ऐसा करना ज़रूरी नहीं है:
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
);
सिस्टम के निर्देशों का इस्तेमाल करके, मॉडल के साथ बातचीत को और भी बेहतर बनाया जा सकता है. इससे अपने ऐप्लिकेशन के हिसाब से कॉन्टेक्स्ट दिया जा सकता है. उदाहरण के लिए, ऐप्लिकेशन में उपयोगकर्ता की गतिविधि का इतिहास.
Live API सेशन शुरू करना
LiveModel इंस्टेंस बनाने के बाद, model.connect() को कॉल करके LiveSession ऑब्जेक्ट बनाएं. साथ ही, कम समय में स्ट्रीम होने वाले मॉडल के साथ लगातार कनेक्शन बनाएं. LiveSession की मदद से, मॉडल के साथ इंटरैक्ट किया जा सकता है. इसके लिए, ऑडियो सेशन शुरू और बंद किया जा सकता है. साथ ही, टेक्स्ट भेजा और पाया जा सकता है.
इसके बाद, मॉडल से बातचीत शुरू करने के लिए, startAudioConversation() को कॉल करें:
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);
मॉडल के साथ बातचीत करते समय ध्यान रखें कि यह रुकावटों को हैंडल नहीं करता है. साथ ही, Live API दोनों दिशाओं में काम करता है. इसलिए, कॉन्टेंट भेजने और पाने के लिए एक ही कनेक्शन का इस्तेमाल किया जाता है.
Gemini Live API का इस्तेमाल करके, अलग-अलग इनपुट मोड से ऑडियो जनरेट किया जा सकता है:
- टेक्स्ट और ऑडियो इनपुट भेजना.
- वीडियो इनपुट भेजें (Firebase Quickstart ऐप्लिकेशन देखें).
फ़ंक्शन कॉलिंग: Gemini Live API को अपने ऐप्लिकेशन से कनेक्ट करें
इसके अलावा, फ़ंक्शन कॉलिंग का इस्तेमाल करके, मॉडल को सीधे तौर पर अपने ऐप्लिकेशन के लॉजिक के साथ इंटरैक्ट करने की सुविधा भी चालू की जा सकती है.
फ़ंक्शन कॉलिंग (या टूल कॉलिंग), जनरेटिव एआई को लागू करने की एक सुविधा है. इसकी मदद से मॉडल, कार्रवाइयां करने के लिए अपने-आप फ़ंक्शन कॉल कर सकता है. अगर फ़ंक्शन का कोई आउटपुट है, तो मॉडल उसे अपने कॉन्टेक्स्ट में जोड़ता है और इसका इस्तेमाल बाद के जनरेशन के लिए करता है.
अपने ऐप्लिकेशन में फ़ंक्शन कॉलिंग की सुविधा लागू करने के लिए, उन सभी फ़ंक्शन के लिए FunctionDeclaration ऑब्जेक्ट बनाएं जिन्हें आपको मॉडल के लिए उपलब्ध कराना है.
उदाहरण के लिए, Gemini को स्ट्रिंग की सूची में स्ट्रिंग जोड़ने वाले addList फ़ंक्शन के बारे में बताने के लिए, सबसे पहले FunctionDeclaration वैरिएबल बनाएं. इसके लिए, फ़ंक्शन और उसके पैरामीटर का नाम और अंग्रेज़ी में उसकी छोटी जानकारी दें:
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()
);
इसके बाद, मॉडल को इंस्टैंशिएट करते समय, इस FunctionDeclaration को Tool के तौर पर पास करें:
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()
.setResponseModalities(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR")))
.build(),
List.of(Tool.functionDeclarations(List.of(addListFunctionDeclaration))),
null,
systemInstruction
);
आखिर में, एक हैंडलर फ़ंक्शन लागू करें, ताकि मॉडल के टूल कॉल को हैंडल किया जा सके और उसे वापस रिस्पॉन्स दिया जा सके. startAudioConversation को कॉल करते समय, LiveSession को दिया गया यह हैंडलर फ़ंक्शन, FunctionCallPart पैरामीटर लेता है और FunctionResponsePart दिखाता है:
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());
अगले चरण
- Android AI catalog sample app में, Gemini Live API को आज़माएं.
- Firebase AI Logic के दस्तावेज़ में, Gemini Live API के बारे में ज़्यादा पढ़ें.
- उपलब्ध Gemini मॉडल के बारे में ज़्यादा जानें.
- फ़ंक्शन कॉलिंग के बारे में ज़्यादा जानें.
- प्रॉम्प्ट डिज़ाइन करने की रणनीतियां एक्सप्लोर करें.