Варианты конфигурации гибридных функций в приложениях для устройств 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 модель "system". В этом случае создавать 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)

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

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

  • Модели, размещенные в облаке: настройте их конфигурацию в файле 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