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


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

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

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

В примерах из руководства по началу работы используется режим PREFER_ON_DEVICE, но это лишь один из четырех доступных режимов логического вывода.

Доступны следующие режимы вывода:

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

    Kotlin

    val config = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
    

    Java

    InferenceMode mode = InferenceMode.PREFER_ON_DEVICE;
    OnDeviceConfig config = new OnDeviceConfig(mode);
    
  • ONLY_ON_DEVICE – попытаться использовать модель на устройстве, если она доступна и поддерживает тип запроса. В противном случае выдайте исключение.

    Kotlin

    val config = OnDeviceConfig(mode = InferenceMode.ONLY_ON_DEVICE)
    

    Java

    InferenceMode mode = InferenceMode.ONLY_ON_DEVICE;
    OnDeviceConfig config = new OnDeviceConfig(mode);
    
  • PREFER_IN_CLOUD: попытаться использовать модель, размещенную в облаке, если устройство подключено к интернету и модель доступна. Если устройство офлайн, используйте модель на устройстве. Во всех остальных случаях выбрасывайте исключение.

    Kotlin

    val config = OnDeviceConfig(mode = InferenceMode.PREFER_IN_CLOUD)
    

    Java

    InferenceMode mode = InferenceMode.PREFER_IN_CLOUD;
    OnDeviceConfig config = new OnDeviceConfig(mode);
    
  • ONLY_IN_CLOUD: попытаться использовать модель, размещенную в облаке, если устройство подключено к интернету и модель доступна. В противном случае выдайте исключение.

    Kotlin

    val config = OnDeviceConfig(mode = InferenceMode.ONLY_IN_CLOUD)
    

    Java

    InferenceMode mode = InferenceMode.ONLY_IN_CLOUD;
    OnDeviceConfig config = new OnDeviceConfig(mode);
    

Определить, использовался ли вывод на устройстве или в облаке

Если для режима вывода задано значение PREFER_ON_DEVICE или PREFER_IN_CLOUD, вам может быть полезно знать, какой режим использовался для определенных запросов. Эта информация предоставляется в свойстве inferenceSource каждого ответа.

При обращении к этому свойству возвращается значение ON_DEVICE или IN_CLOUD.

Kotlin

// ...

print("You used: ${result.response.inferenceSource}")

print(result.response.text)

Java

// ...

System.out.println("You used: " + result.getResponse().getInferenceSource());

System.out.println(result.getResponse().getText());

Как указать модель

Нажмите на поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему.

Вы можете указать модель, которую нужно использовать при создании экземпляра generativeModel (Kotlin | Java).

  • Укажите модель, размещенную в облаке:

    • Если для режима вывода выбрано значение PREFER_ON_DEVICE, PREFER_IN_CLOUD или ONLY_IN_CLOUD, то вы должны явным образом указать, какую модель, размещенную в облаке, следует использовать. В SDK нет облачной модели по умолчанию.

    • Найти названия моделей для всех поддерживаемых облачных моделей Gemini.

  • Укажите локальную модель:

    • Если режим вывода – PREFER_ON_DEVICE, PREFER_IN_CLOUD или ONLY_ON_DEVICE, вы можете необязательно указать в onDeviceConfig категорию модели на устройстве. Категории представляют собой сочетание этапа выпуска и характеристик производительности.

    • Ниже перечислены поддерживаемые значения категорий.
      AICore автоматически выбирает модель на устройстве, которая соответствует условиям указанной категории и поддерживается устройством. Например, если вы укажете PREVIEW и устройство будет Pixel 9, то, скорее всего, будет автоматически выбрана модель Gemini Nano 4 Full [Preview] (nano-v4-full).

      • STABLE – последняя стабильная модель на устройстве.

        • Протестировано на потребительских устройствах.

        • Например, Gemini Nano 3 (nano-v3) или Gemini Nano 2 (nano-v2).

        • Настройка по умолчанию для модели на устройстве, если не указан тег OnDeviceModelOption.

      • PREVIEW – новейшая предварительная версия модели на устройстве с полной производительностью.

        • Разработана для выполнения сложных задач, требующих логического мышления.

        • Например, Gemini Nano 4 Full [предварительная версия] (nano-v4-full, основанная на Gemma 4 E4B).

      • PREVIEW_FAST – новейшая предварительная версия локальной модели, которая работает быстро.

        • Оптимизировано для максимальной скорости и минимальной задержки.

        • Например, Gemini Nano 4 Fast [предварительная версия] (nano-v4-fast, которая основана на Gemma 4 E2B).

Kotlin

val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        // Specify a cloud-hosted model.
        // Required for `PREFER_ON_DEVICE`, `PREFER_IN_CLOUD`, and `ONLY_IN_CLOUD` inference modes.
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(
            mode = InferenceMode.INFERENCE_MODE,
            // (Optional) Specify an on-device model category.
            // AICore will auto-select an on-device model based on this category.
            // If not specified, AICore will auto-select the default stable on-device model.
            modelOption = OnDeviceModelOption.ON-DEVICE_MODEL_CATEGORY)
    )

Java

GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        // Specify a cloud-hosted model.
        // Required for `PREFER_ON_DEVICE`, `PREFER_IN_CLOUD`, and `ONLY_IN_CLOUD` inference modes.
        "CLOUD_MODEL_NAME",
        /* config = */ null,
        /* safetySettings = */ null,
        /* tools = */ null,
        /* toolConfig = */ null,
        /* systemInstruction = */ null,
        /* requestOptions = */ new RequestOptions(),
        new OnDeviceConfig(
                /* mode = */ InferenceMode.INFERENCE_MODE,
                /* maxOutputTokens = */ null,
                /* temperature = */ null,
                /* topK = */ null,
                /* seed = */ null,
                /* candidateCount = */ 1,
                // (Optional) Specify an on-device model category.
                // AICore will auto-select an on-device model based on this category.
                // If not specified, AICore will auto-select the default stable on-device model.
                /* modelOption = */ OnDeviceModelOption.ON-DEVICE_MODEL_CATEGORY)
    );

GenerativeModelFutures model = GenerativeModelFutures.from(ai);

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

Нажмите на поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему.

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

  • Модели, размещенные в облаке. Настройте конфигурацию с помощью generationConfig (Kotlin или Java). Подробнее о доступных параметрах…

  • Модели на устройстве. Настройте конфигурацию с помощью onDeviceConfig (Kotlin | Java). Узнайте больше о доступных параметрах (Kotlin | Java).

Конфигурация сохраняется на протяжении всего времени существования экземпляра. Если вы хотите использовать другую конфигурацию, создайте новый экземпляр GenerativeModel с этой конфигурацией.

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

Kotlin

// Config for cloud-hosted model
val generationConfig = generationConfig {
    maxOutputTokens = 200
    stopSequences = listOf("red")
}

// Config for on-device model
val onDeviceConfig = OnDeviceConfig(
    mode = InferenceMode.PREFER_ON_DEVICE,
    maxOutputTokens = 200
)

val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        generationConfig = generationConfig,
        onDeviceConfig = onDeviceConfig
    )

Java

// Config for cloud-hosted model
GenerationConfig generationConfig = new GenerationConfig.Builder()
    .setMaxOutputTokens(200)
    .setStopSequences(List.of("red"))
    .build();

// Config for on-device model
OnDeviceConfig onDeviceConfig = new OnDeviceConfig(
    /* mode = */ InferenceMode.PREFER_ON_DEVICE,
    /* maxOutputTokens = */ 200,
    /* temperature = */ null,
    /* topK = */ null,
    /* seed = */ null,
    /* candidateCount = */ 1,
    /* modelOption = */ null
);

GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        "CLOUD_MODEL_NAME",
        generationConfig,
        /* safetySettings = */ null,
        /* tools = */ null,
        /* toolConfig = */ null,
        /* systemInstruction = */ null,
        /* requestOptions = */ new RequestOptions(),
        onDeviceConfig
    );

GenerativeModelFutures model = GenerativeModelFutures.from(ai);


Оставить отзыв о работе Firebase AI Logic