La API de Summarizer permite que los desarrolladores web ofrezcan resúmenes de texto locales potenciados por IA directamente en el navegador con Gemini Nano en Chrome o Phi en Edge. Esta API admite varios formatos, incluidos puntos clave, titulares y resúmenes, y funciona completamente integrado en el dispositivo para garantizar la privacidad del usuario.
Comenzar
La API de Summarizer está disponible a partir de Chrome y Edge 138. Requiere una descarga única del modelo de Gemini Nano o Phi (respectivamente).
Requisitos de hardware y software
- SO: Windows 10/11, macOS 13 o versiones posteriores, Linux o ChromeOS (Chromebook Plus).
- Almacenamiento: 22 GB de espacio libre para el volumen del perfil
- RAM/CPU: Más de 16 GB de RAM y más de 4 núcleos de CPU
- VRAM: 4 GB o más (si se usa una GPU)
Descarga y disponibilidad de modelos
Verifica si el modelo está listo, si necesita descargarse o si no está disponible.
Paso de opciones obligatorio: Debes pasar el objeto de opciones de configuración idéntico a Summarizer.availability(options) y Summarizer.create(options). NO uses la superficie de la API de window.ai.summarizer obsoleta.
Supervisión obligatoria del progreso: DEBES implementar un supervisor para el progreso de la descarga del modelo. Para ello, proporciona una devolución de llamada monitor(m) a Summarizer.create() y agrega un objeto de escucha para el evento downloadprogress.
Requisito de gesto del usuario: Cuando availability es 'downloadable' o 'downloading', activar la descarga real a través de Summarizer.create() requiere un gesto del usuario (como un clic del usuario). Debes colocar la llamada de creación dentro de un objeto de escucha de eventos en lugar de llamarla de forma incondicional durante la carga de página para evitar el error 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)}%`);
});
},
});
});
}
Funciones y configuración de la API
Cuando creas un resumidor a través de Summarizer.create(options), puedes personalizar
el resultado:
| Parámetro | Opciones | Descripción |
|---|---|---|
type |
key-points, tldr, teaser, headline |
Define la estrategia de resumen. |
format |
markdown, plain-text |
Es el estilo de sintaxis de salida. |
length |
short, medium, long |
Longitud objetivo (p. ej., 1 oración frente a 5) |
preference |
auto, speed, capability |
Equilibra la latencia y la calidad. |
Configuración de ejemplo
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);
}
Idiomas compatibles
Puedes especificar los idiomas esperados para asegurarte de que el navegador pueda controlar la solicitud de resumen específica.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
Métodos de resumen
1. Resumen por lotes
Procesa todo el texto a la vez y devuelve el resultado.
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. Resumen de transmisiones
Devuelve resultados en tiempo real a medida que el modelo los genera, lo que proporciona una IU más responsiva.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Seguridad y permisos
- Privacidad de los datos: No se envían datos a Google; el procesamiento se realiza en el dispositivo local.
De origen cruzado: Se puede otorgar acceso a los iframes con la política de permisos.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Workers: Actualmente no se admiten.
Estrategia de resguardo
Antes de inicializar o consultar la disponibilidad, verifica si el navegador admite la API de Summarizer:
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
Si la API de Summarizer no es compatible o las verificaciones de disponibilidad devuelven 'unavailable', debes recurrir a una alternativa de forma correcta.
Opciones recomendadas:
- Resguardo de API remota: Dirige la solicitud de destilación a un extremo de servidor o a una API remota (como la API de Vertex AI Gemini) para que los usuarios sigan obteniendo resúmenes.
- Degradación elegante: Inhabilita visualmente los controles de resumen en la IU o, bien, oculta el botón mientras se muestra un mensaje amigable (p.ej.,
"Local summarization is currently unsupported in this browser"). No permitas que la interacción active excepciones de tiempo de ejecución genéricas no controladas. - Resguardo de polyfill: Puedes usar polyfills mantenidos por la comunidad, como
built-in-ai-task-apis-polyfillsoprompt-api-polyfill, para emular la plataforma de la API con servicios remotos con modelos en la nube o inferencia integrada en el dispositivo con modelos locales.
Implicaciones de privacidad y costos: Es posible que estos polyfills envíen solicitudes de proxy a servidores remotos (como la API de Gemini en la nube). Esto anula por completo las garantías de privacidad integrada en el dispositivo de las APIs de IA integradas nativas y generará costos de uso de la API del servidor.