Summarizer

Recursos da Web: Resumidor

Com a API Summarizer, os desenvolvedores web podem oferecer resumos de texto locais com tecnologia de IA diretamente no navegador usando o Gemini Nano no Chrome ou o Phi no Edge. Essa API é compatível com vários formatos, incluindo pontos-chave, manchetes e resumos, e funciona inteiramente no dispositivo para garantir a privacidade do usuário.


Primeiros passos

A API Summarizer está disponível no Chrome e no Edge 138. Ele exige um download único do modelo Gemini Nano ou Phi (respectivamente).

Requisitos de hardware e software

  • SO: Windows 10/11, macOS 13 ou mais recente, Linux ou ChromeOS (Chromebook Plus).
  • Armazenamento: 22 GB de espaço livre para o volume do perfil.
  • RAM/CPU: mais de 16 GB de RAM e mais de 4 núcleos de CPU.
  • VRAM: mais de 4 GB (se estiver usando GPU).

Download e disponibilidade do modelo

Verifique se o modelo está pronto, precisa ser baixado ou está indisponível.

Transmissão de opções obrigatórias: é necessário transmitir o mesmo objeto de opções de configuração para Summarizer.availability(options) e Summarizer.create(options). NÃO use a plataforma da API window.ai.summarizer descontinuada.

Monitoramento obrigatório do progresso: é OBRIGATÓRIO implementar um monitor para o progresso do download do modelo fornecendo um callback monitor(m) para Summarizer.create() e adicionando um listener para o evento downloadprogress.

Requisito de interação do usuário: quando availability é 'downloadable' ou 'downloading', o acionamento do download real por Summarizer.create() requer uma interação do usuário (como um clique). Para evitar NotAllowedError, coloque a chamada de criação em um listener de eventos em vez de chamá-la incondicionalmente no carregamento da página.

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)}%`);
        });
      },
    });
  });
}

Funções e configuração da API

Ao criar um resumidor usando Summarizer.create(options), é possível personalizar a saída:

Parâmetro Opções Descrição
type key-points, tldr, teaser, headline Define a estratégia de resumo.
format markdown, plain-text Estilo de sintaxe de saída.
length short, medium, long Tamanho desejado (por exemplo, 1 ou 5 frases).
preference auto, speed, capability Equilibra latência e qualidade.

Exemplo de configuração

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

Suporte a idiomas

É possível especificar os idiomas esperados para garantir que o navegador possa processar a solicitação de resumo específica.

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

Métodos de resumo

1. Resumo em lote

Processa todo o texto de uma vez e retorna o 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. Resumo de stream

Retorna resultados em tempo real à medida que o modelo os gera, fornecendo uma interface mais responsiva.

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

Segurança e permissões

  • Privacidade de dados: nenhum dado é enviado ao Google. O processamento acontece no dispositivo local.
  • Entre origens: o acesso pode ser concedido a iframes usando a política de permissões.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Web Workers: no momento, não há suporte.

Estratégia de fallback

Antes de inicializar ou consultar a disponibilidade, verifique se o navegador é compatível com a API Summarizer:

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

Se a API Summarizer não for compatível ou as verificações de disponibilidade retornarem 'unavailable', você precisará fazer um fallback de maneira adequada.

Opções recomendadas:

  1. Fallback da API remota: direciona a solicitação de destilação para um endpoint de servidor ou uma API remota (como a API Gemini da Vertex AI) para que os usuários ainda recebam resumos.
  2. Degradação suave: desative visualmente os controles de resumo na interface ou oculte o botão enquanto exibe uma mensagem amigável (por exemplo, "Local summarization is currently unsupported in this browser"). Não permita que a interação acione exceções de execução genéricas não processadas.
  3. Polyfill de fallback: use polyfills mantidos pela comunidade, como built-in-ai-task-apis-polyfills ou prompt-api-polyfill, para emular a superfície da API usando serviços remotos com modelos na nuvem ou inferência no dispositivo com modelos locais.

Implicações de privacidade e custo: esses polyfills podem fazer proxy de solicitações para servidores remotos (como a API Gemini na nuvem). Isso anula completamente as garantias de privacidade no dispositivo das APIs de IA integradas nativas e gera custos de uso da API do lado do servidor.