Publicado em 12 de março de 2025
Explicação | Web | Extensões | Status do Chrome | Intenção |
---|---|---|---|---|
GitHub | Ver | Intenção de fazer um experimento |
A API Summarizer ajuda a gerar resumos de informações em vários comprimentos e formatos. Use-o com o Gemini Nano no Chrome para realizar inferência do lado do cliente e explicar de forma concisa textos longos ou complicados.
Quando realizada do lado do cliente, é possível trabalhar com dados localmente, o que permite manter dados sensíveis seguros e oferecer disponibilidade em grande escala. No entanto, a janela de contexto é muito menor do que com modelos do lado do servidor, o que significa que documentos muito grandes podem ser difíceis de resumir. Para resolver esse problema, use a técnica resumo de resumos.
O que é o resumo dos resumos?
Para usar a técnica de resumo de resumos, divida o conteúdo de entrada em pontos-chave e resuma cada parte de forma independente. Você pode concatenar as saídas de cada parte e, em seguida, resumir esse texto concatenado em um resumo final.

Divida seu conteúdo com cuidado
É importante considerar como você vai dividir um texto grande, já que a divisão em locais diferentes pode levar a resultados radicalmente diferentes pelo Gemini Nano ou outros LLMs. O ideal é dividir os textos quando houver uma mudança de tema, como uma nova seção de um artigo ou um parágrafo. É importante evitar dividir o texto no meio de uma palavra ou frase, o que significa que não é possível definir um número de caracteres como única diretriz de divisão.
Há muitas maneiras de fazer isso, sem esforço manual. No exemplo a seguir, usamos o Divisor de texto recursivo do LangChain.js, que equilibra a performance e a qualidade de saída. Isso deve funcionar para a maioria das cargas de trabalho.
Ao criar uma nova instância, há dois parâmetros principais:
chunkSize
é o número máximo de caracteres permitidos em cada divisão.chunkOverlap
é a quantidade de caracteres que se sobrepõem entre duas divisões consecutivas. Isso garante que cada bloco tenha parte do contexto do bloco anterior.
Divida o texto com splitText()
para retornar uma matriz de strings com cada bloco.
A janela de contexto da maioria dos LLMs é expressa como um número de tokens, em vez de um número de caracteres. Em média, um token contém quatro caracteres. Portanto, você pode estimar o número de tokens usados por uma entrada dividindo o número de caracteres por 4.
No nosso exemplo, o chunkSize
tem 3.000 caracteres e é aproximadamente
750 tokens.
Gerar resumos para cada divisão
Depois de configurar como o conteúdo é dividido, você pode gerar resumos para cada parte com a API Summarizer.
Crie uma instância do resumidor com a função create()
. Para manter o máximo de contexto possível, definimos
o parâmetro format
como plain-text
, o type
como
tl;dr
e o length
como long
.
Em seguida, gere o resumo de cada divisão criada pelo
RecursiveCharacterTextSplitter
e concatena os resultados em uma nova string.
Separamos cada resumo com uma nova linha para identificar claramente o resumo de
cada parte.
Embora essa nova linha não importe ao executar esse loop apenas uma vez, ela é útil para determinar como cada resumo é adicionado ao valor do token para o resumo final. Na maioria dos casos, essa solução funciona para conteúdo médio e longo.
Resumo recursivo de resumos
Quando você tem uma quantidade excessiva de texto, o comprimento do resumo concatenado pode ser maior que a janela de contexto disponível, causando a falha da geração de resumo. Para resolver isso, você pode resumir recursivamente os resumos.

Ainda coletamos as divisões iniciais geradas por
RecursiveCharacterTextSplitter
. Em seguida, na função recursiveSummarizer()
,
repetimos o processo de resumo com base no comprimento do caractere das
divisões concatenadas. Se o comprimento do caractere dos resumos exceder 3000
,
vamos concatenar em fullSummaries
. Se o limite não for atingido, o
resumo será salvo como partialSummaries
.
Depois que todos os resumos forem gerados, os resumos parciais finais serão adicionados
ao resumo completo. Se houver apenas um resumo em fullSummaries
, nenhuma recursão
adicional será necessária. A função retorna um resumo final. Se houver mais de
um resumo, a função vai repetir e continuar resumindo os resumos
parciais.
Testamos essa solução com o RFC da Internet Relay Chat (IRC), que tem 110.030 caracteres, incluindo 17.560 palavras. A API Summarizer forneceu o seguinte resumo:
O Internet Relay Chat (IRC) é uma forma de se comunicar on-line em tempo real usando mensagens de texto. Você pode conversar em canais ou enviar mensagens privadas e usar comandos para controlar o chat e interagir com o servidor. É como uma sala de chat na Internet em que você pode digitar e conferir as mensagens de outras pessoas instantaneamente.
Isso é muito eficaz. E tem apenas 309 caracteres.
Limitações
A técnica de resumo de resumos ajuda você a operar dentro da janela de contexto de um modelo de tamanho de cliente. Embora haja muitos benefícios da IA do lado do cliente, você pode encontrar os seguintes problemas:
- Resumos menos precisos: com a recursão, a repetição do processo de resumo é possivelmente infinita, e cada resumo fica mais distante do texto original. Isso significa que o modelo pode gerar um resumo final muito superficial para ser útil.
- Desempenho mais lento: cada resumo leva tempo para ser gerado. Novamente, com um número infinito de resumos possíveis em textos maiores, essa abordagem pode levar vários minutos para ser concluída.
Temos uma demonstração de resumo disponível, e você pode conferir o código-fonte completo.
Envie feedback
Tente usar a técnica de resumo de resumos com diferentes comprimentos de texto de entrada, diferentes tamanhos de divisão e diferentes comprimentos de sobreposição para determinar o que funciona melhor para seus casos de uso.
Comece a testar a API Summarizer agora mesmo participando do teste de origem e compartilhando seu feedback. Sua contribuição pode afetar diretamente a criação e implementação de versões futuras dessa API e de todas as APIs de IA integradas.
- Para enviar feedback sobre a implementação do Chrome, envie um relatório de bug ou uma solicitação de recurso.
- Discuta o design da API Summarizer no GitHub comentando em um problema existente ou abrindo um novo.
- Participe do esforço de padronização entrando no grupo da comunidade do Web Incubator.
- Converse com a equipe de IA do Chrome sobre seu processo de resumo ou qualquer outra pergunta sobre a IA integrada.