Варианты конфигурации гибридных функций в приложениях для устройств Apple


На этой странице описаны следующие варианты конфигурации для гибридных и локальных решений:

Убедитесь, что вы выполнили все действия, описанные в руководстве по началу работы с гибридными приложениями.

Как настроить режим инференса

В примерах из краткого руководства показано, как реализовать попытку вывода на устройстве, а затем вернуться к модели, размещенной в облаке. Это лишь один из доступных режимов инференса, которые вы можете использовать.

Гибридный вывод

  • Предпочитать инференс на устройстве. Задайте для 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)

Как управлять ответами с помощью конфигурации модели

В каждом запросе к модели вы можете отправить конфигурацию модели, чтобы контролировать, как модель генерирует ответ. Для облачных и локальных моделей доступны разные параметры конфигурации (облачные и локальные).

Эти параметры настраиваются для каждого запроса к модели.

Вот пример, в котором задаются конфигурации для облачной и локальной моделей для гибридного вывода:

// ...

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