चैटबॉट या एजेंटिक इंटरैक्शन जैसे ऐप्लिकेशन के लिए, Gemini Live API की मदद से रीयल-टाइम में और कम समय में वॉइस सपोर्ट दिया जा सकता है. यह API, Gemini मॉडल के लिए इनपुट और आउटपुट, दोनों को स्ट्रीम करने का ऑप्टिमाइज़ किया गया तरीका उपलब्ध कराता है. Firebase AI Logic का इस्तेमाल करके, अपने Android ऐप्लिकेशन से सीधे Gemini Live API को कॉल किया जा सकता है. इसके लिए, बैकएंड इंटिग्रेशन की ज़रूरत नहीं होती. इस गाइड में, Firebase AI Logic के साथ अपने Android ऐप्लिकेशन में Gemini Live API का इस्तेमाल करने का तरीका बताया गया है.
शुरू करें
शुरू करने से पहले, पक्का करें कि आपका ऐप्लिकेशन एपीआई लेवल 23 या उसके बाद के लेवल को टारगेट करता हो.
अगर आपने पहले से ही Firebase प्रोजेक्ट सेट अप नहीं किया है और अपने ऐप्लिकेशन को Firebase से कनेक्ट नहीं किया है, तो ऐसा करें. ज़्यादा जानकारी के लिए, Firebase AI Logic का दस्तावेज़ देखें.
अपना Android प्रोजेक्ट सेट अप करना
अपने ऐप्लिकेशन के लेवल वाली Firebase AI Logic की लाइब्रेरी डिपेंडेंसी को अपनी
build.gradle.kts या build.gradle फ़ाइल में जोड़ें. लाइब्रेरी के वर्शन मैनेज करने के लिए, Firebase Android
BoM का इस्तेमाल करें.
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.12.0"))
// Add the dependency for the Firebase AI Logic library
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
}
डिपेंडेंसी जोड़ने के बाद, अपने Android प्रोजेक्ट को Gradle के साथ सिंक करें.
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.
उपलब्ध मॉडल के बारे में जानने के लिए, 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 इंस्टेंस बनाने के बाद, LiveSession ऑब्जेक्ट बनाने के लिए model.connect() को कॉल करें. साथ ही, कम समय में स्ट्रीमिंग के साथ मॉडल के साथ लगातार कनेक्शन बनाएं. 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 के क्विकस्टार्ट ऐप्लिकेशन के बारे में जानें )
फ़ंक्शन कॉलिंग: अपने ऐप्लिकेशन को 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 कैटलॉग के सैंपल ऐप्लिकेशन में, Gemini Live API का इस्तेमाल करें.
- Firebase AI Logic के दस्तावेज़ में, Gemini Live API के बारे में ज़्यादा पढ़ें.
- उपलब्ध Gemini मॉडल के बारे में ज़्यादा जानें.
- फ़ंक्शन कॉलिंग के बारे में ज़्यादा जानें.
- प्रॉम्प्ट डिज़ाइन की रणनीतियों के बारे में जानें.