চ্যাটবট বা এজেন্টিক ইন্টার্যাকশনের মতো রিয়েল-টাইম ও কম লেটেন্সি ভয়েস সহায়তার প্রয়োজন হয় এমন অ্যাপ্লিকেশনের জন্য, Gemini Live API, Gemini মডেলের ইনপুট ও আউটপুট স্ট্রিম করার একটি অপ্টিমাইজ করা উপায় প্রদান করে। Firebase AI Logic ব্যবহার করে, আপনি ব্যাকএন্ড ইন্টিগ্রেশন করার প্রয়োজন ছাড়াই সরাসরি আপনার Android অ্যাপ থেকে Gemini Live API কল করতে পারবেন। এই গাইড আপনাকে দেখায় যে কীভাবে Firebase AI Logic-এর সাথে আপনার Android অ্যাপে Gemini Live API ব্যবহার করতে হয়।
শুরু করুন
শুরু করার আগে, আপনার অ্যাপ API লেভেল ২৩ বা তার পরের যেকোনও ভার্সনকে টার্গেট করে কিনা তা নিশ্চিত করুন।
আপনি আগে থেকে না করে থাকলে, 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")
}
ডিপেন্ডেন্সি যোগ করার পরে, Gradle-এর সাথে আপনার Android প্রোজেক্ট সিঙ্ক করুন।
লোকাল ডেভেলপমেন্টের জন্য App Check ডিবাগ প্রদানকারী কনফিগার করা
২০২৬ সালের জুলাই মাসের শুরু থেকে, Firebase কনসোলে AI Logic-এর জন্য নির্দেশিত সেট-আপ ওয়ার্কফ্লোর অংশ হিসেবে, Gemini API-কে সুরক্ষিত রাখতে Firebase App Check অটোমেটিক প্রয়োগ করা হবে। লোকাল ডেভেলপমেন্টের জন্য, আপনাকে অ্যাপ চেক এনফোর্সমেন্ট বজায় রেখেও অ্যাটেস্টেশন বাইপাস করতে অ্যাপ চেক ডিবাগ প্রোভাইডার কনফিগার করতে হবে।
আপনার ডিবাগ বিল্ডে, ডিবাগ প্রোভাইডার ফ্যাক্টরি ব্যবহার করার জন্য অ্যাপ চেক কনফিগার করুন:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )জাভা
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 ডকুমেন্ট দেখুন।
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")) } )
জাভা
// 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, )
জাভা
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()
জাভা
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 কানেক্ট করা
আরও একধাপ এগিয়ে, আপনি ফাংশন কলিং ব্যবহার করে মডেলটিকে সরাসরি আপনার অ্যাপের লজিকের সাথে ইন্টার্যাক্ট করার জন্য চালু করতে পারেন।
ফাংশন কলিং (বা টুল কলিং) হল জেনারেটিভ AI ইমপ্লিমেন্টেশনের একটি ফিচার যা মডেলকে অ্যাকশন পারফর্ম করার জন্য নিজেই ফাংশন কল করার অনুমতি দেয়। ফাংশনের কোনও আউটপুট থাকলে, মডেলটি সেটি নিজের কনটেক্সটে যোগ করে এবং পরবর্তী জেনারেশনের জন্য ব্যবহার করে।
আপনার অ্যাপে ফাংশন কলিং প্রয়োগ করতে, মডেলের কাছে প্রকাশ করতে চান এমন প্রতিটি ফাংশনের জন্য
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") ) )
জাভা
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) )
জাভা
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
);
সবশেষে, মডেলের করা টুল কল হ্যান্ডেল করার জন্য একটি হ্যান্ডলার ফাংশন প্রয়োগ করুন
এবং সেটির উত্তর ফেরত দিন। আপনি 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) } } }
জাভা
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 ব্যবহার করে দেখুন।
- Gemini Live API সম্পর্কে আরও জানতে Firebase AI Logic ডকুমেন্টেশন পড়ুন।
- উপলভ্য Gemini মডেল সম্পর্কে আরও জানুন।
- ফাংশন কলিং সম্পর্কে আরও জানুন।
- প্রম্পট ডিজাইন স্ট্র্যাটেজি এক্সপ্লোর করুন।