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:
- 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.
- 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. - Polyfill de fallback: use polyfills mantidos pela comunidade, como
built-in-ai-task-apis-polyfillsouprompt-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.