Pitch: Como cheguei a 99.8% de acerto extraindo dados de PDFs usando FastAPI, OCR e LLMs
Fala pessoal, tudo bem?
Se tem uma coisa que sempre me sugou a alma como desenvolvedor foi precisar fazer parseamento de documentos (PDFs, imagens, extratos). Tentar criar regras do zero consumia um tempo absurdo e, a cada layout novo, o código quebrava.
A solução moderna óbvia seria jogar tudo num LLM, certo? Foi o que eu tentei. Mas plugar um LLM direto na extração gerou outro pesadelo: eu gastava dezenas de linhas só para fazer engenharia de prompt, pedir para o JSON vir formatado e, no fim das contas, a IA ainda alucinava dados ou quebrava a estrutura. O resultado é que eu voltava a escrever Regex para consertar o JSON que o LLM cuspia torto.
Para resolver minha própria dor, passei os últimos tempos construindo o Structura. O conceito é simples: entra documento (PDF, Imagem), sai dado estruturado (JSON ou XLSX) validado.
A abordagem que funcionou (OCR + LLM)
Para fugir das alucinações e bater a casa dos 99.8% de assertividade, a estratégia foi não deixar o LLM "ler e interpretar" solto. O backend faz a ancoragem do texto via OCR tradicional e usa o LLM estritamente como um motor de formatação semântica e tipagem (devolvendo exatamente as chaves que você pedir na API).
Para ilustrar, peguei um extrato sujo do Nubank:
O Documento original:

O Resultado em JSON:

O que roda por baixo do capô?
Sei que a galera aqui curte arquitetura. A topologia a que cheguei foi essa:
- Backend / Core: Python com FastAPI.
- Frontend: Next.js.
- Mensageria / Cache: Redis (rodando os workers para processamento assíncrono).
- Autenticação: Appwrite. Foi minha primeira vez usando a sério e me salvou semanas de código boilerplate para eu poder focar no produto. Recomendo muito.
- Infra: Railway. Subir o Postgres, o Redis e os serviços por lá foi uma experiência absurdamente lisa.
Aqui está um pedaço da topologia no Railway (Frontend, Backend, WorkerRedis e Redis):

O Desafio para a Comunidade
Eu acabei de liberar a versão inicial e criei um Free Tier com 30 créditos/mês.
Meu pedido aqui é um feedback técnico honesto. Queria desafiar vocês a entrarem no structura.com.br, criarem um esquema de extração e jogarem os piores e mais desformatados PDFs ou extratos que tiverem aí para ver se a ferramenta quebra.
A documentação da API faz sentido para vocês? A stack aguenta bem o tranco inicial?
Valeu pelo espaço e qualquer dúvida sobre a implementação (FastAPI, Appwrite, OCR, etc), manda aí nos comentários que eu detalho!