যেসব অ্যাপ্লিকেশনে রিয়েল-টাইম এবং লো-লেটেন্সি ভয়েস সাপোর্টের প্রয়োজন হয়, যেমন চ্যাটবট বা এজেন্টিক ইন্টারঅ্যাকশন, সেগুলোর জন্য জেমিনি লাইভ এপিআই একটি জেমিনি মডেলের ইনপুট এবং আউটপুট উভয়ই স্ট্রিম করার একটি অপ্টিমাইজড উপায় প্রদান করে। ফায়ারবেস এআই লজিক ব্যবহার করে, আপনি কোনো ব্যাকএন্ড ইন্টিগ্রেশনের প্রয়োজন ছাড়াই সরাসরি আপনার অ্যান্ড্রয়েড অ্যাপ থেকে জেমিনি লাইভ এপিআই কল করতে পারেন। এই নির্দেশিকাটি আপনাকে দেখাবে কীভাবে ফায়ারবেস এআই লজিকের সাহায্যে আপনার অ্যান্ড্রয়েড অ্যাপে জেমিনি লাইভ এপিআই ব্যবহার করতে হয়।
শুরু করুন
শুরু করার আগে, নিশ্চিত করুন যে আপনার অ্যাপটি এপিআই লেভেল ২৩ বা তার চেয়ে উচ্চতর লেভেলকে টার্গেট করছে।
যদি আগে থেকে না করে থাকেন, তাহলে একটি Firebase প্রজেক্ট তৈরি করুন এবং আপনার অ্যাপটিকে Firebase-এর সাথে সংযুক্ত করুন। বিস্তারিত জানতে, Firebase AI Logic ডকুমেন্টেশন দেখুন।
আপনার অ্যান্ড্রয়েড প্রজেক্ট সেট আপ করুন
আপনার অ্যাপ-লেভেলের build.gradle.kts অথবা build.gradle ফাইলে Firebase AI Logic লাইব্রেরি ডিপেন্ডেন্সিটি যোগ করুন। লাইব্রেরির ভার্সনগুলো পরিচালনা করতে Firebase Android BoM ব্যবহার করুন।
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.10.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")
}
ডিপেন্ডেন্সি যোগ করার পর, আপনার অ্যান্ড্রয়েড প্রজেক্টটি গ্রেডলের সাথে সিঙ্ক করুন।
ফায়ারবেস এআই লজিক একীভূত করুন এবং একটি জেনারেটিভ মডেল শুরু করুন।
আপনার অ্যাপ্লিকেশনের 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 ।
কোটলিন
// 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
);
আপনি চাইলে একটি সিস্টেম নির্দেশনা সেট করার মাধ্যমে মডেলটির জন্য একটি ব্যক্তিত্ব বা ভূমিকা নির্ধারণ করতে পারেন:
কোটলিন
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
);
আপনি সিস্টেম নির্দেশাবলী ব্যবহার করে আপনার অ্যাপের জন্য নির্দিষ্ট প্রাসঙ্গিক তথ্য (যেমন, ব্যবহারকারীর অ্যাপের ভেতরের কার্যকলাপের ইতিহাস) প্রদান করার মাধ্যমে মডেলের সাথে কথোপকথনটিকে আরও সুনির্দিষ্ট করতে পারেন।
একটি লাইভ এপিআই সেশন শুরু করুন
LiveModel ইনস্ট্যান্স তৈরি করার পর, একটি LiveSession অবজেক্ট তৈরি করতে এবং লো-ল্যাটেন্সি স্ট্রিমিংয়ের মাধ্যমে মডেলের সাথে একটি স্থায়ী সংযোগ স্থাপন করতে model.connect() কল করুন। LiveSession আপনাকে ভয়েস সেশন শুরু ও বন্ধ করা এবং টেক্সট পাঠানো ও গ্রহণ করার মাধ্যমে মডেলের সাথে ইন্টারঅ্যাক্ট করতে দেয়।
এরপর আপনি মডেলের সাথে কথোপকথন শুরু করতে startAudioConversation() কল করতে পারেন:
কোটলিন
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);
মডেলের সাথে কথোপকথনের সময় মনে রাখবেন যে এটি কোনো বাধা সামলাতে পারে না। এছাড়াও, লাইভ এপিআই দ্বিমুখী , তাই আপনি কন্টেন্ট পাঠানো এবং গ্রহণ করার জন্য একই সংযোগ ব্যবহার করেন।
এছাড়াও আপনি জেমিনি লাইভ এপিআই ব্যবহার করে বিভিন্ন ইনপুট মোডালিটি থেকে অডিও তৈরি করতে পারেন:
- টেক্সট ইনপুট পাঠান ।
- ভিডিও ইনপুট পাঠান ( ফায়ারবেস কুইকস্টার্ট অ্যাপটি দেখুন)
ফাংশন কলিং: আপনার অ্যাপের সাথে জেমিনি লাইভ এপিআই সংযুক্ত করুন।
আরও এক ধাপ এগিয়ে যেতে, আপনি ফাংশন কলিং ব্যবহার করে মডেলটিকে আপনার অ্যাপের লজিকের সাথে সরাসরি যোগাযোগ করার সুযোগও দিতে পারেন।
ফাংশন কলিং (বা টুল কলিং) হলো জেনারেটিভ এআই বাস্তবায়নের একটি বৈশিষ্ট্য, যা মডেলকে নিজস্ব উদ্যোগে বিভিন্ন কাজ সম্পাদনের জন্য ফাংশন কল করার সুযোগ দেয়। যদি ফাংশনটির কোনো আউটপুট থাকে, তবে মডেলটি সেটিকে তার কনটেক্সটে যুক্ত করে এবং পরবর্তী জেনারেশনগুলোর জন্য ব্যবহার করে।
আপনার অ্যাপে ফাংশন কলিং বাস্তবায়ন করতে, প্রথমে মডেলের কাছে প্রকাশ করতে চান এমন প্রতিটি ফাংশনের জন্য একটি FunctionDeclaration অবজেক্ট তৈরি করুন।
উদাহরণস্বরূপ, জেমিনিতে স্ট্রিং-এর একটি তালিকায় একটি স্ট্রিং যুক্ত করার জন্য একটি addList ফাংশন প্রকাশ করতে, প্রথমে একটি FunctionDeclaration ভেরিয়েবল তৈরি করুন। এতে একটি নাম এবং ফাংশন ও তার প্যারামিটারের একটি সংক্ষিপ্ত বিবরণ সহজ ইংরেজিতে লিখুন:
কোটলিন
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"));
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 হিসেবে পাস করুন:
কোটলিন
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()
.setResponseModalities(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR")))
.build(),
List.of(Tool.functionDeclarations(List.of(addListFunctionDeclaration))),
null,
systemInstruction
);
অবশেষে, মডেলের করা টুল কলটি পরিচালনা করতে এবং প্রতিক্রিয়াটি ফেরত পাঠাতে একটি হ্যান্ডলার ফাংশন প্রয়োগ করুন। startAudioConversation কল করার সময় LiveSession এ সরবরাহ করা এই হ্যান্ডলার ফাংশনটি একটি FunctionCallPart প্যারামিটার গ্রহণ করে এবং FunctionResponsePart রিটার্ন করে:
কোটলিন
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());
পরবর্তী পদক্ষেপ
- অ্যান্ড্রয়েড এআই ক্যাটালগ স্যাম্পল অ্যাপে জেমিনি লাইভ এপিআই নিয়ে পরীক্ষা-নিরীক্ষা করুন।
- Firebase AI Logic ডকুমেন্টেশনে Gemini Live API সম্পর্কে আরও পড়ুন।
- উপলব্ধ জেমিনি মডেলগুলো সম্পর্কে আরও জানুন।
- ফাংশন কলিং সম্পর্কে আরও জানুন।
- দ্রুত ডিজাইন কৌশলসমূহ অন্বেষণ করুন।