Konfigurationsoptionen für hybride Funktionen in Apple-Apps


Auf dieser Seite werden die folgenden Konfigurationsoptionen für Hybrid- und On-Device-Funktionen beschrieben:

Startleitfaden für die Entwicklung hybrider Apps

„Inference mode“ festlegen

In den Beispielen im Startleitfaden wird gezeigt, wie Sie versuchen, zuerst die Inferenz auf dem Gerät auszuführen, und dann auf das in der Cloud gehostete Modell zurückgreifen. Dies ist nur einer der verfügbaren „Inferenzmodi“, die Sie implementieren können.

Hybride Inferenz

  • Bevorzuge Inferenz auf dem Gerät: Setzen Sie primary auf ein „System“-Modell und secondary auf ein Cloud-Modell.

    Versuchen Sie, das On-Device-Modell zu verwenden, wenn es verfügbar ist und den Anfragetyp unterstützt. Andernfalls wird ein Fehler auf dem Gerät protokolliert und dann automatisch auf das in der Cloud gehostete Modell zurückgegriffen.

    // 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)
    )
    
  • Inferenz in der Cloud bevorzugen: Legen Sie primary auf ein Cloud-Modell und secondary auf ein „System“-Modell fest.

    Versuchen Sie, das in der Cloud gehostete Modell zu verwenden, wenn das Gerät online ist und das Modell verfügbar ist. Wenn das Gerät offline ist, wird auf das On-Device-Modell zurückgegriffen. In allen anderen Fehlerfällen wird eine Ausnahme ausgelöst.

    // 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)
    )
    

Nur Inferenz auf dem Gerät oder nur in der Cloud

Das SDK unterstützt nur die Festlegung eines einzelnen model. Das bedeutet, dass das SDK nur entweder die Inferenz auf dem Gerät oder in der Cloud versucht. Außerdem erstellen Sie für diesen Anwendungsfall keine HybridModel. Für eine hybride Lösung müssen Sie jedoch ein HybridModel erstellen und sowohl primary- als auch secondary-Modelle festlegen (wie oben beschrieben).

  • Nur Inferenz auf dem Gerät: Legen Sie model auf ein „System“-Modell fest. Sie erstellen für diesen Anwendungsfall keine HybridModel.

    Versuchen Sie, das On-Device-Modell zu verwenden, wenn es verfügbar ist und den Anfragetyp unterstützt. Andernfalls wird eine Ausnahme ausgelöst.

    // 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
    )
    
  • Nur Cloud-Inferenz: Legen Sie model auf ein Cloud-Modell fest. Für diesen Anwendungsfall erstellen Sie keine HybridModel.

    Versuchen Sie, das in der Cloud gehostete Modell zu verwenden, wenn das Gerät online ist und das Modell verfügbar ist. Andernfalls wird eine Ausnahme ausgelöst.

    // 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
    )
    

Prüfen, ob das On-Device-Modell verfügbar ist

Manuelle Prüfungen der Verfügbarkeit auf dem Gerät sind nur erforderlich, wenn Sie diese Informationen dem Nutzer präsentieren oder Endnutzer auffordern möchten, das On-Device-Modell herunterzuladen. Wenn das On-Device-Modell nicht verfügbar ist und Sie primary auf ein On-Device-Modell und secondary auf ein Cloud-Modell festgelegt haben, verwendet das SDK automatisch das in der Cloud gehostete Modell.

Wenn Sie manuell prüfen möchten, ob das On-Device-Modell tatsächlich verwendet werden kann, sehen Sie sich die isAvailable-Eigenschaft an:

if FirebaseAI.SystemLanguageModel.default.isAvailable {
  // The on-device model is ready to use.
} else {
  // The on-device model is unavailable.
}

Wenn Sie nach bestimmten Gründen für die Verfügbarkeit von On-Device-Modellen suchen möchten, prüfen Sie die Eigenschaft 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
}

Ermitteln, ob die Inferenz auf dem Gerät oder in der Cloud verwendet wurde

Wenn Sie ein HybridModel verwenden und sowohl primary- als auch secondary-Modelle festlegen, kann es hilfreich sein zu wissen, welches Modell für eine bestimmte Anfrage verwendet wurde. Diese Informationen werden durch das Attribut modelVersion von rawResponse in jeder Antwort bereitgestellt.

Wenn Sie auf diese Eigenschaft zugreifen, ist der zurückgegebene Wert einer der folgenden:

  • Verwendetes in der Cloud gehostetes Modell: der Modellname, z. B. gemini-3.1-flash-lite
  • Verwendetes On-Device-Modell: apple-foundation-models-system-language-model
// let response = try await session.respond(to: ...

print("You used: \(response.rawResponse.modelVersion)")

print(response.content)

Antworten mit der Modellkonfiguration steuern

In jeder Anfrage an ein Modell können Sie eine Modellkonfiguration senden, um zu steuern, wie das Modell eine Antwort generiert. Cloudbasierte und geräteinterne Modelle bieten unterschiedliche Konfigurationsoptionen (cloud- im Vergleich zu on-device-Parametern).

Diese Optionen werden für jede Anfrage an das Modell konfiguriert.

Hier ein Beispiel, in dem die Konfigurationen für die cloudbasierten und die On-Device-Modelle für die hybride Inferenz festgelegt werden:

// ...

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
    )
  )
)

// ...


Feedback zu Firebase AI Logic geben