Creación de resúmenes en Chrome con IA integrada

Fecha de publicación: 11 de noviembre de 2024

Imagina que pudieras ofrecer a tus usuarios la capacidad de sintetizar artículos extensos, documentos complejos o incluso conversaciones de chat animadas en resúmenes concisos y perspicaces.

La API de Summarizer se puede usar para generar diferentes tipos de resúmenes en variados formatos y longitudes, como oraciones, párrafos, listas con viñetas y mucho más. Creemos que esta API es útil en las siguientes situaciones:

  • Resumir los puntos clave de un artículo o una conversación por chat
  • Sugerir títulos y encabezados para los artículos
  • Crear un resumen informativo y conciso de un texto extenso
  • Generar un adelanto de un libro basado en una reseña.

Disponibilidad

Regístrate para la prueba de origen

Para comenzar a usar la API de Summarizer, sigue estos pasos:

  1. Acepta la Política de Usos Prohibidos de IA Generativas de Google.
  2. Ve a la prueba de origen de la API de Summarizer.
  3. Haz clic en Registrarse y completa el formulario.
    • En el campo Origen web, proporciona tu origen o el ID de extensión, chrome-extension://YOUR_EXTENSION_ID.
  4. Para enviarla, haz clic en Registrarse.
  5. Copia el token proporcionado y agrégalo a cada página web de tu origen o archivo de tu extensión en la que deseas que se habilite la prueba.
  6. Comienza a usar la API de Summarizer.

Obtén más información para comenzar a usar las pruebas de origen.

Limitaciones durante la prueba del origen

Durante la prueba de origen, la API de Summarizer solo admite el resumen de textos en inglés, ya que la calidad del modelo solo se probó en contenido en inglés. Tenemos la intención de levantar esta limitación una vez que hayamos probado otros lenguajes para verificar la calidad y la seguridad, y la API esté disponible para todos.

Agrega compatibilidad con localhost

Para acceder a la API de Summarizer en localhost durante la prueba de origen, debes tener Chrome Canary. Luego, sigue estos pasos:

  1. Abre Chrome Canary en una de estas plataformas: Windows, Mac o Linux.
  2. Ve a chrome://flags/#summarization-api-for-gemini-nano.
  3. Selecciona Habilitado.
  4. Haz clic en Reiniciar o reinicia Chrome.

Usa la API de Summarizer

Primero, ejecuta la detección de funciones para ver si el navegador admite la API de Summarizer.

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

Descarga del modelo

La API de Summarizer usa un potente modelo de IA entrenado para generar resúmenes de alta calidad. Si bien la API está integrada en Chrome, el modelo se descarga por separado la primera vez que un sitio web usa la API.

Para determinar si el modelo está listo para usarse, llama a la función ai.summarizer.capabilities() asíncrona. Muestra un objeto AISummarizerCapabilities con un campo available que puede tener tres valores posibles:

  • no: El navegador actual admite la API de Summarizer, pero no se puede usar en este momento. Esto puede deberse a varios motivos, como la falta de espacio en el disco disponible para descargar el modelo.
  • readily: El navegador actual admite la API de Summarizer y se puede usar de inmediato.
  • after-download: El navegador actual admite la API de Summarizer, pero primero debe descargar el modelo.

Para activar la descarga del modelo y crear el resumidor, llama a la función ai.summarizer.create() asíncrona. Si la respuesta a capabilities() fue after-download, se recomienda escuchar el progreso de la descarga. De esta manera, puedes informar al usuario en caso de que la descarga tarde.

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

Funciones de la API

La función create() te permite configurar un nuevo objeto de resumen según tus necesidades. Toma un objeto options opcional con los siguientes parámetros:

  • sharedContext: Es un contexto compartido adicional que puede ayudar al generador de resúmenes.
  • type: Es el tipo de resumen, con los valores permitidos key-points (predeterminado), tl;dr, teaser y headline.
  • format: Es el formato del resumen, con los valores permitidos markdown (predeterminado) y plain-text.
  • length: Es la longitud del resumen, con los valores permitidos short, medium (predeterminado) y long. El significado de estas longitudes varía según el type solicitado. Por ejemplo, en la implementación de Chrome, un resumen breve de puntos clave consta de tres viñetas, y un resumen breve es una oración. Un resumen largo de puntos clave consta de siete viñetas, y un resumen largo es un párrafo.

En el siguiente ejemplo, se muestra cómo inicializar el resumidor.

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;
}

Ejecuta el resumidor

Existen dos maneras de ejecutar el resumidor: transmisión continua y sin transmisión continua.

Resumen sin transmisión

Con el resumen sin transmisión, el modelo procesa la entrada en su totalidad y, luego, produce el resultado.

Para obtener un resumen no continuo, llama a la función summarize() asíncrona del sintetizador. El primer argumento de la función es el texto que deseas resumir. El segundo argumento opcional es un objeto con un campo context. Este campo te permite agregar detalles de contexto que podrían mejorar el resumen.

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

Resumen de transmisiones

El resumen de transmisión ofrece resultados en tiempo real. El resultado se actualiza de forma continua a medida que se agrega y ajusta la entrada.

Para obtener un resumen continuo, llama a la función summarizeStreaming() del sintetizador. Luego, itera sobre los segmentos de texto disponibles en el flujo.

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() muestra un ReadableStream, en el que los segmentos de la respuesta se compilan de forma sucesiva entre sí. Esto significa que cada respuesta contiene todo el resumen generado hasta ese punto, no solo el siguiente segmento, que no es el comportamiento deseado.

Tenemos la intención de alinearnos con otras APIs de transmisión en la plataforma, en las que los segmentos son partes sucesivas de una sola transmisión larga. Por ahora, para lograr el comportamiento deseado, puedes implementar lo siguiente:

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);

Demostración

Puedes probar la API de Summarizer en el Summarizer API Playground.

Esfuerzo de estandarización

Estamos trabajando para estandarizar la API de Summarizer y garantizar la compatibilidad con varios navegadores.

Nuestra propuesta de API recibió apoyo de la comunidad y se trasladó al grupo comunitario de Web Incubator del W3C para que se analice en más detalle. El equipo de Chrome solicitó comentarios al grupo de arquitectura técnica del W3C y a Mozilla y WebKit para conocer sus posiciones sobre los estándares.

Participa y comparte comentarios

Únete a la prueba de origen y comparte tus comentarios para comenzar a probar la API de Summarizer ahora. Tus comentarios pueden afectar directamente la forma en que compilamos e implementamos las versiones futuras de esta API y todas las APIs de IA integradas.