Resumir com a IA integrada

Publicado em 11 de novembro de 2024 e atualizado pela última vez em 1º de maio de 2025

Explicação Web Extensões Status do Chrome Intenção
GitHub Atrás de uma sinalização Teste do Origin Atrás de uma sinalização Teste do Origin Ver Intent to Experiment

Imagine que você pudesse oferecer aos seus usuários a capacidade de transformar artigos longos, documentos complexos ou até mesmo conversas de chat animadas em resumos concisos e inteligentes.

A API Summarizer pode ser usada para gerar diferentes tipos de resumos em diversos comprimentos e formatos, como frases, parágrafos, listas com marcadores e muito mais. Acreditamos que essa API é útil nos seguintes cenários:

  • Resumir os pontos principais de um artigo ou de uma conversa no chat.
  • Sugerir títulos e cabeçalhos para artigos.
  • Criar um resumo conciso e informativo de um texto longo.
  • Gerar um teaser para um livro com base em uma resenha.

Primeiros passos

Participe do teste de origem da API Summarizer, que vai do Chrome 131 ao Chrome 139. Os testes de origem permitem que você ofereça o recurso a usuários reais na sua origem, no Chrome.

Inscrever-se no teste de origem

Para começar a usar a API Summarizer, siga estas etapas:

  1. Confirme que você leu e aceitou a Política de uso proibido da IA generativa do Google.
  2. Acesse o teste de origem da API Summarizer.
  3. Clique em Registrar e preencha o formulário.
    • No campo Origem da Web, informe o ID da origem ou da extensão, chrome-extension://YOUR_EXTENSION_ID.
  4. Para enviar, clique em Registrar.
  5. Copie o token fornecido e adicione-o a todas as páginas da Web na origem ou no arquivo da extensão em que você quer ativar o teste.
  6. Comece a usar a API Summarizer.

Saiba mais sobre como começar a usar os testes de origem.

Limitações durante o teste de origem

Durante o teste de origem, a API Summarizer só oferece suporte a resumos de textos em inglês, já que a qualidade do modelo foi testada apenas em conteúdo em inglês. Nossa intenção é remover essa limitação depois de testar outros idiomas para garantir a qualidade e a segurança e quando a API estiver disponível para todos.

Adicionar suporte ao localhost

Para acessar a API Summarizer no localhost durante o teste de origem, você precisa ter o Chrome Canary. Em seguida, siga estas etapas:

  1. Acesse chrome://flags/#summarization-api-for-gemini-nano.
  2. Selecione Ativado.
  3. Clique em Reiniciar ou reinicie o Chrome.

Usar a API Summarizer

Primeiro, execute a detecção de recursos para saber se o navegador oferece suporte à API Summarizer.

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

Download do modelo

A API Summarizer usa um modelo treinado para gerar resumos de alta qualidade. Embora a API esteja integrada ao Chrome, o modelo é transferido por download separadamente na primeira vez que um site usa a API.

Para determinar se o modelo está pronto para uso, chame a função Summarizer.availability() assíncrona. Ele retorna uma promessa com os seguintes valores.

  • "unavailable" significa que a implementação não oferece suporte às opções solicitadas.
  • "downloadable" significa que a implementação oferece suporte às opções solicitadas, mas primeiro o navegador precisa fazer o download de algo, como um modelo (no caso do Chrome, Gemini Nano) ou um ajuste fino para o modelo.
  • "downloading" significa que a implementação oferece suporte às opções solicitadas, mas precisa concluir um download em andamento antes de continuar.
  • "available" significa que a implementação oferece suporte às opções solicitadas e o resumo pode continuar.

Para acionar o download do modelo e criar o resumo, chame a função Summarizer.create() assíncrona. Se a resposta para availability() foi downloadable ou downloading, é recomendável detectar o progresso do download. Dessa forma, você pode informar ao usuário e indicar que o download pode levar algum tempo para ser concluído antes que a síntese ocorra.

const summarizer = await Summarizer.create({   monitor(m) {     m.addEventListener('downloadprogress', (e) => {       console.log(`Downloaded ${e.loaded * 100}%`);     });   } }); 

Funções da API

A função create() permite configurar um novo objeto de resumo de acordo com suas necessidades. Ele usa um objeto options opcional com os seguintes parâmetros:

  • sharedContext: contexto compartilhado adicional que pode ajudar o resumidor.
  • type: o tipo de resumo, com os valores permitidos key-points (padrão), tl;dr, teaser e headline. Consulte a tabela a seguir para obter detalhes.
  • format: o formato da síntese, com os valores permitidos markdown (padrão) e plain-text.
  • length: o comprimento da síntese, com os valores permitidos short, medium (padrão) e long. O significado desses comprimentos varia de acordo com o type solicitado. Por exemplo, na implementação do Chrome, um breve resumo de pontos-chave consiste em três tópicos e um resumo curto é uma frase.

A tabela a seguir demonstra os diferentes tipos de resumos e as respectivas durações. As durações representam o valor máximo possível, já que, às vezes, os resultados podem ser mais curtos.

Tipo Significado Comprimento
"tl;dr" O resumo precisa ser curto e direto, fornecendo uma visão geral rápida da entrada, adequada para um leitor ocupado.
short Uma frase
média 3 frases
long Cinco frases
"teaser" O resumo deve se concentrar nas partes mais interessantes ou intrigantes do texto, projetado para atrair o leitor a ler mais.
short Uma frase
média 3 frases
long Cinco frases
"key-points" O resumo precisa extrair os pontos mais importantes da entrada, apresentados como uma lista com marcadores.
short 3 marcadores
média 5 marcadores
long 7 marcadores
"headline" O resumo precisa conter o ponto principal da entrada em uma única frase, no formato de um título de artigo.
short 12 palavras
média 17 palavras
long 22 palavras

O exemplo a seguir demonstra como inicializar o resumidor.

const options = {   sharedContext: 'This is a scientific article',   type: 'key-points',   format: 'markdown',   length: 'medium', };  const availability = await Summarizer.availability(); let summarizer; if (availability === 'unavailable') {   // The Summarizer API isn't usable.   return; } if (availability === 'available') {   // The Summarizer API can be used immediately .   summarizer = await Summarizer.create(options); } else {   // The Summarizer API can be used after the model is downloaded.   summarizer = await Summarizer.create(options);   summarizer.addEventListener('downloadprogress', (e) => {     console.log(`Downloaded ${e.loaded * 100}%`);   });   await summarizer.ready; } 

Executar o resumo

Há duas maneiras de executar o resumidor: streaming e lote (sem streaming).

Resumo em lote

Com a síntese em lote, o modelo processa a entrada como um todo e produz a saída.

Para receber um resumo do lote, chame a função summarize(). O primeiro argumento é o texto que você quer resumir. O segundo argumento opcional é um objeto com um campo context. Esse campo permite adicionar detalhes de segundo plano que podem melhorar a síntese.

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

Resumo de streaming

A síntese de streaming oferece resultados em tempo real. A saída é atualizada continuamente à medida que a entrada é adicionada e ajustada.

Para receber um resumo de streaming, chame a função summarizeStreaming() do resumidor. Em seguida, itere sobre os segmentos de texto disponíveis no stream.

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() retorna um ReadableStream, em que os segmentos de resposta são criados um após o outro. Isso significa que cada resposta contém o resumo completo gerado até aquele ponto, não apenas o próximo segmento, que não é o comportamento pretendido.

Pretendemos nos alinhar a outras APIs de streaming na plataforma, em que os segmentos são partes sucessivas de um único stream longo. Por enquanto, para alcançar o comportamento desejado, implemente o seguinte:

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

Demonstração

Teste a API Summarizer no Summarizer API Playground.

Esforço de padronização

Estamos trabalhando para padronizar a API Summarizer e garantir a compatibilidade entre navegadores.

Nossa proposta de API recebeu apoio da comunidade e foi transferida para o W3C Web Incubator Community Group para mais discussões. A equipe do Chrome solicitou feedback do W3C Technical Architecture Group e pediu a Mozilla e ao WebKit as posições dos padrões.

Participar e compartilhar feedback

Comece a testar a API Summarizer agora mesmo participando do teste de origem e compartilhando seu feedback. Sua contribuição pode afetar diretamente a forma como criamos e implementamos versões futuras dessa API e de todas as APIs de IA integradas.