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

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

В каждом запросе к модели можно отправлять конфигурацию модели, чтобы контролировать, как она генерирует ответ. Модели, размещенные в облаке, и модели на устройстве предлагают разные варианты конфигурации (параметры 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