Переход на Firebase AI Logic SDKs с предварительной версии Vertex AI in Firebase SDKs


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

Чтобы безопасно получить доступ к моделям генеративного ИИ Google напрямую из мобильных или веб-приложений, теперь вы можете выбрать поставщика « Gemini API » — либо давно доступный Vertex AI Gemini API , либо теперь Gemini Developer API . Это означает, что теперь у вас есть возможность использовать Gemini Developer API , который предоставляет бесплатный уровень с разумными ограничениями по скорости и квотами.

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

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

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

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

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

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

Шаг 1 : Выберите лучшего поставщика «Gemini API» для вашего приложения

При этой миграции у вас есть выбор поставщика « Gemini API »:

  • Старые SDK « Vertex AI in Firebase » могли использовать только API Vertex AI Gemini .

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

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

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

Убедитесь, что в вашем проекте Firebase включены все необходимые API для использования выбранного вами поставщика « Gemini API ».

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

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

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

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

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

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

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

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

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

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

Быстрый

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

    • Вариант 1 : Обновить все пакеты: Перейдите в Файл > Пакеты > Обновить до последних версий пакетов .

    • Вариант 2 : Обновите Firebase по отдельности: Перейдите к пакету Firebase в разделе Package Dependencies . Щелкните правой кнопкой мыши по пакету Firebase, а затем выберите Update Package .

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

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

  4. Добавьте новую библиотеку: нажмите кнопку + , а затем добавьте FirebaseAI из пакета 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:33.14.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:33.14.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. Обновите файл pubspec.yaml , чтобы использовать пакет firebase_ai , выполнив следующую команду из каталога проекта Flutter:

    flutter pub add firebase_ai
  2. Перестройте свой проект Flutter:

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

    flutter pub remove firebase_vertexai

Единство

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

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

��аг 4 : Обновите инициализацию в вашем приложении.

Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице.

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

Быстрый


import FirebaseAI

// 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-2.0-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-2.0-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-2.0-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-2.0-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-2.0-flash');

Единство

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

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

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

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

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

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

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

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

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

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

  • Тайм-аут

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

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

Быстрый

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

    • Заменено большинство типов 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 в CitationMetadata переименовано в citations .
  • Всего оплачиваемых символов

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

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

    • Изменил публичные свойства GenerationConfig на internal . Все они остаются настраиваемыми в инициализаторе.

Kotlin

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

    • Заменены enum классы и sealed классы на обычные классы. Это изменение обеспечивает большую гибкость для развития API в обратно совместимом режиме.

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

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

  • Методы Blob

    • Переименованы все методы, включающие Blob в свое имя, чтобы вместо этого использовать InlineData .
  • Настройки безопасности

    • method поля изменен так, чтобы он допускал значение NULL.
  • Продолжительность класса

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

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

    • Поле totalBillableCharacters изменено на допускающее значение NULL.
  • Всего оплачиваемых символов

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

    • Параметр requestOptions перенесен в конец списка параметров для соответствия другим платформам.
  • Live API

    • Удалено значение UNSPECIFIED для класса enum 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 из Kotlin и заменены на long . Это изменение обеспечивает лучшую совместимость с Java.
  • Метаданные цитирования

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

    • Поле totalBillableCharacters изменено на допускающее значение NULL.
  • Всего оплачиваемых символов

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

    • Параметр requestOptions перенесен в конец списка параметров для соответствия другим платформам.
  • Live API

    • Удалено значение UNSPECIFIED для класса enum 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 (вместо Vertex AI Gemini API ):

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

    • Удалены случаи использования неподдерживаемого метода 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 не была доступна в « Vertex AI in Firebase ».

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

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

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

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

Вы можете просмотреть все свои ключи API на панели API и службы > Учетные данные в консоли Google Cloud .


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