פיתוח אפליקציות ותכונות מבוססות-AI עם הסקת מסקנות היברידית באמצעות Firebase AI Logic. הסקת מסקנות היברידית מאפשרת להסיק מסקנות באמצעות מודלים שמובנים במכשיר כשהם זמינים, ובאופן חלק לעבור למודלים שמארחים בענן אם לא.
בגרסה הזו, ניתן להשתמש בהסקת מסקנות היברידית באמצעות Firebase AI Logic client SDK for Web עם תמיכה בהסקת מסקנות במכשיר עבור Chrome במחשב.
תרחישים מומלצים לדוגמה ויכולות נתמכות
תרחישי שימוש מומלצים:
השימוש במודל היקש במכשיר מציע:
- פרטיות משופרת
- הקשר מקומי
- הסקת מסקנות ללא עלות
- פונקציונליות אופליין
שימוש בהצעות עם פונקציונליות היברידית:
- הגעה ל-100% מהקהל, ללא קשר לזמינות הדגם במכשיר
יכולות ותכונות נתמכות להסקת מסקנות במכשיר:
- יצירת תוכן בשיחה אחת, סטרימינג ולא סטרימינג
- יצירת טקסט מקלט טקסט בלבד
- יצירת טקסט מקלט של טקסט ותמונה, במיוחד סוגי תמונות קלט של JPEG ו-PNG
- יצירת פלט מובנה, כולל JSON וספירות
שנתחיל?
במדריך הזה מוסבר איך להתחיל להשתמש ב-Firebase AI Logic SDK for Web כדי לבצע היסק היברידי.
הסקת מסקנות באמצעות מודל במכשיר מתבצעת באמצעות Prompt API מ-Chrome, ואילו הסקת מסקנות באמצעות מודל שמתארח בענן מתבצעת באמצעות הספק שבחרתם (Gemini API או Gemini Developer API או Vertex AI Gemini API).
שלב 1: הגדרת Chrome ו-Prompt API להסקת מסקנות במכשיר
מורידים את הגרסה האחרונה של Chrome בטא.
הסקת מסקנות במכשיר זמינה מגרסה 138 של Chrome ואילך.
כדי להפעיל את Prompt API במופע Chrome, צריך להגדיר את הדגלים הבאים:
chrome://flags/#optimization-guide-on-device-model
: הערך שמוגדר הוא מופעל.chrome://flags/#prompt-api-for-gemini-nano
: הערך שמוגדר הוא מופעל.
מידע נוסף על שימוש בממשקי API ב-localhost זמין במסמכי התיעוד של Chrome. אופציונלי: אפשר להצטרף לתוכנית התצוגה המקדימה המוקדמת (EPP) של Chrome כדי לשלוח משוב.
כדי להפעיל את הדגם הרב-אופני במכשיר, מגדירים את הדגל הבא:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
: הערך שמוגדר הוא Enabled.
אימות ה-API באופן מקומי:
מפעילים מחדש את Chrome.
פותחים את הכלים למפתחים > מסוף.
מריצים את הפקודה הבאה:
await LanguageModel.availability();
מוודאים שהפלט הוא
available
,downloading
אוdownloadable
. .אם הפלט הוא
downloadable
, אפשר להריץ את הפקודהawait LanguageModel.create();
כדי להתחיל בהורדת המודל. אחרת, הבקשה הראשונה להסקת מסקנות במכשיר תתחיל הורדה של מודל ברקע, תהליך שיכול להימשך כמה דקות.
שלב 2: הגדרת פרויקט ב-Firebase וקישור האפליקציה ל-Firebase
נכנסים אל Firebase המסוף ובוחרים את הפרויקט ב-Firebase.
עדיין אין לכם פרויקט Firebase?
אם עדיין אין לכם פרויקט Firebase, לוחצים על יצירת פרויקט ומשתמשים באחת מהאפשרויות הבאות:
אפשרות 1: יוצרים פרויקט חדש לגמרי ב-Firebase (ואת פרויקט Google Cloud הבסיסי שלו באופן אוטומטי) על ידי הזנת שם פרויקט חדש בשלב הראשון של תהליך העבודה 'יצירת פרויקט'.
אפשרות 2: מוסיפים את Firebase לפרויקט Google Cloud קיים על ידי בחירת שם הפרויקט Google Cloud מהתפריט הנפתח בשלב הראשון של תהליך העבודה 'יצירת פרויקט'.
שימו לב: כשמוצגת בקשה, לא צריך להגדיר את Google Analytics כדי להשתמש בערכות ה-SDK של Firebase AI Logic.
במסוף Firebase, עוברים לדף Firebase AI Logic.
לוחצים על Get started (תחילת העבודה) כדי להפעיל תהליך עבודה מודרך שיעזור לכם להגדיר את ממשקי ה-API והמשאבים הנדרשים לפרויקט.
בוחרים את ספק Gemini API שרוצים להשתמש בו עם ערכות ה-SDK של Firebase AI Logic. מומלץ למשתמשים חדשים.Gemini Developer API תמיד אפשר להוסיף פרטי חיוב או להגדיר את Vertex AI Gemini API מאוחר יותר.
Gemini Developer API — חיוב אופציונלי (זמין בתוכנית התמחור Spark ללא עלות, ותוכלו לשדרג בהמשך אם תרצו)
במסוף יופעלו ממשקי ה-API הנדרשים וייווצר מפתח API של Gemini בפרויקט שלכם.
אין להוסיף את Gemini מפתח ה-API הזה לבסיס הקוד של האפליקציה. מידע נוסףVertex AI Gemini API — נדרש חיוב (נדרש תוכנית התמחור Blaze בתשלום לפי שימוש)
המסוף יעזור לכם להגדיר חיוב ולהפעיל את ממשקי ה-API הנדרשים בפרויקט.
אם מופיעה בקשה בתהליך העבודה של המסוף, פועלים לפי ההוראות במסך כדי לרשום את האפליקציה ולחבר אותה ל-Firebase.
כדי להוסיף את ה-SDK לאפליקציה, ממשיכים לשלב הבא במדריך הזה.
שלב 3: הוספת ה-SDK
ספריית Firebase מספקת גישה לממשקי ה-API לאינטראקציה עם מודלים גנרטיביים. הספרייה כלולה כחלק מ-Firebase JavaScript SDK לאינטרנט.
מתקינים את Firebase JS SDK לאינטרנט באמצעות npm:
npm install --save-exact firebase@eap-ai-hybridinference
התכונה ההיברידית מופצת תחת תג npm אחר, לכן חשוב לכלול אותה בפקודת ההתקנה.
התגים מיושמים כגרסאות תיקון, ולכן הדגל
--save-exact
אומר ל-NPM לא לשדרג אוטומטית כשגרסה חדשה, שאולי לא קשורה, זמינה.מפעילים את Firebase באפליקציה:
import { initializeApp } from "firebase/app"; // TODO(developer) Replace the following with your app's Firebase configuration // See: https://firebase.google.com/docs/web/learn-more#config-object const firebaseConfig = { // ... }; // Initialize FirebaseApp const firebaseApp = initializeApp(firebaseConfig);
שלב 4: הפעלת השירות ויצירת מופע של מודל
לוחצים על הספק Gemini API כדי לראות בדף הזה תוכן וקוד שספציפיים לספק. |
לפני ששולחים הנחיה למודל Gemini, צריך לאתחל את השירות עבור ספק ה-API שבחרתם וליצור מופע GenerativeModel
.
מגדירים את mode
לאחד מהערכים הבאים:
prefer_on_device
: מגדיר את ה-SDK לשימוש במודל במכשיר אם הוא זמין, או לחזרה למודל שמארח בענן.
only_on_device
: מגדיר את ה-SDK לשימוש במודל במכשיר או להצגת חריגה.
only_in_cloud
: הגדרת ה-SDK כך שלעולם לא ייעשה שימוש במודל במכשיר.
כברירת מחדל, כשמשתמשים ב-prefer_on_device
או ב-only_in_cloud
, המודל שמתארח בענן הוא gemini-2.0-flash-lite
, אבל אפשר לשנות את ברירת המחדל.
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });
שליחת בקשת הנחיה למודל
בקטע הזה תמצאו דוגמאות לאופן שליחת סוגים שונים של קלט כדי ליצור סוגים שונים של פלט, כולל:
אם רוצים ליצור פלט מובנה (כמו JSON או enums), צריך להשתמש באחת מהדוגמאות הבאות של 'יצירת טקסט' וגם להגדיר את המודל כך שיגיב בהתאם לסכימה שסופקה.
יצירת טקסט מקלט טקסט בלבד
לפני שמנסים את הדוגמה הזו, חשוב לוודא שסיימתם את הקטע תחילת העבודה במדריך הזה. |
אתם יכולים להשתמש ב-generateContent()
כדי ליצור טקסט מהנחיה שמכילה טקסט:
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Wrap in an async function so you can use await
async function run() {
// Provide a prompt that contains text
const prompt = "Write a story about a magic backpack."
// To generate text output, call `generateContent` with the text input
const result = await model.generateContent(prompt);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
יצירת טקסט מקלט של טקסט ותמונה (מולטי-מודאלי)
לפני שמנסים את הדוגמה הזו, חשוב לוודא שסיימתם את הקטע תחילת העבודה במדריך הזה. |
אתם יכולים להשתמש ב-generateContent()
כדי ליצור טקסט מתוך הנחיה שמכילה קובצי טקסט ותמונות. לשם כך, צריך לספק את mimeType
של כל קובץ קלט ואת הקובץ עצמו.
סוגי התמונות הנתמכים כקלט להסקת מסקנות במכשיר הם PNG ו-JPEG.
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the image
const prompt = "Write a poem about this picture:";
const fileInputEl = document.querySelector("input[type=file]");
const imagePart = await fileToGenerativePart(fileInputEl.files[0]);
// To generate text output, call `generateContent` with the text and image
const result = await model.generateContent([prompt, imagePart]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
מה עוד אפשר לעשות?
בנוסף לדוגמאות שלמעלה, אפשר גם להשתמש במצבי הסקה חלופיים, לבטל את ברירת המחדל של מודל הגיבוי ולהשתמש בהגדרת המודל כדי לשלוט בתשובות.
שימוש במצבי הסקה חלופיים
בדוגמאות שלמעלה נעשה שימוש במצב prefer_on_device
כדי להגדיר את ה-SDK כך שישתמש במודל במכשיר אם הוא זמין, או שיחזור למודל שמתארח בענן. ערכת ה-SDK מציעה שני מצבי הסקה חלופיים: only_on_device
ו-only_in_cloud
.
משתמשים במצב
only_on_device
כדי ש-SDK יוכל להשתמש רק במודל במכשיר. במקרה כזה, ה-API יחזיר שגיאה אם מודל במכשיר לא יהיה זמין.const model = getGenerativeModel(ai, { mode: "only_on_device" });
משתמשים במצב
only_in_cloud
כדי ש-SDK יוכל להשתמש רק במודל שמתארח בענן.const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
שינוי מודל ברירת המחדל לגיבוי
כשמשתמשים במצב prefer_on_device
, ה-SDK יחזור להשתמש במודל שמתארח בענן אם מודל במכשיר לא זמין. מודל ברירת המחדל לגיבוי שמתארח בענן הוא gemini-2.0-flash-lite
. המודל הזה שמתארח בענן הוא גם ברירת המחדל כשמשתמשים במצב only_in_cloud
.
אפשר להשתמש באפשרות ההגדרה inCloudParams
כדי לציין מודל חלופי שמתארח בענן כברירת מחדל:
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
}
});
שמות המודלים הנתמכים של Gemini
שימוש בהגדרות המודל כדי לשלוט בתשובות
בכל בקשה למודל, אפשר לשלוח הגדרת מודל כדי לשלוט באופן שבו המודל יוצר תגובה. מודלים שמתארחים בענן ומודלים במכשיר מציעים אפשרויות הגדרה שונות.
ההגדרה נשמרת למשך כל חיי המופע. אם רוצים להשתמש בהגדרה אחרת, צריך ליצור מופע חדש של GenerativeModel
עם ההגדרה הזו.
הגדרת מודל שמתארח בענן
משתמשים באפשרות inCloudParams
כדי להגדיר מודל של Gemini שמתארח בענן. מידע על הפרמטרים הזמינים
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
temperature: 0.8,
topK: 10
}
});
הגדרת מודל במכשיר
הערה: כדי להסיק מסקנות באמצעות מודל במכשיר, צריך להשתמש ב-Prompt API מ-Chrome.
משתמשים באפשרות onDeviceParams
כדי להגדיר מודל במכשיר. מידע על הפרמטרים הזמינים
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
הגדרת הפלט המובנה
אפשר ליצור פלט מובנה (כמו JSON ו-enums) להסקת מסקנות באמצעות מודלים שמתארחים בענן ומודלים שפועלים במכשיר.
כדי להגדיר את המודל כך שיגיב עם פלט מובנה, משתמשים ב-inCloudParams
וב-onDeviceParams
. במצבים האחרים,
משתמשים רק בתצורה הרלוונטית.
בקטע
inCloudParams
: מציינים אתresponseMimeType
המתאים (בדוגמה הזו,application/json
) ואתresponseSchema
שרוצים שהמודל ישתמש בו.במקרה של
onDeviceParams
: מציינים אתresponseConstraint
שרוצים שהמודל ישתמש בו.
פלט JSON
בדוגמה הבאה מותאם פלט JSON כללי להסקת מסקנות היברידית:
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const jsonSchema = Schema.object({
properties: {
characters: Schema.array({
items: Schema.object({
properties: {
name: Schema.string(),
accessory: Schema.string(),
age: Schema.number(),
species: Schema.string(),
},
optionalProperties: ["accessory"],
}),
}),
}
});
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
פלט של טיפוסים בני מנייה (enum)
כמו בדוגמה הקודמת, אבל עם התאמה של התיעוד בנושא פלט enum להסקת מסקנות היברידית:
// ...
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
// ...
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
// ...
תכונות שעדיין לא זמינות להסקת מסקנות במכשיר
בשלב הזה, לא כל היכולות של Web SDK זמינות להסקת מסקנות במכשיר, כי מדובר בגרסת ניסוי. התכונות הבאות עדיין לא נתמכות בהסקת מסקנות במכשיר (אבל הן בדרך כלל זמינות להסקת מסקנות מבוססת-ענן).
יצירת טקסט מקבצים של תמונות בפורמטים שונים מ-JPEG ו-PNG
- יכול לחזור למודל שמתארח בענן, אבל מצב
only_on_device
יחזיר שגיאה.
- יכול לחזור למודל שמתארח בענן, אבל מצב
יצירת טקסט מקלט, מסרטונים וממסמכים (כמו קובצי PDF)
- יכול לחזור למודל שמתארח בענן, אבל מצב
only_on_device
יחזיר שגיאה.
- יכול לחזור למודל שמתארח בענן, אבל מצב
יצירת תמונות באמצעות מודלים של Gemini או Imagen
- יכול לחזור למודל שמתארח בענן, אבל מצב
only_on_device
יחזיר שגיאה.
- יכול לחזור למודל שמתארח בענן, אבל מצב
העברת קבצים באמצעות כתובות URL בבקשות מולטימודאליות. צריך לספק קבצים כנתונים מוטבעים למודלים במכשיר.
שיחה עם זיכרון
- יכול לחזור למודל שמתארח בענן, אבל מצב
only_on_device
יחזיר שגיאה.
- יכול לחזור למודל שמתארח בענן, אבל מצב
שידור דו-כיווני עם Gemini Live API
- שימו לב שהאפשרות הזו לא נתמכת ב-SDK של לקוח Firebase AI Logic לאינטרנט, גם לא במודלים שמארחים בענן.
שימוש ב'כלים', כולל קריאה לפונקציה וביסוס על חיפוש Google
- בקרוב!
ספירת טוקנים
- תמיד מחזירה שגיאה. המספר יהיה שונה בין מודלים שמתארחים בענן לבין מודלים שפועלים במכשיר, ולכן אין מעבר אינטואיטיבי למודל חלופי.
מעקב אחרי AI במסוף Firebase להסקת מסקנות במכשיר.
- שימו לב שאפשר לעקוב אחרי כל מסקנה שמתקבלת באמצעות המודלים שמארחים בענן, בדיוק כמו אחרי מסקנות אחרות שמתקבלות באמצעות Firebase AI Logic client SDK for Web.
רוצה לתת משוב על חוויית השימוש ב-Firebase AI Logic?