אתם יכולים ליצור תכונות ואפליקציות ל-Android מבוססות-AI עם היסק היברידי באמצעות Firebase AI Logic. הסקת מסקנות היברידית מאפשרת להריץ הסקת מסקנות באמצעות מודלים במכשיר כשהם זמינים, ולעבור בצורה חלקה למודלים שמתארחים בענן אם לא (ולהיפך).
בדף הזה מוסבר איך מתחילים להשתמש ב-SDK של הלקוח, ומוצגות אפשרויות נוספות להגדרה ויכולות, כמו טמפרטורה.
שימו לב שהסקת מסקנות במכשיר באמצעות Firebase AI Logic נתמכת באפליקציות ל-Android שפועלות במכשירים ספציפיים, והיא כפופה לתנאים של ML Kit וגם לתנאים שספציפיים להיבטים של AI גנרטיבי ב-ML Kit.
תרחישים מומלצים לדוגמה ויכולות נתמכות
תרחישים מומלצים לדוגמה
השימוש במודל במכשיר להסקת מסקנות מאפשר:
- פרטיות משופרת
- הקשר מקומי
- הסקת מסקנות ללא עלות
- פונקציונליות אופליין
שימוש בפונקציונליות של מוצרים משולבים:
- איך להגיע ליותר אנשים בקהל שלכם באמצעות התאמה לזמינות של מודלים במכשיר וקישוריות לאינטרנט
יכולות ותכונות נתמכות להסקת מסקנות במכשיר
הסקת מסקנות במכשיר תומכת רק ביצירת טקסט בשיחה אחת (לא צ'אט), עם פלט בסטרימינג או ללא סטרימינג. הוא תומך ביכולות הבאות של יצירת טקסט:
יצירת טקסט מקלט של טקסט בלבד
יצירת טקסט מקלט של טקסט ותמונה, במיוחד תמונת Bitmap אחת כקלט
חשוב לעיין ברשימה של תכונות שעדיין לא זמינות להסקת מסקנות במכשיר בחלק התחתון של הדף הזה.
לפני שמתחילים
חשוב לשים לב לנקודות הבאות:
ממשקי API נתמכים:
הסקת מסקנות בענן מתבצעת באמצעות ספק Gemini API שבחרתם (Gemini Developer API או Vertex AI Gemini API).
הסקת מסקנות במכשיר מתבססת על Prompt API מ-ML Kit, שנמצא בשלב בטא וזמין רק במכשירים ספציפיים.
בדף הזה מוסבר איך מתחילים.
אחרי שמסיימים את ההגדרה הרגילה, אפשר לעיין באפשרויות וביכולות ההגדרה הנוספות (כמו הגדרת הטמפרטורה).
מכשירי Android נתמכים והדגמים שלהם במכשיר
במסמכי התיעוד של ML Kit אפשר למצוא רשימה של מכשירים נתמכים והמודלים שלהם במכשיר, לשימוש בהסקת מסקנות במכשיר (שמתבצעת באמצעות Prompt API של ML Kit).
קדימה, מתחילים
בשלבים הבאים מוסבר איך לבצע את ההגדרה הכללית הנדרשת לכל בקשה להנחיה נתמכת שרוצים לשלוח.
שלב 1: הגדרת פרויקט Firebase וקישור האפליקציה ל-Firebase
נכנסים אל Firebaseהמסוף ובוחרים את הפרויקט ב-Firebase.
במסוף Firebase, עוברים לדף Firebase AI Logic.
לוחצים על Get started (תחילת העבודה) כדי להפעיל תהליך עבודה מודרך שיעזור לכם להגדיר את ממשקי ה-API והמשאבים הנדרשים לפרויקט.
מגדירים את הפרויקט לשימוש בספק Gemini API.
מומלץ להתחיל להשתמש בGemini Developer API. בכל שלב, אתם יכולים להגדיר את Vertex AI Gemini API(ואת הדרישה שלו לחיוב).
במקרה של Gemini Developer API, במסוף יופעלו ממשקי ה-API הנדרשים וייווצר מפתח API Gemini בפרויקט.
אין להוסיף את Gemini מפתח ה-API הזה לבסיס הקוד של האפליקציה. מידע נוסףאם מופיעה בקשה בתהליך העבודה במסוף, פועלים לפי ההוראות במסך כדי לרשום את האפליקציה ולקשר אותה ל-Firebase.
כדי להוסיף את ה-SDK לאפליקציה, ממשיכים לשלב הבא במדריך הזה.
שלב 2: מוסיפים את ה-SDK הנדרש
Firebase AI Logic SDK ל-Android
(firebase-aifirebase-ai-ondevice
בקובץ Gradle של המודול (ברמת האפליקציה) (למשל <project>/<app-module>/build.gradle.kts), מוסיפים את יחסי התלות של ספריות Firebase AI Logic ל-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
ב-Java, צריך להוסיף עוד שתי ספריות.
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: בדיקה אם המודל במכשיר זמין
באמצעות FirebaseAIOnDevice, בודקים אם המודל במכשיר זמין ומורידים אותו אם הוא לא זמין.
אחרי ההורדה, AICore ידאג לעדכן את המודל באופן אוטומטי. אחרי קטע הקוד מופיעות הערות עם פרטים נוספים על AICore ועל ניהול ההורדה של המודל במכשיר.
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.
חשוב לדעת על הורדת הדגם במכשיר:
הזמן שנדרש להורדת המודל במכשיר תלוי בגורמים רבים, כולל הרשת.
אם הקוד שלכם משתמש במודל במכשיר להסקת מסקנות ראשונית או כגיבוי, חשוב לוודא שהמודל יורד בשלב מוקדם במחזור החיים של האפליקציה, כדי שהמודל במכשיר יהיה זמין לפני שהמשתמשי קצה ייתקלו בקוד באפליקציה.
אם המודל במכשיר לא זמין כשנשלחת בקשה להיקש במכשיר, ה-SDK לא יפעיל באופן אוטומטי את ההורדה של המודל במכשיר. ה-SDK יחזור למודל שמתארח בענן או יציג חריגה (פרטים על ההתנהגות של מצבי הסקה).
AICore (שירות מערכת של Android) מנהל בשבילכם את המודל והגרסה שהורדו, דואג שהמודל יהיה עדכני וכו'. שימו לב שבמכשיר יורד רק מודל אחד, כך שאם אפליקציה אחרת במכשיר הורידה בעבר את המודל במכשיר בהצלחה, הבדיקה הזו תחזיר שהמודל זמין.
אופטימיזציה של זמן האחזור
כדי לבצע אופטימיזציה לקריאה הראשונה של ההסקה, אפשר להגדיר את האפליקציה לקריאה של warmup().
הפעולה הזו טוענת את המודל במכשיר לזיכרון ומאתחלת רכיבי זמן ריצה.
שלב 4: הפעלת השירות ויצירת מופע של מודל
|
לוחצים על הספק Gemini API כדי לראות בדף הזה תוכן וקוד שספציפיים לספק. |
לפני ששולחים בקשת הנחיה למודל, צריך להגדיר את הדברים הבאים.
מאתחלים את השירות עבור ספק ה-API שבחרתם.
יוצרים מכונת
GenerativeModelומגדירים אתmodeלאחת מהאפשרויות הבאות. התיאורים כאן הם ברמה גבוהה מאוד, אבל אפשר לקרוא פרטים על ההתנהגות של המצבים האלה במאמר הגדרת מצב הסקה.
PREFER_ON_DEVICE: ניסיון להשתמש במודל במכשיר; אחרת, חזרה למודל שמתארח בענן.
ONLY_ON_DEVICE: ניסיון להשתמש במודל במכשיר. אחרת, מופעל חריג.
PREFER_IN_CLOUD: ניסיון להשתמש במודל שמתארח בענן. אם הניסיון לא מצליח, המערכת חוזרת למודל שפועל במכשיר.
ONLY_IN_CLOUD: ניסיון להשתמש במודל שמתארח בענן. אם לא מצליחים, מופעלת חריגה.
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: שולחים בקשת הנחיה למודל
בקטע הזה מוסבר איך לשלוח סוגים שונים של קלט כדי ליצור סוגים שונים של פלט, כולל:
יצירת טקסט מקלט טקסט בלבד
| לפני שמנסים את הדוגמה הזו, חשוב לוודא שסיימתם את הקטע תחילת העבודה במדריך הזה. |
אתם יכולים להשתמש ב-generateContent() כדי ליצור טקסט מהנחיה שמכילה טקסט:
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 תומך גם בסטרימינג של תשובות טקסט באמצעות generateContentStream (במקום generateContent).
יצירת טקסט מקלט של טקסט ותמונה (מולטי-מודאלי)
| לפני שמנסים את הדוגמה הזו, חשוב לוודא שסיימתם את הקטע תחילת העבודה במדריך הזה. |
אתם יכולים להשתמש ב-generateContent() כדי ליצור טקסט מהנחיה שמכילה טקסט ועד קובץ תמונה אחד (Bitmap בלבד) – צריך לספק את mimeType של כל קובץ קלט ואת הקובץ עצמו.
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 תומך גם בסטרימינג של תשובות טקסט באמצעות generateContentStream (במקום generateContent).
מה עוד אפשר לעשות?
אתם יכולים להשתמש באפשרויות הגדרה וביכולות נוספות שונות כדי לשפר את החוויה ההיברידית:
תכונות שעדיין לא זמינות להסקת מסקנות במכשיר
בגרסה הניסיונית הזו, לא כל היכולות של מודלים בענן זמינות להסקת מסקנות במכשיר.
התכונות שמפורטות בקטע הזה עדיין לא זמינות להסקת מסקנות במכשיר. אם אתם רוצים להשתמש באחת מהתכונות האלה, מומלץ להשתמש בONLY_IN_CLOUD מצב ההסקה כדי לקבל חוויה עקבית יותר.
יצירת פלט מובנה (כמו JSON או ספירות)
יצירת טקסט מסוגי קלט של קובצי תמונות שאינם Bitmap (תמונה שנטענה לזיכרון)
יצירת טקסט מיותר מקובץ תמונה אחד
יצירת טקסט מקלט, מסרטונים וממסמכים (כמו קובצי PDF)
יצירת תמונות באמצעות מודלים של Gemini או Imagen
העברת קבצים באמצעות כתובות URL בבקשות מולטימודאליות. חובה לספק קבצים כנתונים מוטבעים למודלים במכשיר
שליחת בקשות שחורגות מ-4,000 טוקנים (או בערך 3,000 מילים באנגלית).
שיחה עם זיכרון
אספקת כלים למודל כדי לעזור לו ליצור את התשובה (כמו קריאה לפונקציה, הפעלת קוד, הקשר של כתובת URL ועיגון באמצעות חיפוש Google)
במסוף Firebase, המעקב אחרי AI לא מציג נתונים לגבי הסקה במכשיר (כולל יומנים במכשיר). עם זאת, אפשר לעקוב אחרי כל הסקה שמשתמשת במודל שמתארח בענן, בדיוק כמו אחרי הסקה אחרת, באמצעות Firebase AI Logic.
מגבלות נוספות
בנוסף לאמור לעיל, להסקת מסקנות במכשיר יש את המגבלות הבאות (מידע נוסף זמין בתיעוד של ML Kit):
משתמש הקצה של האפליקציה שלכם צריך להשתמש במכשיר נתמך כדי להסיק מסקנות במכשיר.
האפליקציה יכולה להפעיל הסקה במכשיר רק כשהיא פועלת בחזית.
רק השפות אנגלית וקוריאנית אומתו להסקת מסקנות במכשיר.
המגבלה המקסימלית של אסימונים לכל בקשת הסקה במכשיר היא 4,000 אסימונים. אם יש סיכוי שהבקשות שלכם יחרגו מהמגבלה הזו, הקפידו להגדיר מצב הסקה שיכול להשתמש במודל שמתארח בענן.
מומלץ להימנע מתרחישי שימוש בהסקת מסקנות במכשיר שדורשים פלט ארוך (יותר מ-256 טוקנים).
AICore (שירות מערכת של Android שמנהל את המודלים במכשיר) אוכף מכסת הסקה לכל אפליקציה. שליחת יותר מדי בקשות API בפרק זמן קצר תוביל לתשובה
ErrorCode.BUSY. אם אתם מקבלים את השגיאה הזו, כדאי להשתמש בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff) כדי לנסות שוב את הבקשה. בנוסף, אפשר להחזיר אתErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDEDאם אפליקציה חורגת ממכסת זמן ארוך (לדוגמה, מכסה יומית).
רוצה לספר לנו על חוויית השימוש ב-Firebase AI Logic?