Executando verificação de segurança...
1

Contexto Infinito: Prompts acima da Janela de Contexto de qualquer modelo de IA

Recentemente me deparei com um problema clássico ao trabalhar com LLMs (GPT, Claude, Llama): o limite de contexto. Se você tem um documento de 200 páginas, um log gigante ou um livro, você não consegue simplesmente "jogar" ele no prompt.

Para resolver isso, desenvolvi a Infinity, uma biblioteca agnóstica em Node.js que aplica o conceito de Binary Tree Reduction para sumarização.

O Problema: O gargalo do contexto

Mesmo com modelos de 128k tokens, processar volumes massivos de dados de uma vez só:

  1. É caro.
  2. É lento.
  3. Faz a IA se perder nos detalhes (o famoso "lost in the middle").

A Solução: Redução Hierárquica (Map-Reduce)

A lógica da biblioteca é dividir para conquistar. Em vez de uma sumarização linear, ela trabalha em camadas, como uma pirâmide:

  1. Camada 1 (Map): O texto é quebrado em pedaços (chunks) com sobreposição (overlap) para não perder o fio da meada nas bordas. Cada pedaço é sumarizado em paralelo.
  2. Camadas Subsequentes (Reduce): O sistema pega os resumos gerados e os funde de dois em dois (árvore binária). O resumo A + resumo B vira o Novo Resumo C.
  3. Fim: O processo se repete até que sobre apenas um único bloco de texto que respeite o tamanho máximo definido.

Por que Árvore Binária?

A grande vantagem aqui é a concorrência. Se você tem 16 chunks de texto:

  • No modo sequencial, você faria 16 chamadas em fila.
  • No modo de árvore, você processa os pares em paralelo. A latência cai de/para.

O Código (Agnóstico e Flexível)

Criei a biblioteca de forma que ela não dependa de uma IA específica. Você pode criar um Adapter para a OpenAI, Anthropic, ou até um modelo local rodando no Ollama.

Exemplo de uso com OpenRouter:

const Infinity = require('./infinity');
const model = new OpenRouterAdapter('SUA_API_KEY', { model: 'meta-llama/llama-3-8b' });

const summarizer = new Infinity(model, {
  chunkSize: 5000,
  concurrency: 5, // Processa 5 pares por vez
  chunkOverlap: 500
});

const resumoMaster = await summarizer.summarize(textoMuitoLongo);

Resiliência e Concorrência

No mundo real, APIs falham. Por isso, implementei um controle de concorrência (concurrency) para não tomar Rate Limit na cara e um sistema simples de retry no adaptador.

O que vem por aí?

A ideia é evoluir para o infinity-struct, onde além de resumir, o motor consiga fazer o merge de JSONs estruturados, permitindo extrair dados complexos de documentos imensos mantendo a consistência do schema.

O código está aberto para quem quiser estudar ou contribuir. O que acham dessa abordagem de árvore para processamento de contexto?

Se alguém quiser ajudar aí, seria legal receber colaborações.

Carregando publicação patrocinada...