مدلهای Gemini بهطور پیشفرض پاسخها را بهصورت نوشتار بدون ساختار برمیگردانند. بااینحال، برخیاز موارد استفاده به نوشتار ساختاریافته (مانند JSON یا enums) نیاز دارند. برای مثال، ممکن است از پاسخ برای کارهای پاییندستی دیگری استفاده کنید که به طرحواره دادههای تثبیتشده نیاز دارند.
برای اطمینان از اینکه برونداد تولیدشده مدل همیشه از طرحواره خاصی پیروی میکند، میتوانید طرحوارهای تعریف کنید که مانند طرحی برای پاسخهای مدل عمل میکند. سپس میتوانید مستقیماً دادهها را از خروجی مدل با پسپردازش کمتر استخراج کنید.
در اینجا چند نمونه از موارد استفاده آورده شده است:
مطمئن شوید که پاسخ مدل JSON معتبر تولید میکند و با طرحواره ارائهشده شما مطابقت دارد.
برای مثال، مدل میتواند ورودیهای ساختاریافتهای برای دستورهای پخت تولید کند که همیشه شامل نام دستور پخت، فهرست مواد اولیه، و مراحل باشد. سپس میتوانید این اطلاعات را راحتتر در میانای کاربر برنامهتان تجزیه و نمایش دهید.محدود کردن نحوه پاسخ دادن مدل درطول تکالیف طبقهبندی.
برای مثال، میتوانید از مدل بخواهید نوشتار را با مجموعه خاصی از برچسبها (مثلاً مجموعه خاصی از شمارشها مانندpositiveوnegative) حاشیهنویسی کند، نه برچسبهایی که مدل تولید میکند (که ممکن است درجاتی از تنوع مانندgood،positive،negative، یاbadداشته باشند).
این صفحه نحوه تولید برونداد ساختاریافته (مانند JSON و شمارشیها) در تجربههای ترکیبی برای برنامههای Android را شرح میدهد.
پرش به برونداد JSON پرش به برونداد enum
پیکربندی برای خروجی ساختاریافته
تولید خروجی ساختاریافته (مانند JSON و enum) هم برای استنتاج دروندستگاهی و هم برای استنتاج میزبانیشده در فضای ابری پشتیبانی میشود.
برای تولید برونداد ساختاریافته، طرحوارهتان را مستقیماً به
generateObject() ارسال کنید.
الزامات طرحواره به حالت استنتاج پیکربندیشده شما بستگی دارد:
برای استنتاج ترکیبی و دروندستگاهی (
ONLY_ON_DEVICE،PREFER_ON_DEVICE، وPREFER_IN_CLOUD):- Requires using the
@Generableannotation on a Kotlindata classwith the KSP processor; manual schemas and directenum classannotations are not supported. - وقتی استنتاج در دستگاه اجرا میشود، کیت توسعه نرمافزار بهطور خودکار طرحواره را به محدودیتهایی برای مدل دروندستگاهی ترجمه میکند (بااستفاده از ML Kit Prompt API).
- اگر درخواست ترکیبی به استنتاج ابری برگردد، کیت توسعه نرمافزار بهطور خودکار
responseMimeTypeرا رویapplication/jsonتنظیم میکند و طرحواره را به مدل Gemini میزبانیشده در ابر ارسال میکند.
- Requires using the
برای استنتاج فقط ابری (
ONLY_IN_CLOUD):- از هر دو حاشیهنویسی
@Generable(توصیهشده) و طرحوارههای دستی (ساختهشده بااستفاده از روشهای کمکیJsonSchema) پشتیبانی میکند. - کیت توسعه نرمافزار بهطور خودکار
responseMimeTypeرا رویapplication/jsonتنظیم میکند و طرحواره را به مدل Gemini میزبانیشده در فضای ابری ارسال میکند.
- از هر دو حاشیهنویسی
قبل از شروع
|
روی ارائهدهنده Gemini API کلیک کنید تا محتوا و کد مختص ارائهدهنده را در این صفحه ببینید. |
قبلاز تولید برونداد ساختاریافته، مطمئن شوید که راهاندازی زیر را تکمیل کردهاید:
راهنمای شروع به کار برای ساختن تجربههای ترکیبی را تکمیل کنید. این راهنما شامل راهاندازی پروژه Firebase، بارگیری مدل دروندستگاهی، و پیکربندی App Check است.
افزونه 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.1.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta07") 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 پرش به برونداد enum
خروجی JSON
نمونههای زیر
نمونه خروجی JSON عمومی
را برای تطبیق با استنتاج ترکیبی (برای مثال، PREFER_ON_DEVICE) سازگار میکنند.
در سناریو این مثالها، مدل فهرستی از نمایههای شخصیت برای یک داستان فانتزی با مشخصههای ساختاریافته مانند نام، سن، گونه، و لوازم جانبی اختیاری تولید میکند.
میتوانید طرحوارههای پاسخ خود را بااستفاده از یکی از رویکردهای زیر تعریف کنید:
حاشیهنویسیهای نکته کلیدی فروش (
@Generableو@Guide)- برای همه حالتهای استنتاج پشتیبانی میشود و برای استنتاج دروندستگاهی و ترکیبی (بهطور خاص،
ONLY_ON_DEVICE،PREFER_ON_DEVICE، وPREFER_IN_CLOUD) الزامی است. - کلاسهای داده Kotlin را برای تولید خودکار طرحوارهها در زمان ترجمه تعریف کنید
و پاسخها را مستقیماً بااستفاده از
getObject()به اشیای با نوع قوی تبدیل کنید.
- برای همه حالتهای استنتاج پشتیبانی میشود و برای استنتاج دروندستگاهی و ترکیبی (بهطور خاص،
-
- فقط برای استنتاج ابری (بهطور خاص،
ONLY_IN_CLOUD) پشتیبانی میشود. - یک
JsonSchemaرا بهصورت دستی در کد بدون استفاده از پردازنده KSP بسازید، و رشته JSON خام را ازresponse.response.textبخوانید.
- فقط برای استنتاج ابری (بهطور خاص،
مثال ۱: استفاده از حاشیهنویسیهای @Generable و @Guide با KSP
یک data class Kotlin را که با @Serializable و @Generable حاشیهنویسی شده است تعریف کنید.
از حاشیهنویسیهای @Guide در ویژگیها استفاده کنید تا شرح،
محدوده مقدار، یا محدودیتهای مورد را به مدل ارائه دهید.
این رویکرد برای همه حالتهای استنتاج پشتیبانی میشود و برای تجربههای ترکیبی و دروندستگاهی (بهویژه ONLY_ON_DEVICE، PREFER_ON_DEVICE، و PREFER_IN_CLOUD) الزامی است.
|
قبلاز امتحان کردن این نمونه، بخش
قبلاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، همچنین روی دکمهای برای ارائهدهنده انتخابیتان Gemini API کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
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) استفاده میکند، میتوانید بهصورت دستی یک
JsonSchema
بااستفاده از روشهای کمکی ارائهشده توسط Firebase AI Logic SDK بسازید.
|
قبلاز امتحان کردن این نمونه، بخش
قبلاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، همچنین روی دکمهای برای ارائهدهنده انتخابیتان Gemini API کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
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) الزامی است. - یک enum پیچیدهشده در Kotlin
data classتعریف کنید تا بهطور خودکار طرحواره را تولید کند و پاسخها را مستقیماً بااستفاده ازgetObject()به اشیاء با نوع قوی تبدیل کند.
- برای همه حالتهای استنتاج پشتیبانی میشود و برای استنتاج دروندستگاهی و ترکیبی (بهطور خاص،
-
- فقط برای استنتاج ابری (بهطور خاص،
ONLY_IN_CLOUD) پشتیبانی میشود. - یک enum
JsonSchemaرا بهصورت دستی بااستفاده ازJsonSchema.enumeration()بدون استفاده از پردازنده KSP بسازید و رشته انتخابشده را ازresponse.response.textبخوانید.
- فقط برای استنتاج ابری (بهطور خاص،
مثال ۱: استفاده از حاشیهنویسیهای @Generable با KSP
یک enum class تعریف کنید که مقادیر مجاز را نشان دهد و آن را بهعنوان یک ویژگی در یک data class Kotlin با حاشیهنویسی @Serializable و @Generable قرار دهید.
این رویکرد برای همه حالتهای استنتاج پشتیبانی میشود و برای تجربههای دروندستگاهی و ترکیبی (بهویژه ONLY_ON_DEVICE، PREFER_ON_DEVICE، و PREFER_IN_CLOUD) الزامی است.
|
قبلاز امتحان کردن این نمونه، بخش
قبلاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، همچنین روی دکمهای برای ارائهدهنده انتخابیتان Gemini API کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
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) استفاده میکند، میتوانید بهصورت دستی یک enum
JsonSchema
بااستفاده از روشهای کمکی ارائهشده توسط Firebase AI Logic SDK بسازید.
|
قبلاز امتحان کردن این نمونه، بخش
قبلاز شروع این راهنما را تکمیل کنید
تا پروژه و برنامهتان را راهاندازی کنید. در آن بخش، همچنین روی دکمهای برای ارائهدهنده انتخابیتان Gemini API کلیک خواهید کرد تا محتوای مختص ارائهدهنده را در این صفحه ببینید. |
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 بازخورد ارائه دهید