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', необходимо корректно вернуться к предыдущему состоянию.
Рекомендуемые варианты:
- Резервный удаленный API. Направьте запрос на дистилляцию конечной точке сервера или удаленному API (например, Vertex AI Gemini API), чтобы пользователи по-прежнему получали краткие пересказы.
- Постепенное сокращение. Отключите элементы управления пересказом в интерфейсе или скройте кнопку и покажите понятное сообщение, например
"Local summarization is currently unsupported in this browser". Не допускайте, чтобы взаимодействие вызывало общие необработанные исключения во время выполнения. - Резервный полифил. Вы можете использовать поддерживаемые сообществом полифилы, такие как
built-in-ai-task-apis-polyfillsилиprompt-api-polyfill, чтобы эмулировать API с помощью удаленных сервисов с моделями в облаке или локальных моделей на устройстве.
Конфиденциальность и стоимость. Полифилы могут проксировать запросы к удаленным серверам, например Gemini API в облаке. Это полностью аннулирует гарантии конфиденциальности на устройстве, которые предоставляют встроенные API ИИ, и приведет к расходам на использование API на стороне сервера.