Cihaz üzerinde ve bulutta barındırılan modellerle Android uygulamalarında karma deneyimler oluşturma


Firebase AI Logic kullanarak hibrit çıkarımla yapay zeka destekli Android uygulamaları ve özellikleri oluşturabilirsiniz. Karma çıkarım, varsa cihaz üzerinde modelleri kullanarak çıkarım yapmaya ve aksi takdirde sorunsuz bir şekilde bulutta barındırılan modellere geri dönmeye (veya tam tersi) olanak tanır.

Bu sayfada, istemci SDK'sını kullanmaya başlama ve sıcaklık gibi ek yapılandırma seçenekleri ve özellikler gösterilmektedir.

Firebase AI Logic aracılığıyla cihaz üzerinde çıkarımın, belirli cihazlarda çalışan Android uygulamalarında desteklendiğini ve ML Kit Şartları'nın yanı sıra ML Kit'in üretken yapay zeka yönleriyle ilgili şartlara tabi olduğunu unutmayın.

Önerilen kullanım alanları ve desteklenen özellikler

Önerilen kullanım alanları

  • Çıkarım için cihaz üzerinde model kullanmanın avantajları:

    • Gelişmiş gizlilik
    • Yerel bağlam
    • Ücretsiz çıkarım
    • Çevrimdışı işlevler
  • Karma işlevselliği kullanmanın avantajları:

    • Cihazdaki model kullanılabilirliğini ve internet bağlantısını destekleyerek kitlenizin daha büyük bir kısmına ulaşın

Cihaz üzerinde çıkarım için desteklenen özellikler

Cihaz üzerinde çıkarım yalnızca akışlı veya akışsız çıkışla tek dönüşlü metin oluşturmayı (sohbet değil) destekler. Aşağıdaki metin oluşturma özelliklerini destekler:

Bu sayfanın alt kısmındaki cihaz üzerinde çıkarım için henüz kullanılamayan özellikler listesini incelemeyi unutmayın.

Başlamadan önce

Aşağıdakileri göz önünde bulundurun:

Desteklenen Android cihazlar ve cihaz üzerindeki modelleri

Cihaz üzerinde çıkarım (ML Kit'in Prompt API'sini kullanır) için desteklenen cihazların ve cihaz üzerinde modellerinin listesini ML Kit dokümanlarında bulabilirsiniz.

Başlayın

Bu başlangıç adımlarında, göndermek istediğiniz desteklenen tüm istem istekleri için gerekli olan genel kurulum açıklanmaktadır.

1. adım: Firebase projesi oluşturun ve uygulamanızı Firebase'e bağlayın

  1. Firebase konsolunda oturum açın, ardından Firebase projenizi seçin.

  2. Firebase konsolunda Firebase AI Logic sayfasına gidin.

  3. Projeniz için gerekli API'leri ve kaynakları ayarlamanıza yardımcı olacak rehberli bir iş akışı başlatmak için Başlayın'ı tıklayın.

  4. Projenizi "Gemini API" sağlayıcı kullanacak şekilde ayarlayın.

    Gemini Developer API ile başlamanızı öneririz. Dilediğiniz zaman Vertex AI Gemini API (ve faturalandırma için gerekli olan) ayarlarını yapabilirsiniz.

    Konsol, Gemini Developer API için gerekli API'leri etkinleştirir ve projenizde Gemini API anahtarı oluşturur.
    Bu Gemini API anahtarını uygulamanızın kod tabanına eklemeyin. Daha fazla bilgi edinin.

  5. Konsolun iş akışında istenirse uygulamanızı kaydetmek ve Firebase'e bağlamak için ekrandaki talimatları uygulayın.

  6. SDK'yı uygulamanıza eklemek için bu kılavuzdaki sonraki adıma geçin.

2. adım: Gerekli SDK'ları ekleyin

Firebase AI Logic Android için SDK (firebase-ai) ve Firebase AI Logic On-Device SDK'sı (firebase-ai-ondevice), üretken modellerle etkileşim kurmaya yönelik API'lere erişim sağlar.

Modülünüzde (uygulama düzeyinde) Gradle dosyası (ör. <project>/<app-module>/build.gradle.kts) Android için Firebase AI Logic kitaplıklarının bağımlılıklarını ekleyin:

Kotlin

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.10.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")
}

Java

Java için iki ek kitaplık eklemeniz gerekir.

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.10.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

3. adım: Cihaz üzerinde modelin kullanılabilir olup olmadığını kontrol edin

FirebaseAIOnDevice kullanarak cihaz üzerinde modelin kullanılabilir olup olmadığını kontrol edin ve kullanılamıyorsa modeli indirin.

İndirildikten sonra AICore, modeli otomatik olarak güncel tutar. AICore ve cihazdaki model indirme işlemini yönetme hakkında daha fazla bilgi için snippet'in ardından gelen notlara göz atın.

Kotlin

val status = FirebaseAIOnDevice.checkStatus()
when (status) {
  OnDeviceModelStatus.UNAVAILABLE -> {
    Log.w(TAG, "On-device model is unavailable")
  }

  OnDeviceModelStatus.DOWNLOADABLE -> {
    FirebaseAIOnDevice.download().collect { status ->
      when (status) {
        is DownloadStatus.DownloadStarted ->
          Log.w(TAG, "Starting download - ${status.bytesToDownload}")

        is DownloadStatus.DownloadInProgress ->
          Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")

        is DownloadStatus.DownloadCompleted ->
          Log.w(TAG, "On-device model download complete")

        is DownloadStatus.DownloadFailed ->
          Log.e(TAG, "Download failed ${status}")
      }
    }
  }
  OnDeviceModelStatus.DOWNLOADING -> {
    Log.w(TAG, "On-device model is being downloaded")
  }

  OnDeviceModelStatus.AVAILABLE -> {
    Log.w(TAG, "On-device model is available")
  }
}

Java

Checking for and downloading the model is not yet available for Java.

However, all other APIs and interactions in this guide are available for Java.

Cihaz üzerinde modeli indirme hakkında aşağıdakileri unutmayın:

  • Cihaz üzerinde modeli indirme süresi, ağınız da dahil olmak üzere birçok faktöre bağlıdır.

  • Kodunuz, birincil veya yedek çıkarım için cihaz üzerinde bir model kullanıyorsa modelin, uygulamanızın yaşam döngüsünün başlarında indirildiğinden emin olun. Böylece, son kullanıcılarınız uygulamanızdaki kodla karşılaşmadan önce cihaz üzerinde model kullanılabilir.

  • Cihaz üzerinde çıkarım isteği yapıldığında cihaz üzerinde model kullanılamıyorsa SDK, cihaz üzerinde modelin indirilmesini otomatik olarak tetiklemez. SDK, bulutta barındırılan modele geri döner veya bir istisna oluşturur (çıkarım modlarının davranışı hakkında ayrıntılı bilgi edinin).

  • AICore (bir Android sistem hizmeti) hangi modelin ve sürümün indirildiğini sizin için yönetir, modeli güncel tutar vb. Cihazda yalnızca bir model indirileceğini unutmayın. Bu nedenle, cihazdaki başka bir uygulama daha önce cihaz üzerindeki modeli başarıyla indirdiyse bu kontrol, modelin kullanılabilir olduğunu gösterir.

Gecikme optimizasyonu

İlk çıkarım çağrısı için optimizasyon yapmak istiyorsanız uygulamanız warmup() işlevini çağırabilir. Bu işlem, cihaz üzerindeki modeli belleğe yükler ve çalışma zamanı bileşenlerini başlatır.

4. adım: Hizmeti başlatın ve model örneği oluşturun

Sağlayıcıya özel içerikleri ve kodu bu sayfada görüntülemek için Gemini API sağlayıcınızı tıklayın.

Modele istem isteği göndermeden önce aşağıdakileri ayarlayın.

  1. Seçtiğiniz API sağlayıcısı için hizmeti başlatın.

  2. GenerativeModel örneği oluşturun ve mode değerini aşağıdakilerden biri olarak ayarlayın. Buradaki açıklamalar çok üst düzeydir ancak bu modların davranışı hakkında ayrıntılı bilgiyi Çıkarım modu ayarlama bölümünde bulabilirsiniz.

    • PREFER_ON_DEVICE: Cihaz üzerinde modeli kullanmayı deneyin. Aksi takdirde bulutta barındırılan modele geri dönün.

    • ONLY_ON_DEVICE: Cihaz üzerinde modeli kullanmayı deneyin; aksi takdirde bir istisna oluşturun.

    • PREFER_IN_CLOUD: Bulutta barındırılan modeli kullanmayı deneyin; aksi takdirde cihazdaki modele geri dönün.

    • ONLY_IN_CLOUD: Cloud'da barındırılan modeli kullanmayı deneyin; aksi takdirde bir istisna oluşturun.

Kotlin

// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)

// ...

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
    )

Java

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        "MODEL_NAME",
        new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
    );

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

5. adım: Bir modele istem isteği gönderme

Bu bölümde, aşağıdakiler de dahil olmak üzere farklı türlerde çıkışlar oluşturmak için çeşitli giriş türlerini nasıl göndereceğiniz gösterilmektedir:

Yalnızca metin içeren girişlerden metin oluşturma

Bu örneği denemeden önce bu kılavuzun Başlarken bölümünü tamamladığınızdan emin olun.

Metin içeren bir istemden metin oluşturmak için generateContent() kullanabilirsiniz:

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."

// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
Content prompt = new Content.Builder()
    .addText("Write a story about a magic backpack.")
    .build();

// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Firebase AI Logic'nın, generateContentStream kullanarak metin yanıtlarının akışını da desteklediğini unutmayın (generateContent yerine).

Metin ve resim (çok formatlı) girişinden metin oluşturma

Bu örneği denemeden önce bu kılavuzun Başlarken bölümünü tamamladığınızdan emin olun.

Metin ve en fazla bir resim dosyası (yalnızca bitmap) içeren bir istemden metin oluşturmak için generateContent()'ı kullanabilirsiniz. Her giriş dosyasının mimeType ve dosyanın kendisi sağlanır.

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)

// Provide a prompt that includes the image specified above and text
val prompt = content {
  image(bitmap)
  text("What developer tool is this mascot from?")
}

// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Firebase AI Logic'nın, generateContentStream kullanarak metin yanıtlarının akışını da desteklediğini unutmayın (generateContent yerine).

Başka ne yapabilirsin?

Hibrit deneyimleriniz için çeşitli ek yapılandırma seçenekleri ve özelliklerinden yararlanabilirsiniz:

Cihaz üzerinde çıkarım için henüz kullanılamayan özellikler

Deneysel bir sürüm olduğundan, bulut modellerinin tüm özellikleri cihaz üzerinde çıkarım için kullanılamaz.

Bu bölümde listelenen özellikler henüz cihaz üzerinde çıkarım için kullanılamamaktadır. Bu özelliklerden herhangi birini kullanmak istiyorsanız daha tutarlı bir deneyim için ONLY_IN_CLOUD çıkarım modunu kullanmanızı öneririz.

  • Yapılandırılmış çıkış (ör. JSON veya enums) oluşturma

  • Bitmap dışındaki resim dosyası giriş türlerinden metin oluşturma (belleğe yüklenen resim)

  • Birden fazla resim dosyasından metin oluşturma

  • Ses, video ve doküman (ör. PDF) girişlerinden metin oluşturma

  • Gemini veya Imagen modellerini kullanarak resim oluşturma

  • Çok formatlı isteklerde URL'ler kullanarak dosya sağlama. Dosyaları, cihaz üzerindeki modellere satır içi veri olarak sağlamanız gerekir.

  • 4.000 jetonu (veya yaklaşık 3.000 İngilizce kelime) aşan istekler gönderme

  • Çok adımlı sohbet

  • Modele yanıtını oluşturmasına yardımcı olacak araçlar sağlama (ör. işlev çağırma, kod yürütme, URL bağlamı ve Google Arama ile temellendirme)

Firebase konsolundaki yapay zeka izleme özelliği, cihaz üzerinde çıkarım (cihaz üzerinde günlükler dahil) ile ilgili herhangi bir veri göstermez. Ancak, bulutta barındırılan bir modeli kullanan tüm çıkarımlar, Firebase AI Logic aracılığıyla diğer çıkarımlar gibi izlenebilir.

Ek sınırlamalar

Yukarıdakilere ek olarak, cihaz üzerinde çıkarım aşağıdaki sınırlamalara tabidir (daha fazla bilgiyi ML Kit dokümanlarında bulabilirsiniz):

  • Uygulamanızın son kullanıcısı, cihaz üzerinde çıkarım için desteklenen bir cihaz kullanmalıdır.

  • Uygulamanız yalnızca ön planda çalışırken cihaz üzerinde çıkarım gerçekleştirebilir.

  • Cihaz üzerinde çıkarım için yalnızca İngilizce ve Korece doğrulanmıştır.

  • Cihaz üzerinde çıkarım isteğinin tamamı için maksimum jeton sınırı 4.000 jetondur. İsteklerinizin bu sınırı aşabileceğini düşünüyorsanız bulutta barındırılan bir modeli kullanabilen bir çıkarım modu yapılandırdığınızdan emin olun.

  • Uzun çıktı (256'dan fazla jeton) gerektiren cihaz üzerinde çıkarım kullanım alanlarından kaçınmanızı öneririz.

  • AICore (cihazdaki modelleri yöneten bir Android sistem hizmeti), uygulama başına çıkarım kotası uygular. Kısa süre içinde çok fazla API isteği göndermek ErrorCode.BUSY yanıtına neden olur. Bu hatayı alıyorsanız isteği yeniden denemek için eksponansiyel geri yüklemeyi kullanabilirsiniz. Ayrıca, bir uygulama uzun süreli bir kotayı (örneğin, günlük kota) aşarsa ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDED döndürülebilir.


Firebase AI Logic ile ilgili deneyiminiz hakkında geri bildirim verme