Как перейти с предварительной версии 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 выберите Сервисы ИИ > Логика ИИ.

  3. Нажмите Get started (Начать), чтобы запустить пошаговый процесс настройки необходимых 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.0.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.0.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 для сайта, используйте 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".

Подробнее о том, как начать работу с Firebase AI Logic SDK для 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".

Подробнее о том, как начать работу с Firebase AI Logic SDK для Unity…

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

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

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

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

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

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

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

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

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

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

Требуется в зависимости от платформы или языка

Swift

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

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

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

    • Удалены случаи unknown и unspecified из следующих перечислений (теперь struct): 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 теперь может иметь нулевое значение.
  • Класс Duration

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

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

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

    • Свойство 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 теперь может иметь нулевое значение.
  • Класс Duration

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

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

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

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

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

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

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

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

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

    • Изменено значение LiveModelFutures.connect, теперь возвращается ListenableFuture<LiveSessionFutures> вместо ListenableFuture<LiveSession>.

  • Изменены различные методы создания объектов Java, чтобы они правильно возвращали экземпляр своего класса, а не 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".

Подробнее о том, как начать работу с Firebase AI Logic SDK для 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" ключа API Firebase, используемого вашим приложением, включены все необходимые API. Для Firebase AI Logic в белом списке ключа API Firebase должен быть хотя бы один API: Firebase AI Logic. Этот API должен был автоматически добавиться в белый список вашего ключа API, когда вы включили необходимые API в консоли Firebase.

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


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