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


С помощью Firebase AI Logic вы можете создавать приложения и функции для Android с поддержкой ИИ, используя гибридный вывод. Гибридный вывод позволяет запускать вывод с использованием моделей, размещенных на устройстве, если это возможно, и плавно переключаться на облачные модели в противном случае (и наоборот).

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

Обратите внимание, что вывод данных на устройстве с помощью Firebase AI Logic поддерживается для приложений Android, работающих на определенных устройствах , и регулируется условиями ML Kit , а также условиями, специфичными для аспектов Gen AI в ML Kit .

Рекомендуемые варианты использования и поддерживаемые возможности

Рекомендуемые варианты использования

  • Использование встроенной в устройство модели для выполнения вычислений дает следующие преимущества:

    • Повышенная конфиденциальность
    • Локальный контекст
    • Выводы без затрат
    • Автономная функциональность
  • Использование гибридных функций предоставляет следующие возможности:

    • Расширьте охват своей аудитории, обеспечив доступность модели устройства и подключение к интернету.

Поддерживаемые возможности и функции для выполнения вычислений на устройстве.

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

Обязательно ознакомьтесь со списком пока недоступных функций для обработки данных на устройстве внизу этой страницы.

Прежде чем начать

Обратите внимание на следующее:

Поддерживаемые устройства Android и их модели, указанные на устройстве.

Для выполнения вычислений непосредственно на устройстве (с использованием API Prompt в ML Kit) список поддерживаемых устройств и их моделей можно найти в документации ML Kit.

Начните

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

Шаг 1 : Создайте проект Firebase и подключите ваше приложение к Firebase.

  1. Войдите в консоль Firebase , а затем выберите свой проект Firebase.

  2. В консоли Firebase перейдите на страницу Firebase AI Logic .

  3. Нажмите « Начать» , чтобы запустить пошаговый рабочий процесс, который поможет вам настроить необходимые API и ресурсы для вашего проекта.

  4. Настройте свой проект для использования поставщика " Gemini API ".

    Мы рекомендуем начать работу с использованием API Gemini Developer . В любой момент вы всегда можете настроить API Vertex AI Gemini (и необходимые для выставления счетов параметры).

    Для доступа к Gemini Developer API консоль активирует необходимые API и создаст ключ Gemini API в вашем проекте.
    Не добавляйте этот API-ключ Gemini в код вашего приложения. Узнайте больше.

  5. Если в процессе работы консоли появится соответствующее сообщение, следуйте инструкциям на экране, чтобы зарегистрировать ваше приложение и подключить его к Firebase.

  6. Чтобы добавить SDK в ваше приложение, перейдите к следующему шагу в этом руководстве.

Шаг 2 : Добавьте необходимые SDK.

SDK Firebase AI Logic для Android ( firebase-ai ) вместе с SDK Firebase AI Logic для устройств ( firebase-ai-ondevice ) предоставляют доступ к API для взаимодействия с генеративными моделями.

В файл Gradle вашего модуля (уровня приложения) (например, <project>/<app-module>/build.gradle.kts ) добавьте зависимости для библиотек Firebase AI Logic для Android:

Kotlin

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.10.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")
}

Java

Для Java необходимо добавить две дополнительные библиотеки.

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.10.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

Шаг 3 : Проверьте, доступна ли данная модель устройства.

С помощью FirebaseAIOnDevice проверьте, доступна ли модель на устройстве, и загрузите модель, если она недоступна.

После загрузки AICore будет автоматически обновлять модель. Более подробную информацию об AICore и управлении загрузкой модели на устройство см. в примечаниях после приведенного фрагмента кода.

Kotlin

val status = FirebaseAIOnDevice.checkStatus()
when (status) {
  OnDeviceModelStatus.UNAVAILABLE -> {
    Log.w(TAG, "On-device model is unavailable")
  }

  OnDeviceModelStatus.DOWNLOADABLE -> {
    FirebaseAIOnDevice.download().collect { status ->
      when (status) {
        is DownloadStatus.DownloadStarted ->
          Log.w(TAG, "Starting download - ${status.bytesToDownload}")

        is DownloadStatus.DownloadInProgress ->
          Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")

        is DownloadStatus.DownloadCompleted ->
          Log.w(TAG, "On-device model download complete")

        is DownloadStatus.DownloadFailed ->
          Log.e(TAG, "Download failed ${status}")
      }
    }
  }
  OnDeviceModelStatus.DOWNLOADING -> {
    Log.w(TAG, "On-device model is being downloaded")
  }

  OnDeviceModelStatus.AVAILABLE -> {
    Log.w(TAG, "On-device model is available")
  }
}

Java

Checking for and downloading the model is not yet available for Java.

However, all other APIs and interactions in this guide are available for Java.

Обратите внимание на следующие моменты, касающиеся загрузки модели устройства:

  • Время, необходимое для загрузки данных на устройство, зависит от многих факторов, включая вашу сеть.

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

  • Если модель, размещенная на устройстве, недоступна при отправке запроса на вывод данных с устройства, SDK не будет автоматически запускать загрузку модели с устройства. SDK либо воспользуется моделью, размещенной в облаке, либо выдаст исключение (подробнее о поведении режимов вывода данных см. в соответствующем разделе).

  • AICore (системная служба Android) управляет процессом загрузки модели и версии устройства, поддерживая актуальность модели и т.д. Обратите внимание, что на устройстве будет загружена только одна модель, поэтому, если другое приложение на устройстве ранее успешно загрузило модель, указанную на устройстве, то эта проверка покажет, что модель доступна.

Оптимизация задержки

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

Шаг 4 : Инициализируйте сервис и создайте экземпляр модели.

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

Перед отправкой запроса модели выполните следующие действия.

  1. Инициализируйте сервис для выбранного вами API-провайдера.

  2. Создайте экземпляр GenerativeModel и установите один из следующих mode . Приведенные здесь описания носят общий характер, но вы можете узнать подробности о поведении этих режимов в разделе «Установка режима вывода» .

    • PREFER_ON_DEVICE : Предпринята попытка использовать модель, размещенную на устройстве; в противном случае, будет использована облачная модель .

    • ONLY_ON_DEVICE : Попытка использования модели, установленной на устройстве; в противном случае, генерировать исключение .

    • PREFER_IN_CLOUD : Попытаться использовать облачную модель; в противном случае, вернуться к модели, размещенной на устройстве .

    • ONLY_IN_CLOUD : Попытаться использовать облачную модель; в противном случае сгенерировать исключение .

Kotlin

// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)

// ...

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
    )

Java

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        "MODEL_NAME",
        new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
    );

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Шаг 5 : Отправьте запрос модели.

В этом разделе показано, как отправлять различные типы входных данных для генерации различных типов выходных данных, включая:

Создание текста из текстового ввода.

Прежде чем попробовать этот пример, убедитесь, что вы выполнили раздел « Начало работы» данного руководства.

Вы можете использовать generateContent() для генерации текста из запроса, содержащего текст:

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."

// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
Content prompt = new Content.Builder()
    .addText("Write a story about a magic backpack.")
    .build();

// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent ).

Генерация текста из текстово-графического (мультимодального) входного сигнала.

Прежде чем попробовать этот пример, убедитесь, что вы выполнили раздел « Начало работы» данного руководства.

Вы можете использовать generateContent() для генерации текста из приглашения, содержащего текст и до одного файла изображения (только в формате Bitmap) — указав mimeType каждого входного файла и сам файл.

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)

// Provide a prompt that includes the image specified above and text
val prompt = content {
  image(bitmap)
  text("What developer tool is this mascot from?")
}

// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Обратите внимание, что Firebase AI Logic также поддерживает потоковую передачу текстовых ответов с помощью generateContentStream (вместо generateContent ).

Что еще можно сделать?

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

Функции, пока недоступные для вывода данных непосредственно на устройстве.

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

Функции, перечисленные в этом разделе , пока недоступны для выполнения на устройстве. Если вы хотите использовать какие-либо из этих функций, мы рекомендуем использовать режим выполнения ONLY_IN_CLOUD для более стабильной работы.

  • Генерация структурированного вывода (например, в формате JSON или перечислений).

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

  • Генерация текста из нескольких файлов изображений.

  • Генерация текста из аудио-, видео- и документальных файлов (например, PDF-файлов).

  • Создание изображений с использованием моделей Gemini или Imagen.

  • Предоставление файлов с использованием URL-адресов в многомодальных запросах. Необходимо предоставлять файлы в виде встроенных данных для моделей устройств.

  • Отправка запросов, превышающих 4000 токенов (или приблизительно 3000 английских слов).

  • Многоходовой чат

  • Предоставление модели инструментов , помогающих ей генерировать ответ (таких как вызов функций, выполнение кода, контекст URL и привязка к поиску Google).

Мониторинг ИИ в консоли Firebase не отображает никаких данных о результатах выполнения вычислений на устройстве (включая журналы устройства). Однако любые вычисления, использующие облачную модель, можно отслеживать так же, как и другие вычисления, с помощью Firebase AI Logic .

Дополнительные ограничения

Помимо вышеперечисленного, вывод данных непосредственно на устройстве имеет следующие ограничения (подробнее см. в документации ML Kit ):

  • Для выполнения операций непосредственно на устройстве конечный пользователь вашего приложения должен использовать поддерживаемое устройство .

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

  • Для анализа на устройстве были проверены только английский и корейский языки.

  • Максимальное количество токенов для всего запроса на вывод данных на устройстве составляет 4000. Если ваши запросы могут превысить этот лимит, убедитесь, что вы настроили режим вывода данных, который может использовать облачную модель.

  • Мы рекомендуем избегать сценариев вывода данных на устройстве, требующих длинных выходных данных (более 256 токенов).

  • AICore (системная служба Android, управляющая моделями устройств) устанавливает квоту на использование API для каждого приложения . Слишком большое количество запросов к API за короткий период времени приведет к ошибке ErrorCode.BUSY . Если вы получаете эту ошибку, рассмотрите возможность использования экспоненциальной задержки для повторной попытки запроса. Кроме того, может быть возвращено значение ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDED , если приложение превышает квоту на длительный период (например, суточную квоту).


Оставьте отзыв о вашем опыте использования Firebase AI Logic.