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

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:

Extrato Nubank
O Resultado em JSON:

JSON Estruturado

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):

Arquitetura no Railway

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!

Carregando publicação patrocinada...
1

Tenho um app windows que extrai dados de certos tipos de arquivos usando expressões regulares.
Agora estou montando um modelo especialista nos arquivos pra não precisar de LLMs. Pelo menos ele consegue se adaptar a pequenas mudanças de layout, coisa que as regex falham silenciosamente.
Muito boa sua ideia. As LLMs tem um índice de acerto muito baixo, no meu caso, pois os documentos tem as informações bem espalhadas. É preciso analisar, por exemplo, 60 páginas pra recolher uma única linha de tabela final. E quando você multiplica por 200 arquivos de uma vez, aí o negócio desanda.

1

Sim, trabalhei em uma empresa de investimento pegávamos extratos e documentos de muitos bancos cada um com sua particularidade. A ideia do app é ter suporte para multiplas páginas, já fiz extração com PDF de 30/40 páginas e o resultado foi extremamente satisfatório. Ter o dado já em json sem escrever 2k linhas de código para consumir facilita mt a vida.

1

Caramba cara otimo trabalho, não cheguei a usar o serviço mas muito bom o site da structura e bem clara a forma como tudo foi organizado! Parabéns e sucesso com o seu projeto!

1

Obrigado, tentei mostrar de cara o ganho com o app na landing page, mas tive um pouco de dificuldade já que minha ideia é atingir 2 públicos desenvolvedores e via web para pessoas fria.

Se quiser e puder, poderia dar um feedback da usabilidade da ferramenta.

Abraços.