Краткий пересказ

Функции для работы с веб-страницами: Краткий пересказ

Summarizer API позволяет веб-разработчикам предлагать локальное обобщение текста на основе искусственного интеллекта прямо в браузере с помощью Gemini Nano в Chrome или Phi в Edge. API поддерживает различные форматы, включая ключевые моменты, заголовки и краткие пересказы, и работает полностью на устройстве, обеспечивая конфиденциальность пользователей.


Начало работы

Summarizer API доступен начиная с Chrome и Edge 138. Для этого нужно один раз скачать модель Gemini Nano или Phi.

Требования к оборудованию и ПО

  • ОС: Windows 10/11, macOS 13+, Linux или ChromeOS (Chromebook Plus).
  • Хранилище: 22 ГБ свободного места для тома профиля.
  • ОЗУ/ЦП: не менее 16 ГБ ОЗУ и не менее 4 ядер ЦП.
  • VRAM от 4 ГБ (при использовании графического процессора).

Скачивание и доступность модели

Проверьте, готова ли модель, нужно ли ее скачать или она недоступна.

Обязательная передача параметров. Вы должны передать одинаковый объект параметров конфигурации в Summarizer.availability(options) и Summarizer.create(options). НЕ используйте устаревший API window.ai.summarizer.

Обязательное отслеживание прогресса. Вы ДОЛЖНЫ реализовать отслеживание прогресса скачивания модели, предоставив обратный вызов monitor(m) для Summarizer.create() и добавив прослушиватель для события downloadprogress.

Требование к жесту пользователя. Если для availability задано значение 'downloadable' или 'downloading', то для запуска скачивания с помощью Summarizer.create() требуется жест пользователя, например клик. Чтобы избежать ошибки NotAllowedError, вызов для создания должен находиться внутри прослушивателя событий, а не выполняться безусловно при загрузке страницы.

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

Функции и конфигурация API

При создании суммаризатора с помощью Summarizer.create(options) вы можете настроить выходные данные:

Параметр Параметры Описание
type key-points, tldr, teaser, headline Определяет стратегию сводки.
format markdown, plain-text Стиль синтаксиса выходных данных.
length short, medium, long Целевая длина (например, 1 или 5 предложений).
preference auto, speed, capability Оптимальное соотношение задержки и качества.

Пример конфигурации

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

Языковая поддержка

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

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

Методы обобщения

1. Пакетное обобщение

Обрабатывает весь текст сразу и возвращает результат.

const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);

2. Краткий пересказ трансляции

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

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

Безопасность и разрешения

  • Конфиденциальность данных. Данные не отправляются в Google, а обрабатываются на локальном устройстве.
  • Из разных источников. Доступ можно предоставить окнам iframe с помощью правила разрешений.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Веб-воркеры. В настоящее время не поддерживаются.

Резервная стратегия

Перед инициализацией или запросом доступности проверьте, поддерживает ли браузер API Summarizer:

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

Если API Summarizer не поддерживается или проверка доступности возвращает 'unavailable', необходимо корректно вернуться к предыдущему состоянию.

Рекомендуемые варианты:

  1. Резервный удаленный API. Направьте запрос на дистилляцию конечной точке сервера или удаленному API (например, Vertex AI Gemini API), чтобы пользователи по-прежнему получали краткие пересказы.
  2. Постепенное сокращение. Отключите элементы управления пересказом в интерфейсе или скройте кнопку и покажите понятное сообщение, например "Local summarization is currently unsupported in this browser". Не допускайте, чтобы взаимодействие вызывало общие необработанные исключения во время выполнения.
  3. Резервный полифил. Вы можете использовать поддерживаемые сообществом полифилы, такие как built-in-ai-task-apis-polyfills или prompt-api-polyfill, чтобы эмулировать API с помощью удаленных сервисов с моделями в облаке или локальных моделей на устройстве.

Конфиденциальность и стоимость. Полифилы могут проксировать запросы к удаленным серверам, например Gemini API в облаке. Это полностью аннулирует гарантии конфиденциальности на устройстве, которые предоставляют встроенные API ИИ, и приведет к расходам на использование API на стороне сервера.