Anda dapat membuat aplikasi dan fitur Android yang didukung AI dengan inferensi hibrida menggunakan Firebase AI Logic. Inferensi hybrid memungkinkan menjalankan inferensi menggunakan model di perangkat jika tersedia dan melakukan penggantian ke model yang dihosting di cloud jika tidak tersedia (dan sebaliknya).
Halaman ini menjelaskan cara memulai penggunaan SDK klien, serta menunjukkan opsi dan kemampuan konfigurasi tambahan, seperti suhu.
Perhatikan bahwa inferensi di perangkat melalui Firebase AI Logic didukung untuk aplikasi Android yang berjalan di perangkat tertentu dan diatur oleh persyaratan ML Kit, serta persyaratan khusus untuk aspek AI Generatif ML Kit.
Kasus penggunaan yang direkomendasikan dan kemampuan yang didukung
Kasus penggunaan yang direkomendasikan
Penggunaan model di perangkat untuk inferensi menawarkan:
- Privasi yang ditingkatkan
- Konteks lokal
- Inferensi tanpa biaya
- Fungsi offline
Menggunakan penawaran fungsi hybrid:
- Jangkau lebih banyak audiens dengan mengakomodasi ketersediaan model di perangkat dan konektivitas internet
Kemampuan dan fitur yang didukung untuk inferensi di perangkat
Inferensi di perangkat hanya mendukung pembuatan teks sekali putaran (bukan chat), dengan output streaming atau non-streaming. Model ini mendukung kemampuan pembuatan teks berikut:
Membuat teks dari input khusus teks
Membuat teks dari input teks dan gambar, khususnya satu gambar Bitmap sebagai input
Pastikan untuk meninjau daftar fitur yang belum tersedia untuk inferensi di perangkat di bagian bawah halaman ini.
Sebelum memulai
Perhatikan hal berikut ini:
API yang didukung:
Inferensi dalam cloud menggunakan penyedia Gemini API pilihan Anda (Gemini Developer API atau Vertex AI Gemini API).
Inferensi di perangkat menggunakan Prompt API dari ML Kit, yang masih dalam versi beta dan hanya tersedia di perangkat tertentu.
Halaman ini menjelaskan cara memulai.
Setelah menyelesaikan penyiapan standar ini, lihat opsi dan kemampuan konfigurasi tambahan (seperti menyetel suhu).
Perangkat Android yang didukung dan model di perangkatnya
Untuk inferensi di perangkat (yang menggunakan Prompt API ML Kit), Anda dapat menemukan daftar perangkat yang didukung dan model di perangkatnya dalam dokumentasi ML Kit.
Mulai
Langkah-langkah memulai ini menjelaskan penyiapan umum yang diperlukan untuk setiap permintaan perintah yang didukung yang ingin Anda kirim.
Langkah 1: Siapkan project Firebase dan hubungkan aplikasi Anda ke Firebase
Login ke konsol Firebase, lalu pilih project Firebase Anda.
Di konsol Firebase, buka halaman Firebase AI Logic.
Klik Mulai untuk meluncurkan alur kerja terpandu yang membantu Anda menyiapkan API dan resource yang diperlukan untuk project Anda.
Siapkan project Anda untuk menggunakan penyedia "Gemini API".
Sebaiknya mulai menggunakan Gemini Developer API. Kapan saja, Anda dapat menyiapkan Vertex AI Gemini API (dan persyaratan penagihannya).
Untuk Gemini Developer API, konsol akan mengaktifkan API yang diperlukan dan membuat kunci API Gemini di project Anda.
Jangan menambahkan kunci API Gemini ini ke codebase aplikasi Anda. Pelajari lebih lanjut.Jika diminta dalam alur kerja konsol, ikuti petunjuk di layar untuk mendaftarkan aplikasi dan menghubungkannya ke Firebase.
Lanjutkan ke langkah berikutnya dalam panduan ini untuk menambahkan SDK ke aplikasi Anda.
Langkah 2: Tambahkan SDK yang diperlukan
Firebase AI Logic SDK for Android
(firebase-aifirebase-ai-ondevice
Dalam file Gradle modul (level aplikasi)
(seperti <project>/<app-module>/build.gradle.kts), tambahkan dependensi untuk library
Firebase AI Logic untuk Android:
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
Untuk Java, Anda perlu menambahkan dua library tambahan.
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") }
Langkah 3: Periksa apakah model di perangkat tersedia
Dengan menggunakan
FirebaseAIOnDevice,
periksa apakah model di perangkat tersedia, dan download model jika tidak
tersedia.
Setelah didownload, AICore akan otomatis memperbarui model. Lihat catatan setelah cuplikan untuk mengetahui detail selengkapnya tentang AICore dan mengelola download model di perangkat.
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.
Perhatikan hal-hal berikut tentang mendownload model di perangkat:
Waktu yang diperlukan untuk mendownload model di perangkat bergantung pada banyak faktor, termasuk jaringan Anda.
Jika kode Anda menggunakan model di perangkat untuk inferensi utama atau penggantiannya, pastikan model didownload lebih awal dalam siklus proses aplikasi Anda sehingga model di perangkat tersedia sebelum pengguna akhir Anda menemukan kode di aplikasi Anda.
Jika model di perangkat tidak tersedia saat permintaan inferensi di perangkat dibuat, SDK tidak akan otomatis memicu download model di perangkat. SDK akan melakukan penggantian ke model yang dihosting di cloud atau mengecualikan (lihat detail tentang perilaku mode inferensi).
AICore (layanan sistem Android) mengelola model dan versi yang didownload, memperbarui model, dll. Perhatikan bahwa perangkat hanya akan mendownload satu model, jadi jika aplikasi lain di perangkat sebelumnya berhasil mendownload model di perangkat, pemeriksaan ini akan menampilkan bahwa model tersedia.
Pengoptimalan latensi
Untuk mengoptimalkan panggilan inferensi pertama, Anda dapat membuat aplikasi Anda memanggil
warmup().
Tindakan ini memuat model di perangkat ke dalam memori dan menginisialisasi komponen runtime.
Langkah 4: Inisialisasi layanan dan buat instance model
|
Klik penyedia Gemini API untuk melihat konten dan kode khusus penyedia di halaman ini. |
Siapkan hal berikut sebelum Anda mengirim permintaan perintah ke model.
Lakukan inisialisasi layanan untuk penyedia API yang Anda pilih.
Buat instance
GenerativeModel, dan tetapkanmodeke salah satu berikut. Deskripsi di sini sangat umum, tetapi Anda dapat mempelajari detail tentang perilaku mode ini di Menetapkan mode inferensi.PREFER_ON_DEVICE: Berupaya menggunakan model di perangkat; jika tidak, kembali ke model yang dihosting di cloud.ONLY_ON_DEVICE: Berupaya menggunakan model di perangkat; jika tidak, lempar pengecualian.PREFER_IN_CLOUD: Berupaya menggunakan model yang dihosting di cloud; jika tidak, kembali ke model di perangkat.ONLY_IN_CLOUD: Berupaya menggunakan model yang dihosting di cloud; jika tidak, tampilkan pengecualian.
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);
Langkah 5: Kirim permintaan perintah ke model
Bagian ini menunjukkan cara mengirim berbagai jenis input untuk menghasilkan berbagai jenis output, termasuk:
Membuat teks dari input khusus teks
| Sebelum mencoba contoh ini, pastikan Anda telah menyelesaikan bagian Mulai dalam panduan ini. |
Anda dapat menggunakan
generateContent()
untuk membuat teks dari perintah yang berisi teks:
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);
Perhatikan bahwa Firebase AI Logic juga mendukung streaming respons teks menggunakan
generateContentStream
(bukan generateContent).
Membuat teks dari input teks dan gambar (multimodal)
| Sebelum mencoba contoh ini, pastikan Anda telah menyelesaikan bagian Mulai dalam panduan ini. |
Anda dapat menggunakan
generateContent()
untuk membuat teks dari perintah yang berisi teks dan hingga satu file gambar
(Bitmap saja) — dengan memberikan mimeType setiap file input dan file itu sendiri.
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);
Perhatikan bahwa Firebase AI Logic juga mendukung streaming respons teks menggunakan
generateContentStream
(bukan generateContent).
Kamu bisa apa lagi?
Anda dapat menggunakan berbagai opsi dan kemampuan konfigurasi tambahan untuk pengalaman hibrida:
Menentukan apakah inferensi di perangkat atau di cloud digunakan.
Gunakan konfigurasi model untuk mengontrol respons (seperti suhu).
Fitur yang belum tersedia untuk inferensi di perangkat
Sebagai rilis eksperimental, tidak semua kemampuan model cloud tersedia untuk inferensi di perangkat.
Fitur yang tercantum di bagian ini belum tersedia untuk inferensi di perangkat. Jika Anda ingin menggunakan salah satu fitur ini, sebaiknya gunakan mode inferensi ONLY_IN_CLOUD untuk pengalaman yang lebih konsisten.
Membuat output terstruktur (seperti JSON atau enum)
Membuat teks dari jenis input file gambar selain Bitmap (gambar dimuat ke dalam memori)
Membuat teks dari lebih dari satu file gambar
Membuat teks dari input audio, video, dan dokumen (seperti PDF)
Membuat gambar menggunakan model Gemini atau Imagen
Menyediakan file menggunakan URL dalam permintaan multimodal. Anda harus menyediakan file sebagai data inline untuk model di perangkat
Mengirim permintaan yang melebihi 4.000 token (atau sekitar 3.000 kata dalam bahasa Inggris).
Multi-turn chat
Memberikan alat kepada model untuk membantunya membuat respons (seperti pemanggilan fungsi, eksekusi kode, konteks URL, dan perujukan dengan Google Penelusuran)
Pemantauan AI di konsol Firebase tidak menampilkan data apa pun untuk inferensi di perangkat (termasuk log di perangkat). Namun, inferensi apa pun yang menggunakan model yang dihosting di cloud dapat dipantau seperti inferensi lainnya melalui Firebase AI Logic.
Batasan tambahan
Selain hal di atas, inferensi di perangkat memiliki batasan berikut (pelajari lebih lanjut di dokumentasi ML Kit):
Pengguna akhir aplikasi Anda harus menggunakan perangkat yang didukung untuk inferensi di perangkat.
Aplikasi Anda hanya dapat menjalankan inferensi di perangkat saat berada di latar depan.
Hanya bahasa Inggris dan Korea yang telah divalidasi untuk inferensi di perangkat.
Batas token maksimum untuk seluruh permintaan inferensi di perangkat adalah 4.000 token. Jika permintaan Anda mungkin melebihi batas ini, pastikan untuk mengonfigurasi mode inferensi yang dapat menggunakan model yang dihosting di cloud.
Sebaiknya hindari kasus penggunaan inferensi di perangkat yang memerlukan output panjang (lebih dari 256 token).
AICore (layanan sistem Android yang mengelola model di perangkat) menerapkan kuota inferensi per aplikasi. Membuat terlalu banyak permintaan API dalam waktu singkat akan menghasilkan respons
ErrorCode.BUSY. Jika Anda menerima error ini, pertimbangkan untuk menggunakan backoff eksponensial untuk mencoba lagi permintaan. Selain itu,ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDEDdapat ditampilkan jika aplikasi melebihi kuota durasi panjang (misalnya, kuota harian).
Memberikan masukan tentang pengalaman Anda menggunakan Firebase AI Logic