Android অ্যাপে হাইব্রিড অভিজ্ঞতার জন্য স্ট্রাকচার্ড আউটপুট তৈরি করা


Gemini মডেল ডিফল্ট হিসেবে উত্তরকে আনস্ট্রাকচার্ড টেক্সট হিসেবে রিটার্ন করে। তবে, কিছু ব্যবহারের ক্ষেত্রে স্ট্রাকচার্ড টেক্সট (যেমন JSON বা enum) প্রয়োজন। যেমন, আপনি হয়ত অন্যান্য ডাউনস্ট্রিম টাস্কের জন্য উত্তর ব্যবহার করছেন যার জন্য প্রতিষ্ঠিত ডেটা স্কিমা প্রয়োজন।

মডেলের জেনারেট করা আউটপুট যাতে সবসময় একটি নির্দিষ্ট স্কিমা মেনে চলে তা নিশ্চিত করতে, আপনি একটি স্কিমা নির্ধারণ করতে পারেন, যা মডেলের উত্তরের ব্লুপ্রিন্ট হিসেবে কাজ করে। আপনি তারপরে সরাসরি মডেলের আউটপুট থেকে ডেটা এক্সট্র্যাক্ট করতে পারবেন, এর জন্য কম পোস্ট-প্রসেসিংয়ের প্রয়োজন হবে।

এখানে ব্যবহারের কিছু উদাহরণ দেওয়া হল:

  • নিশ্চিত করুন যে মডেলের দেওয়া উত্তরে সঠিক JSON আছে এবং সেটি আপনার দেওয়া স্কিমা মেনে চলছে।
    যেমন, মডেলটি রেসিপির জন্য স্ট্রাকচার্ড এন্ট্রি তৈরি করতে পারে যেগুলিতে সবসময় রেসিপির নাম, উপকরণের তালিকা ও ধাপ অন্তর্ভুক্ত থাকে। এরপরে আপনি আরও সহজে এই তথ্য পার্স করতে এবং আপনার অ্যাপের UI-তে দেখাতে পারবেন।

  • শ্রেণীবদ্ধকরণ টাস্ক চলাকালীন মডেল কীভাবে উত্তর দিতে পারে তা সীমিত করুন।
    যেমন, মডেলের তৈরি করা লেবেলের (যেগুলি good, positive, negative বা bad-এর মতো পরিবর্তনশীল হতে পারে) পরিবর্তে, আপনি মডেলকে নির্দিষ্ট লেবেলের সেট (যেমন, positive এবং negative-এর মতো নির্দিষ্ট এনুমের সেট) দিয়ে টেক্সট অ্যানোটেট করতে পারেন।

Android অ্যাপের জন্য আপনার হাইব্রিড অভিজ্ঞতায় কীভাবে স্ট্রাকচার্ড আউটপুট (যেমন JSON ও enum) জেনারেট করতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে।

JSON আউটপুটে যান এনুম আউটপুটে যান

স্ট্রাকচার্ড আউটপুটের জন্য কনফিগারেশন

ডিভাইসে এবং ক্লাউড-হোস্টেড ইনফারেন্স, দু'টির ক্ষেত্রেই স্ট্রাকচার্ড আউটপুট (যেমন JSON ও enum) তৈরি করা যায়।

স্ট্রাকচার্ড আউটপুট তৈরি করতে, আপনার স্কিমা সরাসরি generateObject()-এ পাস করুন। আপনার কনফিগার করা ইনফারেন্স মোডের উপর স্কিমা সংক্রান্ত প্রয়োজনীয়তা নির্ভর করে:

  • ডিভাইসে এবং হাইব্রিড ইনফারেন্সের জন্য (ONLY_ON_DEVICE, PREFER_ON_DEVICE, এবং PREFER_IN_CLOUD):

    • KSP প্রসেসর সহ Kotlin data class-এ @Generable অ্যানোটেশন ব্যবহার করতে হবে; ম্যানুয়াল স্কিমা ও সরাসরি enum class অ্যানোটেশন কাজ করে না।
    • ইনফারেন্স অন-ডিভাইস রান করলে, SDK অটোমেটিক স্কিমা অন-ডিভাইস মডেলের জন্য সীমাবদ্ধতায় (ML Kit Prompt API ব্যবহার করে) ট্রান্সলেট করে।
    • হাইব্রিড অনুরোধ ক্লাউড ইনফারেন্সে ফল ব্যাক করলে, SDK অটোমেটিক responseMimeType-এর মান application/json হিসেবে সেট করে এবং ক্লাউড-হোস্ট করা Gemini মডেলকে স্কিমা পাস করে।
  • শুধুমাত্র ক্লাউড-ভিত্তিক ইনফারেন্সের জন্য (ONLY_IN_CLOUD):

    • @Generable অ্যানোটেশন (সাজেস্ট করা) ও ম্যানুয়াল স্কিমা (JsonSchema হেল্পার পদ্ধতি ব্যবহার করে তৈরি করা) দু'টিই কাজ করে।
    • SDK অটোমেটিক responseMimeType-কে application/json হিসেবে সেট করে এবং ক্লাউড-হোস্ট করা Gemini মডেলে স্কিমা পাস করে।

শুরু করার আগে

এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট ও কোড দেখতে আপনার Gemini API প্রদানকারীর আইকনে ক্লিক করুন।

স্ট্রাকচার্ড আউটপুট জেনারেট করার আগে, নিশ্চিত করুন যে আপনি নিম্নলিখিত সেট-আপ সম্পূর্ণ করেছেন:

  1. হাইব্রিড অভিজ্ঞতা তৈরি করার জন্য শুরু করার গাইড সম্পূর্ণ করুন, যার মধ্যে আপনার Firebase প্রোজেক্ট সেট-আপ করা, ডিভাইসে মডেল ডাউনলোড করা এবং App Check কনফিগার করা অন্তর্ভুক্ত।

  2. Kotlin Symbol Processing (KSP) প্লাগ-ইন কনফিগার করুন এবং আপনার অ্যাপে Firebase AI KSP ডিপেন্ডেন্সি যোগ করুন।

    আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে (যেমন <project>/<app-module>/build.gradle.kts), KSP প্লাগ-ইন, Kotlin Serialization প্লাগ-ইন এবং প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন:

    plugins {
       // ... other plugins
       id("com.google.gms.google-services")
       id("com.google.devtools.ksp") version "LATEST_VERSION"
       id("org.jetbrains.kotlin.plugin.serialization") version "LATEST_VERSION"
    }
    
    dependencies {
       // ... other androidx dependencies
    
       // Add the dependencies for the Firebase AI Logic and App Check libraries.
       implementation("com.google.firebase:firebase-ai:18.0.0")
       implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta06")
       implementation("com.google.firebase:firebase-appcheck-debug:20.0.0")
    
       // Add the Firebase AI KSP processor for schema generation.
       ksp("com.google.firebase:firebase-ai-ksp-processor:17.0.0")
    
       // (Optional) Add kotlinx.serialization JSON library for object decoding.
       implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:LATEST_VERSION")
    }


JSON আউটপুটে যান এনুম আউটপুটে যান

JSON আউটপুট

হাইব্রিড ইনফারেন্স (যেমন, PREFER_ON_DEVICE)-এর জন্য উপযুক্ত করে তুলতে, নিম্নলিখিত উদাহরণগুলি সাধারণ JSON আউটপুট উদাহরণ থেকে নেওয়া হয়েছে।

এইসব উদাহরণের ক্ষেত্রে, মডেলটি একটি কাল্পনিক গল্পের জন্য চরিত্রের প্রোফাইলের একটি তালিকা তৈরি করে, যার মধ্যে নাম, বয়স, প্রজাতি এবং ঐচ্ছিক অ্যাক্সেসরির মতো স্ট্রাকচার্ড অ্যাট্রিবিউট থাকে।

আপনি নিম্নলিখিত পদ্ধতিগুলির যেকোনও একটি ব্যবহার করে আপনার উত্তরের স্কিমা নির্ধারণ করতে পারেন: পদ্ধতি:

  • KSP অ্যানোটেশন (@Generable ও @Guide)

    • সব ইনফারেন্স মোডের জন্য কাজ করে এবং অন-ডিভাইস ও হাইব্রিড ইনফারেন্সের জন্য প্রয়োজনীয় (বিশেষত, ONLY_ON_DEVICE, PREFER_ON_DEVICE ও PREFER_IN_CLOUD)।
    • কম্পাইল টাইমে অটোমেটিক স্কিমা জেনারেট করতে Kotlin ডেটা ক্লাস নির্ধারণ করুন এবং getObject() ব্যবহার করে সরাসরি স্ট্রংলি-টাইপ করা অবজেক্টে উত্তর ডিসেরিয়ালাইজ করুন।
  • ম্যানুয়াল JsonSchema হেল্পার পদ্ধতি

    • ক্লাউড-ভিত্তিক ইনফারেন্সের (বিশেষত, ONLY_IN_CLOUD) জন্য শুধুমাত্র কাজ করে।
    • KSP প্রসেসর ব্যবহার না করে কোডে ম্যানুয়ালি JsonSchema তৈরি করুন এবং response.response.text থেকে কাঁচা JSON স্ট্রিং পড়ুন।

উদাহরণ ১: KSP-এর সাথে @Generable ও @Guide অ্যানোটেশন ব্যবহার করা

@Serializable ও @Generable সহ Kotlin data class নির্দিষ্ট করুন। মডেলকে বিবরণ, ভ্যালু বাউন্ড বা আইটেম সীমাবদ্ধতা প্রদান করতে প্রপার্টিতে @Guide অ্যানোটেশন ব্যবহার করুন।

এই পদ্ধতি সব ইনফারেন্স মোডের জন্য কাজ করে এবং এটি অন-ডিভাইস ও হাইব্রিড অভিজ্ঞতার (বিশেষত, ONLY_ON_DEVICE, PREFER_ON_DEVICE ও PREFER_IN_CLOUD) জন্য প্রয়োজনীয়।

এই নমুনা চেষ্টা করার আগে, আপনার প্রজেক্ট ও অ্যাপ সেট-আপ করতে এই গাইডের শুরু করার আগে বিভাগটি সম্পূর্ণ করুন।
সেই বিভাগে, আপনার বেছে নেওয়া Gemini API প্রদানকারীর জন্য একটি বোতামেও ক্লিক করবেন যাতে আপনি এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট দেখতে পান।

Kotlin-এর জন্য, এই SDK-এর পদ্ধতিগুলি হল সাসপেন্ড ফাংশন এবং এগুলিকে করুটিন স্কোপ থেকে কল করতে হবে।
import com.google.firebase.Firebase
import com.google.firebase.ai.type.GenerativeBackend
import com.google.firebase.ai.InferenceMode
import com.google.firebase.ai.OnDeviceConfig
import com.google.firebase.ai.annotations.Generable
import com.google.firebase.ai.annotations.Guide
import com.google.firebase.ai.ai
import kotlinx.serialization.Serializable

// Define data classes representing the schema, annotated with @Serializable and @Generable.
// You can provide descriptions on @Generable and @Guide to guide the model's output.
@Serializable
@Generable(description = "A character profile for a fantasy story")
data class Character(
    val name: String,
    val age: Int,
    val species: String,
    // Use @Guide to add property descriptions, value bounds (minimum/maximum), or formats.
    // Properties with default values or nullable types are treated as optional in the schema.
    @Guide(description = "An accessory the character wears or carries")
    val accessory: String? = null
) {
    // An empty companion object is required for KSP to generate the firebaseAISchema() extension.
    companion object
}

@Serializable
@Generable(description = "A list of character profiles")
data class CharacterList(
    // Use minItems or maxItems to specify collection size bounds for the model.
    @Guide(description = "List of characters", minItems = 1)
    val characters: List<Character>
) {
    // An empty companion object is required for KSP to generate the firebaseAISchema() extension.
    companion object
}

// Initialize the Gemini Developer API backend service.
// Create a GenerativeModel instance configured for hybrid inference (like PREFER_ON_DEVICE).
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.INFERENCE_MODE)
    )

// Obtain the schema generated by KSP via the firebaseAISchema() extension.
val schema = CharacterList.firebaseAISchema()
val prompt = "Create profiles for some characters for a fantasy story."

// Generate the structured object (the SDK applies the schema to on-device or cloud models).
val response = model.generateObject(schema, prompt)

// Access the strongly-typed deserialized object directly via getObject().
val characterList: CharacterList? = response.getObject()
characterList?.characters?.forEach { character ->
    println("Name: ${character.name}, Species: ${character.species}, Age: ${character.age}")
    println("Accessory: ${character.accessory ?: "None"}")
}

উদাহরণ ২: ম্যানুয়াল JsonSchema হেল্পার পদ্ধতি ব্যবহার করা

আপনার অ্যাপ শুধুমাত্র ক্লাউড-ভিত্তিক ইনফারেন্স (বিশেষত, ONLY_IN_CLOUD) ব্যবহার করলে, আপনি Firebase AI Logic SDK-এর দেওয়া হেল্পার পদ্ধতি ব্যবহার করে ম্যানুয়ালি JsonSchema তৈরি করতে পারবেন।

এই নমুনা চেষ্টা করার আগে, আপনার প্রজেক্ট ও অ্যাপ সেট-আপ করতে এই গাইডের শুরু করার আগে বিভাগটি সম্পূর্ণ করুন।
সেই বিভাগে, আপনার বেছে নেওয়া Gemini API প্রদানকারীর জন্য একটি বোতামেও ক্লিক করবেন যাতে আপনি এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট দেখতে পান।

Kotlin-এর জন্য, এই SDK-এর পদ্ধতিগুলি হল সাসপেন্ড ফাংশন এবং এগুলিকে করুটিন স্কোপ থেকে কল করতে হবে।
import com.google.firebase.Firebase
import com.google.firebase.ai.type.GenerativeBackend
import com.google.firebase.ai.InferenceMode
import com.google.firebase.ai.OnDeviceConfig
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.JsonSchema

// Define the schema manually using JsonSchema helper methods.
// Properties are required by default unless specified in optionalProperties.
val jsonSchema = JsonSchema.obj(
    properties = mapOf(
        "characters" to JsonSchema.array(
            items = JsonSchema.obj(
                properties = mapOf(
                    "name" to JsonSchema.string(),
                    "accessory" to JsonSchema.string(),
                    "age" to JsonSchema.integer(),
                    "species" to JsonSchema.string()
                ),
                optionalProperties = listOf("accessory")
            )
        )
    )
)

// Initialize the Gemini Developer API backend service.
// Manual schemas are only supported for cloud-based inference (specifically, ONLY_IN_CLOUD).
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.ONLY_IN_CLOUD)
    )

// Call generateObject() with the manual schema and prompt.
val response = model.generateObject(
    jsonSchema,
    "Create profiles for some characters for a fantasy story."
)

// Access the generated JSON string conforming to the schema from response.response.text.
println(response.response.text)

Enum আউটপুট

নিম্নলিখিত উদাহরণগুলি হাইব্রিড ইনফারেন্স (যেমন, PREFER_ON_DEVICE)-কে জায়গা করে দিতে সাধারণ এনুম আউটপুট উদাহরণ অ্যাডাপ্ট করে।

এইসব উদাহরণের ক্ষেত্রে, মডেলটি অনুমোদিত বিকল্পের পূর্বনির্ধারিত তালিকা থেকে একটি জনরা বেছে নিয়ে (drama, comedy, বা documentary) কোনও ফিল্মের বিবরণকে শ্রেণীবদ্ধ করে।

আপনি নিম্নলিখিত পদ্ধতিগুলির যেকোনও একটি ব্যবহার করে আপনার উত্তরের স্কিমা নির্ধারণ করতে পারেন: পদ্ধতি:

  • KSP অ্যানোটেশন (@Generable)

    • সব ইনফারেন্স মোডের জন্য কাজ করে এবং অন-ডিভাইস ও হাইব্রিড ইনফারেন্সের জন্য প্রয়োজনীয় (বিশেষত, ONLY_ON_DEVICE, PREFER_ON_DEVICE ও PREFER_IN_CLOUD)।
    • getObject() ব্যবহার করে স্কিমা অটোমেটিক জেনারেট করতে এবং সরাসরি স্ট্রংলি-টাইপ করা অবজেক্টে উত্তর ডিসিরিয়ালাইজ করতে, Kotlin data class-এ মোড়ানো একটি এনুম সংজ্ঞায়িত করুন।
  • ম্যানুয়াল JsonSchema হেল্পার পদ্ধতি

    • ক্লাউড-ভিত্তিক ইনফারেন্সের (বিশেষত, ONLY_IN_CLOUD) জন্য শুধুমাত্র কাজ করে।
    • KSP প্রসেসর ব্যবহার না করে JsonSchema JsonSchema.enumeration() ব্যবহার করে ম্যানুয়ালি একটি enum তৈরি করুন এবং response.response.text থেকে বেছে নেওয়া স্ট্রিংটি পড়ুন।

উদাহরণ ১: KSP-এর সাথে @Generable অ্যানোটেশন ব্যবহার করা

অনুমোদিত মানগুলি বোঝানোর জন্য একটি enum class নির্ধারণ করুন এবং এটিকে @Serializable ও @Generable দিয়ে অ্যানোটেশন করা Kotlin data class-এর মধ্যে প্রপার্টি হিসেবে র‍্যাপ করুন।

এই পদ্ধতি সব ইনফারেন্স মোডের জন্য কাজ করে এবং এটি অন-ডিভাইস ও হাইব্রিড অভিজ্ঞতার (বিশেষত, ONLY_ON_DEVICE, PREFER_ON_DEVICE ও PREFER_IN_CLOUD) জন্য প্রয়োজনীয়।

এই নমুনা চেষ্টা করার আগে, আপনার প্রজেক্ট ও অ্যাপ সেট-আপ করতে এই গাইডের শুরু করার আগে বিভাগটি সম্পূর্ণ করুন।
সেই বিভাগে, আপনার বেছে নেওয়া Gemini API প্রদানকারীর জন্য একটি বোতামেও ক্লিক করবেন যাতে আপনি এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট দেখতে পান।

Kotlin-এর জন্য, এই SDK-এর পদ্ধতিগুলি হল সাসপেন্ড ফাংশন এবং এগুলিকে করুটিন স্কোপ থেকে কল করতে হবে।
import com.google.firebase.Firebase
import com.google.firebase.ai.type.GenerativeBackend
import com.google.firebase.ai.InferenceMode
import com.google.firebase.ai.OnDeviceConfig
import com.google.firebase.ai.annotations.Generable
import com.google.firebase.ai.annotations.Guide
import com.google.firebase.ai.ai
import kotlinx.serialization.Serializable

// Define an enum class representing the allowed options.
@Serializable
enum class FilmGenre {
    DRAMA,
    COMEDY,
    DOCUMENTARY
}

// Wrap the enum in a data class annotated with @Serializable and @Generable.
// On-device inference requires an @Generable data class.
// Direct enum annotations are not supported on-device.
@Serializable
@Generable(description = "The classification result for the film")
data class FilmClassification(
    @Guide(description = "The genre of the film")
    val genre: FilmGenre
) {
    // An empty companion object is required for KSP to generate the firebaseAISchema() extension.
    companion object
}

// Initialize the Gemini Developer API backend service.
// Create a GenerativeModel instance configured for hybrid inference (like PREFER_ON_DEVICE).
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.INFERENCE_MODE)
    )

// Obtain the schema generated by KSP via the firebaseAISchema() extension.
val schema = FilmClassification.firebaseAISchema()
val prompt = """
    The film aims to educate and inform viewers about real-life subjects, events, or people.
    It offers a factual record of a particular topic by combining interviews, historical footage,
    and narration. The primary purpose of a film is to present information and provide insights
    into various aspects of reality.
    """

// Generate the structured object (the SDK applies the schema to on-device or cloud models).
val response = model.generateObject(schema, prompt)

// Access the strongly-typed deserialized object and enum value directly via getObject().
val classification: FilmClassification? = response.getObject()
val genre: FilmGenre? = classification?.genre
println("Selected genre: $genre")

উদাহরণ ২: ম্যানুয়াল JsonSchema হেল্পার পদ্ধতি ব্যবহার করা

আপনার অ্যাপ যদি শুধুমাত্র ক্লাউড-ভিত্তিক ইনফারেন্স (বিশেষত, ONLY_IN_CLOUD) ব্যবহার করে, তাহলে আপনি Firebase AI Logic SDK-এর দেওয়া হেল্পার পদ্ধতি ব্যবহার করে ম্যানুয়ালি একটি এনুম JsonSchema তৈরি করতে পারবেন।

এই নমুনা চেষ্টা করার আগে, আপনার প্রজেক্ট ও অ্যাপ সেট-আপ করতে এই গাইডের শুরু করার আগে বিভাগটি সম্পূর্ণ করুন।
সেই বিভাগে, আপনার বেছে নেওয়া Gemini API প্রদানকারীর জন্য একটি বোতামেও ক্লিক করবেন যাতে আপনি এই পৃষ্ঠায় প্রদানকারী-নির্দিষ্ট কন্টেন্ট দেখতে পান।

Kotlin-এর জন্য, এই SDK-এর পদ্ধতিগুলি হল সাসপেন্ড ফাংশন এবং এগুলিকে করুটিন স্কোপ থেকে কল করতে হবে।
import com.google.firebase.Firebase
import com.google.firebase.ai.type.GenerativeBackend
import com.google.firebase.ai.InferenceMode
import com.google.firebase.ai.OnDeviceConfig
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.JsonSchema

// Define an enum schema with allowed string values and a description.
val enumSchema = JsonSchema.enumeration(
    values = listOf("drama", "comedy", "documentary"),
    description = "The genre of the film"
)

// Initialize the Gemini Developer API backend service.
// Manual schemas are only supported for cloud-based inference (specifically, ONLY_IN_CLOUD).
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.ONLY_IN_CLOUD)
    )

val prompt = """
    The film aims to educate and inform viewers about real-life subjects, events, or people.
    It offers a factual record of a particular topic by combining interviews, historical footage,
    and narration. The primary purpose of a film is to present information and provide insights
    into various aspects of reality.
    """

// Call generateObject() with the enum schema and prompt.
val response = model.generateObject(enumSchema, prompt)

// Access the selected enum value string from response.response.text.
println(response.response.text)


Firebase AI Logic-এর সাথে আপনার অভিজ্ঞতা সম্পর্কে মতামত জানান


অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।

2026-10-09 UTC-তে শেষবার আপডেট করা হয়েছে।