Gemini modelleri, yanıtları varsayılan olarak yapılandırılmamış metin şeklinde döndürür. Ancak bazı kullanım alanları, yapılandırılmış metin (ör. JSON veya enums) gerektirir. Örneğin, yanıtı, yerleşik bir veri şeması gerektiren diğer sonraki görevlerde kullanıyor olabilirsiniz.
Modelin oluşturduğu çıkışın her zaman belirli bir şemaya uymasını sağlamak için model yanıtları için bir plan gibi çalışan bir şema tanımlayabilirsiniz. Ardından, modelin çıkışından verileri daha az son işlemeyle doğrudan ayıklayabilirsiniz.
Kullanım alanlarına dair bazı örnekler:
Modelin yanıtının geçerli JSON oluşturduğundan ve sağladığınız şemaya uygun olduğundan emin olun.
Örneğin, model her zaman tarif adını, malzeme listesini ve adımları içeren tarifler için yapılandırılmış girişler oluşturabilir. Ardından bu bilgileri uygulamanızın kullanıcı arayüzünde daha kolay ayrıştırıp görüntüleyebilirsiniz.Sınıflandırma görevleri sırasında modelin nasıl yanıt verebileceğini kısıtlayın.
Örneğin, modelin ürettiği etiketler (good,positive,negativeveyabadgibi bir dereceye kadar değişkenlik gösterebilir) yerine, modelin metni belirli bir etiket grubuyla (örneğin,positivevenegativegibi belirli bir enum grubu) açıklamasını sağlayabilirsiniz.
Bu sayfada, Android uygulamaları için hibrit deneyimlerinizde nasıl yapılandırılmış çıkış (ör. JSON ve enums) oluşturacağınız açıklanmaktadır.
JSON çıkışına git Enum çıkışına git
Yapılandırılmış çıkış için yapılandırma
Yapılandırılmış çıkış (ör. JSON ve enum) oluşturma hem cihaz üzerinde hem de bulutta barındırılan çıkarım için desteklenir.
Yapılandırılmış çıkış oluşturmak için şemanızı doğrudan generateObject()'ye iletin.
Şema gereksinimleri, yapılandırdığınız çıkarım moduna bağlıdır:
Cihaz üzerinde ve karma çıkarım için (
ONLY_ON_DEVICE,PREFER_ON_DEVICEvePREFER_IN_CLOUD):- KSP işleyicisiyle Kotlin
data classüzerinde@Generableek açıklamasının kullanılması gerekir. Manuel şemalar ve doğrudanenum classek açıklamaları desteklenmez. - Çıkarım cihaz üzerinde çalıştırıldığında SDK, şemayı otomatik olarak cihaz üzerindeki modelin kısıtlamalarına çevirir (ML Kit Prompt API'yi kullanarak).
- Hibrit istek bulut çıkarımına geri dönerse SDK,
responseMimeTypedeğerini otomatik olarakapplication/jsonolarak ayarlar ve şemayı bulutta barındırılan Gemini modeline iletir.
- KSP işleyicisiyle Kotlin
Yalnızca bulutta çıkarım için (
ONLY_IN_CLOUD):- Hem
@Generableek açıklamaları (önerilir) hem de manuel şemaları (JsonSchemayardımcı yöntemleri kullanılarak oluşturulur) destekler. - SDK,
responseMimeTypedeğerini otomatik olarakapplication/jsonolarak ayarlar ve şemayı bulutta barındırılan Gemini modeline iletir.
- Hem
Başlamadan önce
|
Sağlayıcıya özel içeriği ve kodu bu sayfada görüntülemek için Gemini API sağlayıcınızı tıklayın. |
Yapılandırılmış çıkış oluşturmadan önce aşağıdaki kurulumu tamamladığınızdan emin olun:
Firebase projenizi ayarlama, cihaz üzerinde modeli indirme ve App Check yapılandırma gibi konuları kapsayan karma deneyimler oluşturmaya yönelik başlangıç kılavuzunu tamamlayın.
Kotlin Symbol Processing (KSP) eklentisini yapılandırın ve uygulamanıza Firebase AI KSP bağımlılığını ekleyin.
Modülünüzde (uygulama düzeyinde) Gradle dosyası (ör.
<project>/<app-module>/build.gradle.kts) KSP eklentisini, Kotlin Serialization eklentisini ve gerekli bağımlılıkları ekleyin: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:17.17.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta05") implementation("com.google.firebase:firebase-appcheck-debug:19.4.1") // Add the Firebase AI KSP processor for schema generation. ksp("com.google.firebase:firebase-ai-ksp-processor:16.0.2") // (Optional) Add kotlinx.serialization JSON library for object decoding. implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:LATEST_VERSION") }
JSON çıkışına git Enum çıkışına git
JSON çıkışı
Aşağıdaki örneklerde, genel JSON çıkışı örneği, hibrit çıkarımı (örneğin, PREFER_ON_DEVICE) destekleyecek şekilde uyarlanmıştır.
Bu örneklerdeki senaryoda model, bir fantezi hikayesi için karakter profillerinin listesini oluşturur. Bu listede ad, yaş, tür ve isteğe bağlı aksesuarlar gibi yapılandırılmış özellikler yer alır.
Yanıt şemalarınızı aşağıdaki yaklaşımlardan birini kullanarak tanımlayabilirsiniz:
TSN ek açıklamaları (
@Generableve@Guide)- Tüm çıkarım modlarında desteklenir ve cihaz üzerinde ve karma çıkarım için gereklidir (özellikle
ONLY_ON_DEVICE,PREFER_ON_DEVICEvePREFER_IN_CLOUD). - Derleme zamanında şemaları otomatik olarak oluşturmak için Kotlin veri sınıflarını tanımlayın ve
getObject()kullanarak yanıtları doğrudan kesin türü belirlenmiş nesnelere seri durumdan çıkarma.
- Tüm çıkarım modlarında desteklenir ve cihaz üzerinde ve karma çıkarım için gereklidir (özellikle
Manuel
JsonSchemayardımcı yöntemler- Yalnızca bulut tabanlı çıkarım (özellikle
ONLY_IN_CLOUD) için desteklenir. - KSP işlemcisini kullanmadan kodda manuel olarak bir
JsonSchemaoluşturun veresponse.response.text'den ham JSON dizesini okuyun.
- Yalnızca bulut tabanlı çıkarım (özellikle
1. örnek: KSP ile @Generable ve @Guide ek açıklamalarını kullanma
@Serializable ve @Generable ile ek açıklama eklenmiş bir Kotlin data class tanımlayın.
Modele açıklamalar, değer sınırları veya öğe kısıtlamaları sağlamak için özelliklerde @Guide ek açıklamalarını kullanın.
Bu yaklaşım tüm çıkarım modlarında desteklenir ve cihaz üzerinde ile karma deneyimler (özellikle ONLY_ON_DEVICE, PREFER_ON_DEVICE ve PREFER_IN_CLOUD) için zorunludur.
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
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"}")
}
2. örnek: Manuel JsonSchema yardımcı yöntemlerini kullanma
Uygulamanız yalnızca bulut tabanlı çıkarım (özellikle,
ONLY_IN_CLOUD) kullanıyorsa Firebase AI Logic SDK'sının sağladığı yardımcı yöntemleri kullanarak JsonSchema öğesini manuel olarak oluşturabilirsiniz.
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
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 çıkışı
Aşağıdaki örneklerde, karma çıkarımı (örneğin, PREFER_ON_DEVICE) desteklemek için genel enum çıkış örneği uyarlanmıştır.
Bu örneklerdeki senaryoda model, izin verilen seçeneklerin önceden tanımlanmış listesinden (drama, comedy veya documentary) tek bir tür seçerek film açıklamasını sınıflandırır.
Yanıt şemalarınızı aşağıdaki yaklaşımlardan birini kullanarak tanımlayabilirsiniz:
TSN ek açıklamaları (
@Generable)- Tüm çıkarım modlarında desteklenir ve cihaz üzerinde ve karma çıkarım için gereklidir (özellikle
ONLY_ON_DEVICE,PREFER_ON_DEVICEvePREFER_IN_CLOUD). - Şemayı otomatik olarak oluşturmak ve yanıtları
getObject()kullanarak doğrudan kesin türü belirlenmiş nesnelere seri durumdan çıkarma için Kotlindata classile sarmalanmış bir enum tanımlayın.
- Tüm çıkarım modlarında desteklenir ve cihaz üzerinde ve karma çıkarım için gereklidir (özellikle
Manuel
JsonSchemayardımcı yöntemler- Yalnızca bulut tabanlı çıkarım (özellikle
ONLY_IN_CLOUD) için desteklenir. - KSP işlemcisini kullanmadan
JsonSchemakullanarakJsonSchema.enumeration()ile bir enum'ı manuel olarak oluşturun ve seçilen dizeyiresponse.response.text'den okuyun.
- Yalnızca bulut tabanlı çıkarım (özellikle
1. örnek: KSP ile @Generable ek açıklamalarını kullanma
İzin verilen değerleri temsil eden bir enum class tanımlayın ve bunu @Serializable ve @Generable ile ek açıklama eklenmiş bir Kotlin data class içinde özellik olarak sarmalayın.
Bu yaklaşım tüm çıkarım modlarında desteklenir ve cihaz üzerinde ile karma deneyimler (özellikle ONLY_ON_DEVICE, PREFER_ON_DEVICE ve PREFER_IN_CLOUD) için zorunludur.
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
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")
2. örnek: Manuel JsonSchema yardımcı yöntemlerini kullanma
Uygulamanız yalnızca bulut tabanlı çıkarım (özellikle,
ONLY_IN_CLOUD) kullanıyorsa Firebase AI Logic SDK'sının sağladığı yardımcı yöntemleri kullanarak bir enum'u JsonSchema manuel olarak oluşturabilirsiniz.
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
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 ile ilgili deneyiminiz hakkında geri bildirim verme