Обобщение в Chrome со встроенным ИИ

Опубликовано: 11 ноября 2024 г.

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

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

  • Обобщение ключевых моментов статьи или беседы в чате.
  • Предлагать названия и заголовки статей.
  • Создание краткого и информативного изложения большого текста.
  • Создание тизера книги на основе рецензии на книгу.

Доступность

Зарегистрируйтесь на пробную версию Origin

Чтобы начать использовать API Summarizer, выполните следующие действия:

  1. Примите политику Google в отношении запрещенного использования генеративного искусственного интеллекта .
  2. Перейдите к исходной пробной версии Summarizer API .
  3. Нажмите «Зарегистрироваться» и заполните форму.
    • В поле «Происхождение веб-сайта » укажите идентификатор источника или расширения: chrome-extension://YOUR_EXTENSION_ID .
  4. Чтобы отправить заявку, нажмите «Зарегистрироваться» .
  5. Скопируйте предоставленный токен и добавьте его на каждую веб-страницу в вашем источнике или файл вашего расширения, для которого вы хотите включить пробную версию.
  6. Начните использовать API Summarizer .

Узнайте больше о том, как начать работу с пробными версиями Origin .

Ограничения во время пробного периода происхождения

Во время пробной версии API Summarizer поддерживает суммирование только английских текстов, поскольку качество модели тщательно проверялось только на английском контенте. Мы намерены снять это ограничение после того, как проверим качество и безопасность дополнительных языков и API станет широко доступен.

Добавить поддержку локального хоста

Чтобы получить доступ к API Summarizer на localhost во время пробной версии Origin, у вас должен быть Chrome Canary . Затем выполните следующие действия:

  1. Откройте Chrome Canary на одной из этих платформ: Windows, Mac или Linux.
  2. Перейдите на chrome://flags/#summarization-api-for-gemini-nano .
  3. Выберите Включено .
  4. Нажмите «Перезапустить» или перезапустите Chrome.

Используйте API сумматора

Сначала запустите обнаружение функций, чтобы узнать, поддерживает ли браузер API Summarizer.

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

Загрузка модели

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

Чтобы определить, готова ли модель к использованию, вызовите асинхронную функцию ai.summarizer.capabilities() . Он возвращает объект AISummarizerCapabilities с available полем, которое может принимать три возможных значения:

  • no : текущий браузер поддерживает API Summarizer, но в данный момент его нельзя использовать. Это может произойти по ряду причин, например, из-за недостаточного свободного места на диске для загрузки модели.
  • readily : текущий браузер поддерживает API Summarizer, и его можно использовать сразу.
  • after-download : текущий браузер поддерживает API Summarizer, но сначала необходимо загрузить модель.

Чтобы запустить загрузку модели и создать сумматор, вызовите асинхронную функцию ai.summarizer.create() . Если ответ на capabilities() был after-download , лучше всего следить за ходом загрузки. Таким образом, вы можете сообщить пользователю, если загрузка займет некоторое время.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

API-функции

Функция create() позволяет вам настроить новый объект сумматора в соответствии с вашими потребностями. Он принимает необязательный объект options со следующими параметрами:

  • sharedContext : дополнительный общий контекст, который может помочь сумматору.
  • type : тип суммирования с допустимыми значениями key-points (по умолчанию), tl;dr , teaser и headline .
  • format : формат суммирования с допустимыми значениями markdown (по умолчанию) и plain-text .
  • length : длина суммирования с допустимыми значениями short , medium (по умолчанию) и long . Значения этих длин варьируются в зависимости от запрошенного type . Например, в реализации Chrome краткое изложение ключевых моментов состоит из трех пунктов, а краткое изложение состоит из одного предложения; подробное резюме ключевых моментов состоит из семи пунктов, а подробное резюме представляет собой абзац.

В следующем примере показано, как инициализировать сумматор.

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

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

Запустить сумматор

Существует два способа запуска сумматора: потоковый и непотоковый.

Непотоковое обобщение

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

Чтобы получить непотоковую сводку, вызовите асинхронную функцию summator summarize() . Первый аргумент функции — это текст, который вы хотите суммировать. Второй необязательный аргумент — это объект с полем context . Это поле позволяет добавлять дополнительные сведения, которые могут улучшить обобщение.

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

Потоковое обобщение

Потоковое обобщение дает результаты в режиме реального времени. Выходные данные постоянно обновляются по мере добавления и корректировки входных данных.

Чтобы получить сводку потоковой передачи, вызовите функцию summarizeStreaming() средства суммирования. Затем переберите доступные сегменты текста в потоке.

let result = '';
let previousChunk = '';
for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

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

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

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

Демо

Вы можете попробовать Summarizer API на Summarizer API Playground .

Усилия по стандартизации

Мы работаем над стандартизацией API Summarizer, чтобы обеспечить кросс-браузерную совместимость.

Наше предложение API получило поддержку сообщества и было передано в группу сообщества W3C Web Incubator для дальнейшего обсуждения. Команда Chrome запросила отзыв у группы технической архитектуры W3C и попросила Mozilla и WebKit высказать свои позиции по стандартам.

Участвуйте и делитесь отзывами

Начните тестирование API Summarizer прямо сейчас, присоединившись к пробной версии Origin и поделитесь своими отзывами. Ваш вклад может напрямую повлиять на то, как мы создаем и реализуем будущие версии этого API, а также всех встроенных API-интерфейсов искусственного интеллекта.