בדף הזה מתוארות אפשרויות ההגדרה הבאות לחוויות היברידיות ולחוויות במכשיר:
חשוב לוודא שסיימתם את מדריך תחילת העבודה ליצירת חוויות היברידיות.
הגדרת 'מצב הסקה'
בדוגמאות במדריך לתחילת העבודה מוסבר איך ליישם ניסיון להסיק מסקנות במכשיר קודם, ואז לחזור למודל שמתארח בענן. זו רק אחת מתוך "שיטות ההסקה" הזמינות שאפשר להטמיע.
הסקת מסקנות היברידית
העדפה של הסקה במכשיר: מגדירים את
primaryלמודל 'מערכת' ואתsecondaryלמודל ענן.אם המודל במכשיר זמין ותומך בסוג הבקשה, המערכת תנסה להשתמש בו. אחרת, תתועד שגיאה במכשיר ואז המכשיר יחזור אוטומטית למודל שמתארח בענן.
// Imports + initialization of Gemini API backend service // ... // Initialize a cloud model that supports your use case let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME") // Initialize an on-device model that supports your use case let systemModel = FirebaseAI.SystemLanguageModel.default // Create a GenerativeModelSession with a hybrid model. // Provide your preferred model as `primary` and your fallback model as `secondary` // Attempt to use the on-device model; otherwise, fall back to the cloud-hosted model. let session = ai.generativeModelSession( model: .hybridModel(primary: systemModel, secondary: cloudModel) )העדפה של הסקה בענן: מגדירים את
primaryלמודל ענן ואתsecondaryלמודל 'מערכת'.אם המכשיר מחובר לאינטרנט והמודל זמין, כדאי לנסות להשתמש במודל שמתארח בענן. אם המכשיר אופליין, הוא יחזור להשתמש במודל שנמצא במכשיר. בכל מקרה אחר של כשל, מופעלת חריגה.
// Imports + initialization of Gemini API backend service // ... // Initialize a cloud model that supports your use case let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME") // Initialize an on-device model that supports your use case let systemModel = FirebaseAI.SystemLanguageModel.default // Create a GenerativeModelSession with a hybrid model. // Provide your preferred model as `primary` and your fallback model as `secondary` // Attempt to use the cloud-hosted model; otherwise, fall back to the on-device model. let session = ai.generativeModelSession( model: .hybridModel(primary: cloudModel, secondary: systemModel) )
הסקת מסקנות רק במכשיר או רק בענן
ה-SDK תומך בהגדרה של רק model אחת, כלומר ה-SDK ינסה רק להסיק מסקנות במכשיר או בענן. בנוסף, לא יוצרים HybridModel לתרחיש השימוש הזה. עם זאת, כדי ליצור חוויה היברידית, צריך ליצור HybridModel ולהגדיר גם את המודלים primary וגם את המודלים secondary (כמו שמתואר למעלה).
הסקת מסקנות רק במכשיר: מגדירים את
modelלמודל 'מערכת'. לא יוצריםHybridModelלתרחיש השימוש הזה.אם המודל במכשיר זמין ותומך בסוג הבקשה, המערכת תנסה להשתמש בו. אחרת, מופעל חריג.
// Imports + initialization of Gemini API backend service // ... // Initialize an on-device model that supports your use case let systemModel = FirebaseAI.SystemLanguageModel.default // Create a GenerativeModelSession with the on-device model. let session = ai.generativeModelSession( model: systemModel )היקש בענן בלבד: מגדירים את
modelלמודל ענן. לא יוצריםHybridModelבתרחיש השימוש הזה.אם המכשיר מחובר לאינטרנט והמודל זמין, כדאי לנסות להשתמש במודל שמתארח בענן. אחרת, מופעל חריג.
// Imports + initialization of Gemini API backend service // ... // Initialize a cloud model that supports your use case let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME") // Create a GenerativeModelSession with a cloud model. let session = ai.generativeModelSession( model: cloudModel )
איך בודקים אם המודל במכשיר זמין
בדיקות ידניות של הזמינות במכשיר נחוצות רק אם רוצים להציג את המידע הזה למשתמש או לבקש ממשתמשי הקצה לבצע פעולה כדי להוריד את המודל במכשיר. אם המודל במכשיר לא זמין – והגדרתם את primary למודל במכשיר ואת secondary למודל בענן – ה-SDK יחזור אוטומטית לשימוש במודל שמתארח בענן.
כדי לבדוק באופן ידני אם אפשר להשתמש במודל במכשיר, בודקים את המאפיין isAvailable:
if FirebaseAI.SystemLanguageModel.default.isAvailable {
// The on-device model is ready to use.
} else {
// The on-device model is unavailable.
}
כדי לבדוק סיבות ספציפיות לזמינות של מודל במכשיר, בודקים את המאפיין availability:
switch FirebaseAI.SystemLanguageModel.default.availability {
case .available:
// The on-device model is ready to use.
break
case .unavailable(.deviceNotEligible):
// This device does not support Apple Intelligence.
break
case .unavailable(.appleIntelligenceNotEnabled):
// The user has not enabled Apple Intelligence in Settings.
break
case .unavailable(.modelNotReady):
// The model is still being downloaded.
break
case let .unavailable(reason):
// The model is unavailable due to the specified `reason`.
break
}
איך בודקים אם נעשה שימוש בהסקת מסקנות במכשיר או בענן
אם אתם משתמשים ב-HybridModel (ומגדירים גם את מודל primary וגם את מודל secondary),
יכול להיות שיהיה לכם שימושי לדעת באיזה מודל נעשה שימוש בבקשה מסוימת.
המידע הזה מופיע במאפיין modelVersion של rawResponse בכל תגובה.
כשניגשים למאפיין הזה, הערך שמוחזר יהיה אחד מהערכים הבאים:
- המודל שמתארח בענן שבו נעשה שימוש: שם המודל, לדוגמה
gemini-3.1-flash-lite - המודל שנעשה בו שימוש במכשיר:
apple-foundation-models-system-language-model
// let response = try await session.respond(to: ...
print("You used: \(response.rawResponse.modelVersion)")
print(response.content)
שימוש בהגדרות המודל כדי לשלוט בתשובות
בכל בקשה למודל, אפשר לשלוח הגדרת מודל כדי לשלוט באופן שבו המודל יוצר תשובה. מודלים שמתארחים בענן ומודלים במכשיר מציעים אפשרויות הגדרה שונות (פרמטרים של cloud לעומת on-device).
- מודלים שמתארחים בענן: מגדירים את ההגדרה שלהם ב-
GenerationConfig. - מודלים במכשיר: מגדירים את ההגדרה שלהם בתוך
FirebaseAI.GenerationOptions.
האפשרויות האלה מוגדרות לכל בקשה למודל.
דוגמה להגדרות של המודלים שמתארחים בענן ושל המודלים במכשיר להסקת מסקנות היברידית:
// ...
let response = try await session.respond(
to: "Why is the sky blue?",
options: .hybrid(
// Config for cloud-hosted model
gemini: GenerationConfig(
temperature: 0.8,
topP: 0.9,
thinkingConfig: ThinkingConfig(thinkingLevel: .high)
),
// Config for on-device model
foundationModels: FirebaseAI.GenerationOptions(
sampling: .random(probabilityThreshold: 0.9),
temperature: 0.8
)
)
)
// ...
רוצה לתת משוב על חוויית השימוש ב-Firebase AI Logic?