চ্যাটবট বা এজেন্টিক ইন্টার্যাকশনের মতো যেসব অ্যাপ্লিকেশনের জন্য রিয়েল-টাইম এবং কম লেটেন্সি ভয়েস সাপোর্ট প্রয়োজন, সেগুলির ক্ষেত্রে 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: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")
}
ডিপেন্ডেন্সি যোগ করার পরে, Gradle-এর সাথে আপনার Android প্রোজেক্ট সিঙ্ক করুন।
স্থানীয় ডেভেলপমেন্টের জন্য App Check ডিবাগ প্রোভাইডার কনফিগার করা
২০২৬ সালের জুলাই মাসের শুরু থেকে, Firebase কনসোলে AI Logic-এর জন্য গাইডেড সেট-আপ ওয়ার্কফ্লোর অংশ হিসেবে, Gemini API সুরক্ষিত রাখতে Firebase App Check অটোমেটিক এনফোর্স করা হয়। লোকাল ডেভেলপমেন্টের জন্য, আপনাকে App Check-এর এনফোর্সমেন্ট বজায় রেখে অ্যাটেস্টেশন বাইপাস করতে App Check ডিবাগ প্রোভাইডার কনফিগার করতে হবে।
আপনার ডিবাগ বিল্ডে, ডিবাগ প্রোভাইডার ফ্যাক্টরি ব্যবহার করার জন্য 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 > অ্যাপ ট্যাব বিকল্পে যান।
আপনার অ্যাপ খুঁজে নিন, ওভারফ্লো মেনুতে () ক্লিক করুন এবং তারপরে ডিবাগ টোকেন ম্যানেজ করুন বিকল্প বেছে নিন।
আপনার ডিবাগ টোকেন রেজিস্টার করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
ডিবাগ প্রোভাইডার সম্পর্কে বিস্তারিত জানতে (নতুন ডিবাগ টোকেন কীভাবে পাবেন তা সহ), অফিসিয়াল 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 মডেল সম্পর্কে আরও জানুন।
- ফাংশন কলিং সম্পর্কে আরও জানুন।
- প্রম্পট ডিজাইন স্ট্র্যাটেজি এক্সপ্লোর করুন।