Как перейти с предварительной версии Vertex AI в Firebase SDK на Firebase AI Logic SDK


Firebase AI Logic и его клиентские SDK ранее назывались Vertex AI in Firebase. Чтобы лучше отразить расширение наших сервисов и функций (например, теперь мы поддерживаем Gemini Developer API!), мы переименовали и переупаковали наши сервисы в Firebase AI Logic.

Чтобы безопасно получать доступ к моделям генеративного ИИ от Google прямо из мобильных или веб-приложений, теперь вы можете выбрать поставщика Gemini API – давно доступный Agent Platform Gemini API (formerly Vertex AI) или новый Gemini Developer API. Это значит, что теперь вы можете использовать Gemini Developer API, в котором есть бесплатный уровень с разумными ограничениями частоты запросов и квотами.

Обзор шагов по переходу на SDK Firebase AI Logic

  • Шаг 1. Выберите поставщика Gemini API, который лучше всего подходит для вашего приложения и сценариев использования.

  • Шаг 2. Включите необходимые API.

  • Шаг 3. Обновите библиотеку, используемую в приложении.

  • Шаг 4. Обновите инициализацию в приложении.

  • Шаг 5. Обновите код в зависимости от используемых функций.

Шаг 1. Выберите поставщика Gemini API, который лучше всего подходит для вашего приложения

При переносе вы можете выбрать поставщика Gemini API:

  • Старые SDK Vertex AI in Firebase могли использовать только Agent Platform Gemini API (formerly Vertex AI).

  • Новые SDK Firebase AI Logic позволяют выбрать, к какому поставщику Gemini API вы хотите обращаться напрямую из мобильного или веб-приложения – Gemini Developer API или Agent Platform Gemini API (formerly Vertex AI).

Изучите различия между двумя поставщиками Gemini API, особенно в отношении поддерживаемых функций, цен и ограничений частоты запросов. Например, Gemini Developer API не поддерживает предоставление файлов с помощью URL Cloud Storage, но может быть хорошим выбором, если вы хотите воспользоваться его бесплатным уровнем и разумной квотой.

Шаг 2. Включите необходимые API

Чтобы использовать выбранного поставщика (Gemini API), убедитесь, что в вашем проекте Firebase включены все необходимые API.

Обратите внимание, что в проекте можно одновременно включить оба поставщика API.

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

  2. В консоли Firebase выберите AI Services (Сервисы ИИ) > AI Logic (Логика ИИ).

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

  4. Выберите поставщика Gemini API, которого вы хотите использовать с SDK Firebase AI Logic. При желании вы всегда можете настроить и использовать другого поставщика API.

    • Gemini Developer API – оплата необязательна (доступно в бесплатном тарифном плане Spark).
      Рабочий процесс консоли включит необходимые API и создаст ключ API Gemini в вашем проекте.
      Не добавляйте этот ключ API Gemini в базу кода приложения. Подробнее…

    • Agent Platform Gemini API (formerly Vertex AI) – требуется платежный аккаунт (необходим тарифный план Blaze с оплатой по мере использования).
      В процессе работы в консоли в вашем проекте будут включены необходимые API.

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

Шаг 3. Обновите библиотеку, используемую в приложении

Обновите базу кода приложения, чтобы использовать библиотеку Firebase AI Logic.

Swift

  1. Откройте проект приложения в Xcode и обновите пакет Firebase до версии 12.5.0 или более поздней, используя один из следующих вариантов:

    • Вариант 1. Обновите все пакеты. Для этого выберите File (Файл) > Packages (Пакеты) > Update to Latest Package Versions (Обновить до последних версий пакетов).

    • Вариант 2. Обновите Firebase отдельно. Для этого перейдите к пакету Firebase в разделе Package Dependencies (Зависимости пакетов). Нажмите правой кнопкой мыши на пакет Firebase и выберите Update Package (Обновить пакет).

  2. Убедитесь, что пакет Firebase теперь показывает версию 12.5.0 или более позднюю. Если нет, убедитесь, что указанные вами требования к пакету позволяют обновить его до версии 12.5.0 или более поздней.

  3. В редакторе проектов выберите цель приложения и перейдите в раздел Frameworks, Libraries, and Embedded Content (Фреймворки, библиотеки и встроенный контент).

  4. Добавьте новую библиотеку: нажмите кнопку + и выберите FirebaseAILogic из пакета Firebase.

  5. После переноса приложения (см. остальные разделы этого руководства) удалите старую библиотеку:
    Выберите FirebaseVertexAI-Preview и нажмите кнопку —.

Kotlin

  1. В файле Gradle на уровне модуля (приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle) замените старые зависимости (если применимо) на указанные ниже.

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

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Синхронизируйте проект для Android с файлами Gradle.

Если вы не хотите использовать Firebase Android BoM, просто добавьте зависимость для библиотеки firebase-ai и примите последнюю версию, предложенную Android Studio.

Java

  1. В файле Gradle на уровне модуля (приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle) замените старые зависимости (если применимо) на указанные ниже.

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

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Синхронизируйте проект для Android с файлами Gradle.

Если вы не хотите использовать Firebase Android BoM, просто добавьте зависимость для библиотеки firebase-ai и примите последнюю версию, предложенную Android Studio.

Web

  1. Получите последнюю версию Firebase JS SDK для Web с помощью npm:

    npm i firebase@latest

    ИЛИ

    yarn add firebase@latest
  2. Везде, где вы импортировали библиотеку, обновите операторы импорта, чтобы использовать firebase/ai.

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

    // BEFORE
    import { initializeApp } from "firebase/app";
    import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";
    
    
    // AFTER
    import { initializeApp } from "firebase/app";
    import { getAI, getGenerativeModel } from "firebase/ai";

Dart

  1. Чтобы использовать пакет firebase_ai в файле pubspec.yaml, выполните следующую команду в каталоге проекта Flutter:

    flutter pub add firebase_ai
  2. Перезапустите проект Flutter.

    flutter run
  3. После переноса приложения (см. остальные разделы этого руководства) удалите старый пакет:

    flutter pub remove firebase_vertexai

Unity

Поддержка Unity недоступна в Vertex AI in Firebase.

Узнайте, как начать работу с SDK Firebase AI Logic для Unity.

Шаг 4. Обновите инициализацию в приложении

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

Обновите способ инициализации сервиса для выбранного поставщика API и создайте экземпляр GenerativeModel.

Swift


import FirebaseAILogic

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-3.8-flash")

Kotlin


// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-3.8-flash")

Java


// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-3.8-flash");

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

Web


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });

Dart


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');

Unity

Поддержка Unity недоступна в регионе "Vertex AI in Firebase".

Узнайте, как начать работу с SDK Firebase AI Logic для Unity.

Обратите внимание, что в зависимости от используемой функции вы не всегда можете создать экземпляр GenerativeModel. Чтобы передавать входные и выходные данные в потоковом режиме с помощью Gemini Live API, создайте экземпляр LiveModel.

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

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

  • Если вы используете URL Cloud Storage и перешли на Gemini Developer API, то вам нужно обновить мультимодальные запросы, чтобы включать файлы как встроенные данные (или использовать URL YouTube для видео).

  • В общедоступные версии SDK Vertex AI in Firebase было внесено несколько изменений. Firebase AI Logic Ознакомьтесь с приведенными ниже списками, чтобы узнать, какие изменения вам может потребоваться внести в код для перехода на SDK Firebase AI Logic.

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

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

  • Генерирование структурированных выходных данных (например, JSON) с помощью responseSchema
    Если вы реализовали эту функцию до выпуска общей доступности, вам нужно будет обновить способ определения схемы. Рекомендуем ознакомиться с новым руководством по структурированным выходным данным, чтобы узнать, как писать схемы JSON.

  • Время ожидания

    • Время ожидания по умолчанию для запросов изменено на 180 секунд.

Обязательно в зависимости от платформы или языка

Swift

  • Перечисления

    • Большинство типов enum заменены на struct со статическими переменными. Это изменение позволяет более гибко развивать API с сохранением обратной совместимости. При использовании операторов switch теперь необходимо включать вариант default:, чтобы охватить неизвестные или необработанные значения, в том числе новые значения, которые будут добавлены в SDK в будущем.

    • Перечисление BlockThreshold переименовано в HarmBlockThreshold. Теперь этот тип является struct.

    • Из следующих перечислений (теперь struct) удалены варианты unknown и unspecified: HarmCategory, HarmBlockThreshold, HarmProbability, BlockReason и FinishReason.

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

  • Части контента

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

    • Варианты ModelContent.Part заменены следующими типами struct, соответствующими протоколу Part:

      • .text – TextPart
      • .data – InlineDataPart
      • .fileData – FileDataPart
      • .functionCall – FunctionCallPart
      • .functionResponse – FunctionResponsePart
  • Категория вреда

    • Тип HarmCategory больше не вложен в тип SafetySetting. Если вы называете его SafetySetting.HarmCategory, то можете заменить это название на HarmCategory.
  • Отзыв о безопасности

    • Удален тип SafetyFeedback, поскольку он не использовался ни в одном из ответов.
  • Метаданные цитирования

    • Свойство citationSources переименовано в citations в CitationMetadata.
  • Общее количество оплачиваемых символов

    • Свойство totalBillableCharacters в CountTokensResponse стало необязательным, чтобы отразить ситуации, когда символы не отправляются.
  • Ответ кандидата

    • Параметр CandidateResponse переименован в Candidate для соответствия другим платформам.
  • Конфигурация генерации

    • Общедоступные свойства изменены с "GenerationConfig" на "internal". Все они по-прежнему настраиваются в инициализаторе.

Kotlin

  • Перечисления

    • Заменено enum занятий и sealed занятий обычными занятиями. Это изменение позволяет более гибко развивать API с сохранением обратной совместимости.

    • Перечисление BlockThreshold переименовано в HarmBlockThreshold.

    • Удалены значения из следующих перечислений: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason и FinishReason.

  • Методы Blob

    • Все методы, в названии которых использовалось Blob, переименованы. Теперь в их названиях используется InlineData.
  • Настройки безопасности

    • Поле method теперь может иметь значение NULL.
  • Класс Duration

    • Удалены все случаи использования класса Duration в Kotlin. Вместо него используется long. Это изменение обеспечивает лучшую совместимость с Java.
  • Метаданные цитирования

    • Все поля, ранее объявленные в CitationMetadata, теперь объединены в новый класс Citation. Цитаты можно найти в списке citations в CitationMetadata. Это изменение позволяет лучше согласовать типы на разных платформах.
  • Подсчет токенов

    • Поле totalBillableCharacters теперь может иметь значение NULL.
  • Общее количество оплачиваемых символов

    • Свойство totalBillableCharacters в CountTokensResponse стало необязательным, чтобы отразить ситуации, когда символы не отправляются.
  • Создание экземпляра модели

    • Параметр requestOptions перемещен в конец списка параметров, чтобы обеспечить соответствие другим платформам.
  • Live API

    • Удалено значение UNSPECIFIED для класса перечисления ResponseModality. Вместо этого используйте null.

    • Название изменено с LiveGenerationConfig.setResponseModalities на LiveGenerationConfig.setResponseModality.

    • Удален класс LiveContentResponse.Status. Вместо него поля статуса вложены как свойства LiveContentResponse.

    • Удален класс LiveContentResponse. Вместо него добавлены подклассы LiveServerMessage, которые соответствуют ответам модели.

    • Теперь LiveModelFutures.connect возвращает ListenableFuture<LiveSessionFutures> вместо ListenableFuture<LiveSession>.

Java

  • Перечисления

    • Заменено enum занятий и sealed занятий обычными занятиями. Это изменение позволяет более гибко развивать API с сохранением обратной совместимости.

    • Перечисление BlockThreshold переименовано в HarmBlockThreshold.

    • Удалены значения из следующих перечислений: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason и FinishReason.

  • Методы Blob

    • Все методы, в названии которых использовалось Blob, переименованы. Теперь в их названиях используется InlineData.
  • Настройки безопасности

    • Поле method теперь может иметь значение NULL.
  • Класс Duration

    • Удалены все случаи использования класса Duration в Kotlin. Вместо него используется long. Это изменение обеспечивает лучшую совместимость с Java.
  • Метаданные цитирования

    • Все поля, ранее объявленные в CitationMetadata, теперь объединены в новый класс Citation. Цитаты можно найти в списке citations в CitationMetadata. Это изменение позволяет лучше согласовать типы на разных платформах.
  • Подсчет токенов

    • Поле totalBillableCharacters теперь может иметь значение NULL.
  • Общее количество оплачиваемых символов

    • Свойство totalBillableCharacters в CountTokensResponse стало необязательным, чтобы отразить ситуации, когда символы не отправляются.
  • Создание экземпляра модели

    • Параметр requestOptions перемещен в конец списка параметров, чтобы обеспечить соответствие другим платформам.
  • Live API

    • Удалено значение UNSPECIFIED для класса перечисления ResponseModality. Вместо этого используйте null.

    • Название изменено с LiveGenerationConfig.setResponseModalities на LiveGenerationConfig.setResponseModality.

    • Удален класс LiveContentResponse.Status. Вместо него поля статуса вложены как свойства LiveContentResponse.

    • Удален класс LiveContentResponse. Вместо него добавлены подклассы LiveServerMessage, которые соответствуют ответам модели.

    • Теперь LiveModelFutures.connect возвращает ListenableFuture<LiveSessionFutures> вместо ListenableFuture<LiveSession>.

  • Изменены различные методы Java builder, чтобы они правильно возвращали экземпляр своего класса вместо void.

Web

  • Перечисления

    • Удалены значения из следующих перечислений: HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReason и FinishReason.
  • Причина блокировки

    • Поле "blockReason" в форме "PromptFeedback" теперь необязательное.

Изменения требуются, только если вы начинаете использовать Gemini Developer API (вместо Agent Platform Gemini API (formerly Vertex AI)):

  • Настройки безопасности

    • Удалены случаи использования неподдерживаемого метода SafetySetting.method.
  • Встроенные данные

    • Удалены случаи использования неподдерживаемого метода InlineDataPart.videoMetadata.

Dart

  • Перечисления

    • Удалены значения из следующих перечислений: HarmCategory, HarmProbability, BlockReason и FinishReason.
  • Часть данных

    • DataPart переименован в InlineDataPart, а функция static data – в inlineData, чтобы обеспечить соответствие другим платформам.
  • Варианты запросов

    • Удален параметр RequestOptions, так как параметр timeout не работал. В ближайшем будущем мы добавим его снова, но уже в тип GenerativeModel, чтобы обеспечить соответствие другим платформам.
  • Как остановить последовательность

    • Параметр stopSequences в GenerationConfig теперь необязательный и по умолчанию имеет значение null, а не пустой массив.
  • Источники

    • Свойство citationSources переименовано в citations в CitationMetadata. Тип CitationSource был переименован в Citation, чтобы соответствовать другим платформам.
  • Ненужные общедоступные типы, методы и свойства

    • Удалены следующие типы, методы и свойства, которые были случайно раскрыты: defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequest и EmbedContentResponse.
  • Подсчет токенов

    • Из функции countTokens удалены лишние поля. Достаточно всего contents.
  • Создание экземпляра модели

    • Параметр systemInstruction перемещен в конец списка параметров, чтобы обеспечить соответствие другим платформам.
  • Функция встраивания

    • Из модели удалены неподдерживаемые функции встраивания (embedContent и batchEmbedContents).

Unity

Поддержка Unity недоступна в Vertex AI in Firebase.

Узнайте, как начать работу с SDK Firebase AI Logic для Unity.

Возможные ошибки, связанные с переносом

При переходе на общедоступную версию Firebase AI Logic могут возникать ошибки, если вы не внесли все необходимые изменения, описанные в этом руководстве по переносу.

Ошибка 403: Requests to this API firebasevertexai.googleapis.com ... are blocked.

Если вы получаете ошибку 403 с сообщением Requests to this API firebasevertexai.googleapis.com ... are blocked., обычно это означает, что в белом списке ключа API Firebase в файле конфигурации или объекте Firebase нет API, необходимого для продукта, который вы пытаетесь использовать.

Убедитесь, что ключ API Firebase, используемый вашим приложением, содержит все необходимые API, включенные в белый список ограничений API ключа. Для Firebase AI Logic в белом списке ключа Firebase API должен быть как минимум Firebase AI Logic API. Этот API должен был автоматически добавиться в белый список ключа API, когда вы включили нужные API в консоли Firebase.

Все ключи API можно посмотреть на панели APIs & Services (API и сервисы) > Credentials (Учетные данные) в консоли Google Cloud.


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