Visão com modelos multimodais: ler notas fiscais e romaneios sem inventar
No AgendaGo, que está em produção, um modelo multimodal lê as notas fiscais e os romaneios de fornecedores para atualizar o estoque. O importante é o que o modelo decide e o que o código decide.
O que é e qual é o problema
Um modelo multimodal recebe imagens além de texto. Aplicado a documentos, pode extrair dados de uma nota fiscal ou de um romaneio sem um template por fornecedor. O problema é que ele pode errar ou inventar um dado com total confiança, e um dado mal lido que movimenta estoque é um erro de negócio.
Como fiz no AgendaGo
O modelo extrai fornecedor, número, data, total e itens de cada nota fiscal ou romaneio, e é instruído a usar null e nunca inventar um valor. Todo o resto é feito pelo código:
- Uma validação determinística limita itens e tamanhos e exige uma janela de datas.
- O cruzamento dos itens com o catálogo é feito por código determinístico, não pelo modelo.
- O que foi lido vai para uma área de preparação. O estoque só se move quando uma pessoa confirma.
- Um bloqueio por sha256 impede enviar o mesmo arquivo duas vezes.
- PDFs que têm camada de texto usam extração de texto em vez de visão.
Decisões e compromissos
Deixei para o modelo apenas a extração, que é o que o código não consegue fazer. A interpretação, o cruzamento com o catálogo e a decisão de movimentar estoque ficam em código determinístico e com uma pessoa. Paga-se um passo de confirmação por documento; em troca, um erro de leitura não chega ao estoque sem que alguém veja.
O texto que vem dentro de um arquivo é tratado como dado, não como instrução. É a defesa contra prompt injection: um romaneio que diga “ignore o que veio antes” continua sendo um romaneio.
Stack relacionado
- OpenAI
- Supabase
- PostgreSQL