<link rel="stylesheet" href="/assets/fonts/jetbrains-mono/jetbrains-mono.css" />
All posts

Como construí um laboratório de 13 ferramentas PDF e IA que trabalham em conjunto

O laboratório deste site nasceu de uma necessidade concreta: precisava de uma bancada de testes para as tecnologias que uso com clientes, e queria que fosse também útil a quem trabalha todos os dias com documentos. Hoje tem 13 ferramentas — visualizador, editor de PDF, OCR, scanner, tradução, resumo, pesquisa de PDF legais, slides com IA e outras — em sete idiomas. Esta é a história de como o construí.

O problema e as restrições

  • Custos baixos: um backend NestJS num pequeno serviço cloud, sem infraestrutura dedicada.
  • Privacidade: sempre que possível, os ficheiros não devem sair do dispositivo de quem os usa.
  • Sete idiomas e SEO: cada ferramenta tem de ser encontrável no Google em todos os idiomas.
  • Ferramentas anónimas: sem registo obrigatório, logo com proteções contra abusos.

Escolha 1: no browser quando possível, no servidor quando necessário

O visualizador, o editor de PDF (unir, dividir, rodar, marca de água) e a primeira fase do OCR funcionam inteiramente no browser, com pdf.js e pdf-lib: o documento nunca é enviado. O servidor só entra em jogo quando é inevitável: chamadas a modelos de IA, OCR pesado com Tesseract, conversões de formato.

Escolha 2: primeiro o texto, depois o OCR

Cada página é primeiro consultada sobre a sua camada de texto. Abaixo de 40 caracteres considero-a uma digitalização e envio-a para OCR; o mesmo limiar vale no browser e no servidor, para que os dois caminhos deem resultados coerentes. O OCR é lento, por isso há um teto de 20 páginas por documento.

Escolha 3: limites declarados, não escondidos

Os documentos longos são divididos em blocos para a IA. Acima de 15 blocos prefiro truncar e dizê-lo ao utilizador, em vez de deixar explodir tempos e custos com um ficheiro patológico:

// Hard cap on blocks per document: beyond it the file is
// truncated honestly instead of exploding latency and cost.
const chunks = allChunks.slice(0, this.MAX_CHUNKS); // 15
const truncated = allChunks.length > this.MAX_CHUNKS;
// "truncated" goes back to the UI: the user is told, not surprised

Escolha 4: ferramentas ligadas por um workspace

O valor real está nas cadeias: scanner → OCR → tradução, pesquisa → resumo. Por isso acrescentei um workspace que passa o resultado de uma ferramenta à seguinte sem descarregar e voltar a carregar ficheiros. Contei-o em detalhe neste artigo.

Escolha 5: quotas de IA

Ferramentas anónimas e chamadas a modelos de IA são uma combinação perigosa para o orçamento. Além do limite por minuto, introduzi um teto diário por endereço IP e um orçamento global diário de tokens, com um interruptor de emergência. Sem isso, um único script automático poderia gastar numa hora o orçamento de um mês.

Os erros com que mais aprendi

  • Os meus cabeçalhos de segurança bloqueavam a minha pré-visualização. As predefinições do Helmet proíbem mostrar respostas do backend num iframe de outra origem: tive de abrir uma exceção específica, só nessa rota e só para o meu frontend.
  • Nos telemóveis a pré-visualização do PDF mostrava só a primeira página. O visualizador nativo dos browsers móveis faz isso muitas vezes: no telemóvel passei a renderizar as páginas com pdf.js, através de um proxy com uma lista fechada de domínios permitidos para evitar abusos.
  • As fontes têm de ser verificadas ao vivo. Para a pesquisa de PDF legais mantive Internet Archive, Project Gutenberg, arXiv e Europe PMC; outras fontes promissoras foram descartadas porque, testadas a sério, devolviam páginas HTML e não PDF.
  • Títulos num só idioma. Durante semanas as páginas das ferramentas tiveram títulos e descrições fixos, quase todos em inglês: as versões nos outros idiomas eram, na prática, invisíveis para o Google.

O resultado

Treze ferramentas em sete idiomas, com páginas pré-renderizadas para cada idioma e a maior parte do processamento no browser. Mas o resultado mais útil é outro: um repertório de soluções já testadas — tratamento de PDF, OCR, quotas de IA, proxies seguros, i18n — que reutilizo nos projetos para clientes.


Em resumo

Construir o laboratório ensinou-me três coisas: processar no browser tudo o que for possível, declarar os limites em vez de os esconder e proteger todos os recursos que custam dinheiro. Se tens um projeto que trabalha com documentos ou IA, escreve-me: provavelmente já enfrentei um problema semelhante.

💬 Notas dos leitores

0 notas

Escreva uma nota

Partilhe a sua opinião, uma sugestão ou um elogio

Notas recentes

Ainda não há notas. Seja o primeiro a comentar!