Anda dapat membuat aplikasi dan fitur Android yang didukung AI dengan inferensi hybrid menggunakan Firebase AI Logic. Inferensi hybrid memungkinkan menjalankan inferensi menggunakan model di perangkat jika tersedia dan otomatis beralih ke model yang dihosting di cloud jika tidak tersedia (dan sebaliknya).
Halaman ini menjelaskan cara memulai penggunaan SDK klien, serta menampilkan 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
Menggunakan model di perangkat untuk inferensi menawarkan:
- Privasi yang ditingkatkan
- Konteks lokal
- Inferensi tanpa biaya
- Fungsi offline
Menggunakan fungsi hybrid menawarkan:
- Menjangkau 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 satu kali (bukan chat), dengan output streaming atau non-streaming. Fitur 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 di cloud menggunakan penyedia Gemini API yang Anda pilih (baik Gemini Developer API maupun Vertex AI Gemini API).
Inferensi di perangkat menggunakan Prompt API dari ML Kit, yang 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 menetapkan suhu).
Perangkat Android yang didukung dan model di perangkatnya
Untuk inferensi di perangkat (yang menggunakan Prompt API dari 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 permintaan perintah yang didukung yang ingin Anda kirim.
Langkah 1: Menyiapkan project Firebase dan menghubungkan aplikasi Anda ke Firebase
Login ke Firebase console, lalu pilih project Firebase Anda.
Di Firebase console, buka AI Services > AI Logic.
Klik Get started untuk meluncurkan alur kerja terpandu yang membantu Anda menyiapkan API yang diperlukan dan resource untuk project Anda.
Siapkan project Anda untuk menggunakan penyedia "Gemini API".
Sebaiknya mulai menggunakan Gemini Developer API. Kapan saja, Anda dapat selalu menyiapkan Vertex AI Gemini API (dan persyaratannya untuk penagihan).
Untuk Gemini Developer API, konsol akan mengaktifkan API yang diperlukan dan membuat kunci Gemini API di project Anda.
Jangan tambahkan kunci Gemini API ini ke codebase aplikasi Anda. Pelajari lebih lanjut.Jika diminta dalam alur kerja konsol, ikuti petunjuk di layar untuk mendaftarkan aplikasi Anda dan menghubungkannya ke Firebase.
Lanjutkan ke langkah berikutnya dalam panduan ini untuk menambahkan SDK ke aplikasi Anda.
Langkah 2: Menambahkan SDK yang diperlukan
SDK untuk 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.11.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.11.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: Memeriksa apakah model di perangkat tersedia
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 berikut terkait 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 penggantian, pastikan model didownload lebih awal dalam siklus proses aplikasi Anda sehingga model di perangkat tersedia sebelum pengguna akhir 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 beralih ke model yang dihosting di cloud atau menampilkan pengecualian (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 tersebut tersedia.
Pengoptimalan latensi
Untuk mengoptimalkan panggilan inferensi pertama, Anda dapat meminta aplikasi memanggil
warmup().
Tindakan ini akan memuat model di perangkat ke dalam memori dan melakukan inisialisasi komponen runtime.
Langkah 4: Melakukan inisialisasi layanan dan membuat instance model
|
Klik penyedia Gemini API Anda untuk melihat konten khusus penyedia dan kode 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 hal berikut. Deskripsi di sini sangat umum, tetapi Anda dapat mempelajari detail tentang perilaku mode ini di Menetapkan mode inferensi.PREFER_ON_DEVICE: Mencoba menggunakan model di perangkat; jika tidak, kembali ke model yang dihosting di cloud.ONLY_ON_DEVICE: Mencoba menggunakan model di perangkat; jika tidak, menampilkan pengecualian.PREFER_IN_CLOUD: Mencoba menggunakan model yang dihosting di cloud; jika tidak, kembali ke model di perangkat.ONLY_IN_CLOUD: Mencoba menggunakan model yang dihosting di cloud; jika tidak, menampilkan 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: Mengirim permintaan perintah ke model
Bagian ini menunjukkan cara mengirim berbagai jenis input untuk membuat berbagai jenis output, termasuk:
Membuat teks dari input khusus teks
| Sebelum mencoba sampel ini, pastikan Anda telah menyelesaikan bagian Memulai 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 sampel ini, pastikan Anda telah menyelesaikan bagian Memulai panduan ini. |
Anda dapat menggunakan
generateContent()
untuk membuat teks dari perintah yang berisi teks dan maksimum satu file gambar
(hanya Bitmap) — 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 hybrid:
Menentukan apakah inferensi di perangkat atau di cloud digunakan.
Menggunakan 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 Gemini atau Imagen model
Menyediakan file menggunakan URL dalam permintaan multimodal. Anda harus menyediakan file sebagai data inline ke 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 membantu membuat responsnya (seperti pemanggilan fungsi, eksekusi kode, konteks URL, dan grounding dengan Google Penelusuran)
Pemantauan AI di Firebase konsol 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, inferensidi perangkat memiliki batasan berikut (pelajari lebih lanjut dalam dokumentasi ML Kit):
Pengguna akhir aplikasi Anda harus menggunakan a 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 kembali 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 dengan Firebase AI Logic