Visión con modelos multimodales: leer facturas y remitos sin inventar
En AgendaGo, que está en producción, un modelo multimodal lee las facturas y remitos de proveedores para actualizar el stock. Lo importante es qué decide el modelo y qué decide el código.
Qué es y qué problema tiene
Un modelo multimodal recibe imágenes además de texto. Aplicado a documentos, puede extraer datos de una factura o un remito sin una plantilla por proveedor. El problema es que puede equivocarse o inventar un dato con total seguridad, y un dato mal leído que mueve stock es un error de negocio.
Cómo lo hice en AgendaGo
El modelo extrae proveedor, número, fecha, total y renglones de cada factura o remito, y se le indica usar null y nunca inventar un valor. Todo lo demás lo hace el código:
- Una validación determinista limita renglones y largos y exige una ventana de fechas.
- El cruce de los renglones con el catálogo lo hace código determinista, no el modelo.
- Lo leído va a un área de preparación. El stock se mueve solo cuando una persona confirma.
- Un bloqueo por sha256 impide subir dos veces el mismo archivo.
- Los PDF que tienen capa de texto usan extracción de texto en lugar de visión.
Decisiones y compromisos
Le dejé al modelo solo la extracción, que es lo que el código no puede hacer. La interpretación, el cruce con el catálogo y la decisión de mover stock quedan en código determinista y en una persona. Se paga un paso de confirmación por documento; a cambio, un error de lectura no llega al stock sin que alguien lo vea.
El texto que viene dentro de un archivo se trata como dato, no como instrucción. Es la defensa contra prompt injection: un remito que diga “ignorá lo anterior” sigue siendo un remito.
Stack relacionado
- OpenAI
- Supabase
- PostgreSQL