פיתוח אפליקציות אינטרנט ותכונות מבוססות-AI עם הסקה היברידית באמצעות Firebase AI Logic. הסקת מסקנות היברידית מאפשרת להריץ הסקת מסקנות באמצעות מודלים במכשיר כשהם זמינים, ולעבור בצורה חלקה למודלים שמתארחים בענן אם לא (ולהיפך).
בדף הזה מוסבר איך מתחילים להשתמש ב-SDK של הלקוח, ומוצגות אפשרויות נוספות להגדרה ויכולות, כמו פלט מובנה.
שימו לב שהסקת מסקנות במכשיר נתמכת באפליקציות אינטרנט שפועלות ב-Chrome במחשב.
תרחישים מומלצים לדוגמה ויכולות נתמכות
תרחישים מומלצים לשימוש:
השימוש במודל במכשיר לצורך הסקת מסקנות מציע:
- פרטיות משופרת
- הקשר מקומי
- הסקת מסקנות ללא עלות
- פונקציונליות אופליין
שימוש במוצרים עם פונקציונליות היברידית:
- הגעה ל-100% מהקהל, ללא קשר לזמינות הדגם במכשיר או לחיבור לאינטרנט
יכולות ותכונות נתמכות להסקת מסקנות במכשיר:
- יצירת תוכן בשיחה אחת, סטרימינג ולא סטרימינג
- יצירת טקסט מקלט של טקסט בלבד
- יצירת טקסט מקלט של טקסט ותמונה, במיוחד סוגי תמונות קלט של JPEG ו-PNG
- יצירת פלט מובנה, כולל JSON ו-enums
לפני שמתחילים
חשוב לשים לב לנקודות הבאות:
הסקת מסקנות באמצעות מודל במכשיר מתבצעת באמצעות Prompt API מ-Chrome. לעומת זאת, הסקת מסקנות באמצעות מודל שמתארח בענן מתבצעת באמצעות הספק שבחרתם (Gemini API או Gemini Developer API או Vertex AI Gemini API).
בדף הזה מוסבר איך מתחילים לפתח באמצעות localhost (מידע נוסף על שימוש בממשקי API ב-localhost זמין במסמכי התיעוד של Chrome). בהמשך הדף מפורטות אפשרויות ויכולות נוספות (כמו פלט מובנה).
אחרי שמטמיעים את התכונה, אפשר לאפשר למשתמשי הקצה לנסות את התכונה באפליקציה בפועל.
תחילת העבודה ב-localhost
בשלבי ההתחלה האלה מתואר תהליך ההגדרה הכללי שנדרש לכל בקשת הנחיה נתמכת שרוצים לשלוח.
שלב 1: הגדרת Chrome ו-Prompt API להסקת מסקנות במכשיר
חשוב לוודא שאתם משתמשים בגרסה עדכנית של Chrome. עדכון בכתובת chrome://settings/help.
הסקת מסקנות במכשיר זמינה מ-Chrome גרסה 139 ואילך.כדי להפעיל את המודל המולטימודאלי במכשיר, מגדירים את הדגל הבא לערך Enabled:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
מפעילים מחדש את Chrome.
(אופציונלי) מורידים את המודל במכשיר לפני הבקשה הראשונה.
ממשק ה-API של ההנחיות מוטמע ב-Chrome, אבל המודל במכשיר לא זמין כברירת מחדל. אם עדיין לא הורדתם את המודל לפני הבקשה הראשונה להסקת מסקנות במכשיר, הבקשה תתחיל אוטומטית את הורדת המודל ברקע.
שלב 2: הגדרת פרויקט 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 לאפליקציה, ממשיכים לשלב הבא במדריך הזה.
שלב 3: הוספת ה-SDK
הספרייה של Firebase מספקת גישה לממשקי ה-API לאינטראקציה עם מודלים גנרטיביים. הספרייה כלולה כחלק מ-Firebase JavaScript SDK לאינטרנט.
מתקינים את Firebase JS SDK לאינטרנט באמצעות npm:
npm install firebaseמפעילים את 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 כדי לראות את התוכן והקוד הספציפיים לספק בדף הזה. |
לפני ששולחים למודל בקשת הנחיה, צריך להגדיר את הדברים הבאים.
מאתחלים את השירות עבור ספק ה-API שבחרתם.
יוצרים מכונת
GenerativeModel. חשוב לבצע את הפעולות הבאות:הפעלת הפונקציה
getGenerativeModelאחרי או במהלך אינטראקציה של משתמש קצה (למשל, לחיצה על לחצן). זוהי דרישה מוקדמת לשימוש ב-inferenceMode.מגדירים את
modeלאחד מהערכים הבאים:
PREFER_ON_DEVICE: שימוש במודל במכשיר אם הוא זמין, אחרת מעבר למודל שמתארח בענן.
ONLY_ON_DEVICE: שימוש במודל במכשיר אם הוא זמין, אחרת הפעלת חריגה.
PREFER_IN_CLOUD: אם המודל מתארח בענן, צריך להשתמש בו. אחרת, המערכת תעבור למודל במכשיר.
ONLY_IN_CLOUD: אם המודל מתארח בענן, צריך להשתמש בו. אחרת, צריך להפעיל חריגה.
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Call `getGenerativeModel` after or on an end-user interaction
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
שלב 5: שליחת בקשת הנחיה למודל
בקטע הזה מוסבר איך לשלוח סוגים שונים של קלט כדי ליצור סוגים שונים של פלט, כולל:
אם רוצים ליצור פלט מובנה (כמו 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();
שימו לב ש-Firebase AI Logic תומך גם בסטרימינג של תשובות טקסט באמצעות generateContentStream (במקום generateContent).
יצירת טקסט מקלט של טקסט ותמונה (מולטי-מודאלי)
| לפני שמנסים את הדוגמה הזו, חשוב לוודא שסיימתם את הקטע תחילת העבודה במדריך הזה. |
אתם יכולים להשתמש ב-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();
שימו לב ש-Firebase AI Logic תומך גם בסטרימינג של תשובות טקסט באמצעות generateContentStream (במקום generateContent).
איך מאפשרים למשתמשי קצה לנסות את התכונה
כדי שמשתמשי קצה יוכלו לנסות את התכונה באפליקציה שלכם, אתם צריכים להירשם לניסויי מקור ב-Chrome. שימו לב שגרסאות הניסיון האלה מוגבלות בזמן ובשימוש.
נרשמים לגרסת המקור לניסיון של Prompt API ב-Chrome. יינתן לכם טוקן.
צריך לספק את האסימון בכל דף אינטרנט שרוצים להפעיל בו את תכונת הניסיון. אפשר לבחור באחת מהאפשרויות הבאות:
מעבירים את הטוקן כמטא תג בתג
<head>:<meta http-equiv="origin-trial" content="TOKEN">מעבירים את הטוקן ככותרת HTTP:
Origin-Trial: TOKENמספקים את הטוקן באמצעות תוכנה.
מה עוד אפשר לעשות?
בקטע הזה נסביר איך להגדיר מצב הסקה, לבטל את מודל ברירת המחדל לגיבוי שמתארח בענן ולהשתמש בהגדרת המודל כדי לשלוט בתשובות (למשל, ליצור פלט מובנה).
הגדרת מצב הסקה
בדוגמאות בהגדרה הכללית נעשה שימוש במצב PREFER_ON_DEVICE, אבל זה רק אחד מארבעת מצבי ההסקה הזמינים.
PREFER_ON_DEVICE: שימוש במודל במכשיר אם הוא זמין, אחרת מעבר למודל שמתארח בענן.const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
ONLY_ON_DEVICE: שימוש במודל במכשיר אם הוא זמין, אחרת הפעלת חריגה.const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });
PREFER_IN_CLOUD: אם המודל מתארח בענן, צריך להשתמש בו. אחרת, המערכת תעבור למודל במכשיר.const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
ONLY_IN_CLOUD: אם המודל מתארח בענן, צריך להשתמש בו. אחרת, צריך להפעיל חריגה.const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });
קביעה אם נעשה שימוש בהסקת מסקנות במכשיר או בענן
אם משתמשים במצבי ההסקה PREFER_ON_DEVICE או PREFER_IN_CLOUD, כדאי לדעת באיזה מצב נעשה שימוש בבקשות מסוימות. המידע הזה מסופק על ידי המאפיין inferenceSource של כל תגובה (זמין החל מ-JS SDK v12.5.0).
כשניגשים למאפיין הזה, הערך שמוחזר יהיה ON_DEVICE או IN_CLOUD.
// ...
console.log('You used: ' + result.response.inferenceSource);
console.log(result.response.text());
שינוי מודל ברירת המחדל של הגיבוי
מודל ברירת המחדל שמתארח בענן הוא gemini-2.5-flash-lite
המודל הזה הוא מודל חלופי שמתארח בענן כשמשתמשים במצב PREFER_ON_DEVICE. זה גם המודל שמוגדר כברירת מחדל כשמשתמשים במצב ONLY_IN_CLOUD או במצב PREFER_IN_CLOUD.
אפשר להשתמש באפשרות ההגדרה inCloudParams כדי לציין מודל חלופי שמתארח בענן כברירת מחדל.
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
}
});
שימוש בהגדרות המודל כדי לשלוט בתשובות
בכל בקשה למודל, אפשר לשלוח הגדרת מודל כדי לשלוט באופן שבו המודל יוצר תשובה. מודלים שמארחים בענן ומודלים במכשיר מציעים אפשרויות שונות להגדרה.
ההגדרה נשמרת למשך מחזור החיים של המופע. אם רוצים להשתמש בהגדרה אחרת, צריך ליצור מופע חדש של GenerativeModel עם ההגדרה הזו.
הגדרת מודל שמתארח בענן
משתמשים באפשרות inCloudParams כדי להגדיר מודל Gemini שמתארח בענן. מידע על הפרמטרים הזמינים
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
temperature: 0.8,
topK: 10
}
});
הגדרת מודל במכשיר
שימו לב: כדי להסיק מסקנות באמצעות מודל במכשיר, נעשה שימוש ב-Prompt API מ-Chrome.
משתמשים באפשרות onDeviceParams כדי להגדיר מודל במכשיר. מידע על הפרמטרים הזמינים
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
הגדרת הפלט המובנה (כמו JSON)
אפשר ליצור פלט מובנה (כמו 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: InferenceMode.INFERENCE_MODE,
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
אספקת כלים למודל כדי לעזור לו ליצור את התשובה (כמו קריאה לפונקציה, הפעלת קוד, הקשר של כתובת URL ועיגון באמצעות חיפוש Google)
ספירת טוקנים
- תמיד מחזירה שגיאה. המספר יהיה שונה בין מודלים שמארחים בענן לבין מודלים שפועלים במכשיר, ולכן אין מעבר אינטואיטיבי למודל חלופי.
מעקב אחרי AI במסוף Firebase להסקת מסקנות במכשיר.
- שימו לב שאפשר לעקוב אחרי כל מסקנה שמתקבלת באמצעות המודלים שמארחים בענן, בדיוק כמו אחרי מסקנות אחרות שמתקבלות באמצעות Firebase AI Logic client SDK for Web.
רוצה לספר לנו על חוויית השימוש ב-Firebase AI Logic?