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


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

В этом релизе стало доступно гибридное выполнение алгоритмов с использованием клиентского SDK Firebase AI Logic для веб-приложений, а также поддержка выполнения алгоритмов на устройстве в Chrome на настольных компьютерах.

Перейти к примерам кода

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

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

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

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

    • Охватите 100% своей аудитории независимо от модели устройства или наличия подключения к интернету.

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

Начать

В этом руководстве показано, как начать использовать Firebase AI Logic SDK для веб-разработки для выполнения гибридного вывода.

Для вывода результатов с использованием модели, размещенной на устройстве, используется API Prompt из Chrome ; тогда как для вывода результатов с использованием облачной модели используется выбранный вами поставщик API Gemini (либо Gemini Developer API , либо Vertex AI Gemini API ).

Начните разработку, используя localhost, как описано в этом разделе (вы также можете узнать больше об использовании API на localhost в документации Chrome). Затем, после реализации вашей функции, вы можете, при желании, предоставить конечным пользователям возможность протестировать вашу функцию .

Шаг 1 : Настройте Chrome и API Prompt для вывода информации на устройстве.

  1. Убедитесь, что вы используете последнюю версию Chrome. Обновить можно через chrome://settings/help .
    Функция определения местоположения на устройстве доступна начиная с Chrome версии 139 и выше.

  2. Включите многомодальную модель на устройстве, установив для следующего флага значение Enabled :

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
  3. Перезапустите Chrome.

  4. (Необязательно) Перед первым запросом загрузите модель устройства.

    API Prompt встроен в Chrome; однако модель, загружаемая на устройство, по умолчанию недоступна. Если вы еще не загрузили модель до первого запроса на вывод данных на устройстве, запрос автоматически запустит загрузку модели в фоновом режиме.

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

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

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

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

  4. Выберите поставщика « Gemini API », которого вы хотите использовать с SDK Firebase AI Logic . Для начинающих пользователей рекомендуется использовать Gemini Developer API . При желании вы всегда можете добавить оплату или настроить Vertex AI Gemini API позже.

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

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

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

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

Шаг 3 : Добавьте SDK

Библиотека Firebase предоставляет доступ к API для взаимодействия с генеративными моделями. Библиотека входит в состав Firebase JavaScript SDK для веб-приложений.

  1. Установите Firebase JS SDK для веб-разработки с помощью npm:

    npm install firebase
    
  2. Инициализируйте Firebase в своем приложении:

    import { initializeApp } from "firebase/app";
    
    // 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);
    

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

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

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

Установите один из следующих mode :

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

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

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

  • ONLY_IN_CLOUD : Настраивает SDK таким образом, чтобы он никогда не использовал модель, установленную на устройстве.

При использовании PREFER_ON_DEVICE , PREFER_IN_CLOUD или ONLY_IN_CLOUD по умолчанию используется модель облачного размещения. gemini-2.0-flash-lite , но вы можете переопределить значение по умолчанию .

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });

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

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

Если вы хотите генерировать структурированный вывод (например, JSON или перечисления), используйте один из следующих примеров «генерации текста» и дополнительно настройте модель для ответа в соответствии с предоставленной схемой .

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

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

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

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  const prompt = "Write a story about a magic backpack."

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(prompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

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

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

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

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

Для обработки данных на устройстве поддерживаются следующие типы входных изображений: PNG и JPEG.

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the image
  const prompt = "Write a poem about this picture:";

  const fileInputEl = document.querySelector("input[type=file]");
  const imagePart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call `generateContent` with the text and image
  const result = await model.generateContent([prompt, imagePart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

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

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

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

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

Чтобы дать конечным пользователям возможность протестировать вашу функцию, вы можете зарегистрироваться в пробной версии Chrome Origin . Обратите внимание, что продолжительность и объем использования этих пробных версий ограничены.

  1. Зарегистрируйтесь для участия в пробной версии Prompt API Chrome Origin . Вам будет предоставлен токен.

  2. Укажите токен на каждой веб-странице, для которой вы хотите включить пробную версию. Используйте один из следующих вариантов:

    • Укажите токен в качестве метатега в теге <head> : <meta http-equiv="origin-trial" content=" TOKEN ">

    • Укажите токен в заголовке HTTP: Origin-Trial: TOKEN

    • Предоставьте токен программным способом .

Используйте альтернативные режимы вывода

В приведенных выше примерах использовался режим PREFER_ON_DEVICE для настройки SDK на использование модели, размещенной на устройстве, если она доступна, или на использование модели, размещенной в облаке. SDK предлагает три альтернативных режима вывода : ONLY_ON_DEVICE , ONLY_IN_CLOUD и PREFER_IN_CLOUD .

  • Используйте режим ONLY_ON_DEVICE , чтобы SDK мог использовать только модель, установленную на устройстве. В этой конфигурации API выдаст ошибку, если модель, установленная на устройстве, недоступна.

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });
    
  • Используйте режим ONLY_IN_CLOUD , чтобы SDK мог использовать только облачную модель.

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });
    
  • Используйте режим PREFER_IN_CLOUD , чтобы SDK пытался использовать облачную модель, но переключался на модель, размещенную на устройстве, если облачная модель недоступна (например, устройство находится в автономном режиме).

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
    

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

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

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

// ...

console.log('You used: ' + result.response.inferenceSource);

console.log(result.response.text());

Переопределить модель резервного копирования по умолчанию

Модель размещения в облаке по умолчанию — gemini-2.0-flash-lite .

Эта модель является резервной облачной моделью при использовании режима PREFER_ON_DEVICE . Она также является моделью по умолчанию при использовании режима ONLY_IN_CLOUD или режима PREFER_IN_CLOUD .

С помощью параметра конфигурации inCloudParams можно указать альтернативную модель размещения в облаке по умолчанию.

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
  }
});

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

Используйте конфигурацию модели для управления ответами.

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

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

Настройте параметры для модели, размещенной в облаке.

Используйте параметр inCloudParams для настройки модели Gemini , размещенной в облаке. Узнайте о доступных параметрах .

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
    temperature: 0.8,
    topK: 10
  }
});

Настройте параметры для модели устройства.

Обратите внимание, что при выводе данных с использованием модели, установленной на устройстве, применяется API Prompt из Chrome .

Используйте параметр onDeviceParams для настройки модели устройства. Узнайте о доступных параметрах .

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

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

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

Для гибридного вывода используйте параметры inCloudParams и onDeviceParams , чтобы настроить модель на предоставление структурированного вывода. Для других режимов используйте только соответствующую конфигурацию.

  • Для inCloudParams : укажите соответствующий responseMimeType (в этом примере — application/json ), а также responseSchema , которую должна использовать модель.

  • Для onDeviceParams : укажите значение responseConstraint , которое должна использовать модель.

вывод в формате JSON

В следующем примере адаптирован общий пример вывода в формате JSON для гибридного вывода:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "gemini-2.5-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
Вывод перечисления

Как указано выше, но с адаптацией документации по выводу перечислений для гибридного вывода:

// ...

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {

// ...

    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },

// ...
});

// ...

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

Поскольку это экспериментальная версия, не все возможности Web SDK доступны для выполнения операций на устройстве . Следующие функции пока не поддерживаются для выполнения операций на устройстве (но обычно они доступны для выполнения операций в облаке).

  • Генерация текста из файлов изображений, отличных от JPEG и PNG.

    • Можно переключиться на облачную модель; однако в режиме ONLY_ON_DEVICE возникнет ошибка.
  • Генерация текста из аудио-, видео- и документальных файлов (например, PDF-файлов).

    • Можно переключиться на облачную модель; однако в режиме ONLY_ON_DEVICE возникнет ошибка.
  • Создание изображений с использованием моделей Gemini или Imagen.

    • Можно переключиться на облачную модель; однако в режиме ONLY_ON_DEVICE возникнет ошибка.
  • Предоставление файлов с использованием URL-адресов в многомодальных запросах. Необходимо предоставлять файлы в виде встроенных данных для моделей, установленных на устройстве.

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

    • Можно переключиться на облачную модель; однако в режиме ONLY_ON_DEVICE возникнет ошибка.
  • Двусторонняя потоковая передача с использованием Gemini Live API

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

  • Подсчет токенов

    • Всегда выдает ошибку. Количество будет отличаться в облачной среде и на устройстве, поэтому интуитивно понятного резервного варианта нет.
  • Мониторинг ИИ в консоли Firebase для выполнения вычислений на устройстве.

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


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