Pon un puntaje de confianza entre el regex y el LLM
La capa secreta entre el regex y tu LLM es un puntaje de confianza. La mayoría de los equipos que construyen pipelines de extracción eligen un bando: regex puro (rápido, frágil) o LLM puro (flexible, lento, cobrado por token). Los equipos que logran sistemas baratos y precisos no eligen: ponen un puntuador en el medio y dejan que cada ítem elija su propio camino.
Por qué una capa intermedia
En pipelines sobre texto estructurado o semiestructurado — facturas, líneas de log, títulos de productos, campos de formularios — un parser determinístico bien ajustado suele resolver la gran mayoría de las entradas, a menudo más del 95%, con costo marginal prácticamente cero y latencia de submilisegundos. Una llamada al LLM por el mismo ítem cuesta dinero real y de cientos de milisegundos a segundos.
Mandar todo al modelo significa pagar precio de modelo por trabajo que un regex ya hace. No mandar nada significa parsear mal, en silencio, ese 2–5% raro. La solución es una cascada: parsear determinísticamente, puntuar cuánto confías en ese parseo y escalar solo por debajo de un umbral. Es la misma idea detrás de las cascadas de LLM del paper FrugalGPT, que mostró que encadenar de modelos baratos a caros puede igualar la calidad del mejor modelo con hasta un 98% de reducción de costo en sus benchmarks.
El pipeline de tres etapas
- Parsear. Corre primero la capa determinística — regex, una gramática o un motor de reglas. Emite campos candidatos.
- Puntuar. Una función pequeña asigna a cada parseo una confianza en [0, 1] a partir de señales concretas (abajo).
- Enrutar. En o por encima del umbral (0.95 es un punto de partida razonable): acepta el parseo directamente. Por debajo: manda solo ese ítem al LLM, idealmente adjuntando el parseo fallido como contexto.
result = regex_parse(text)
score = confidence(result, text)
if score >= 0.95:
return result # free path — most items
return llm_parse(text, hint=result) # paid path — edge cases only
Qué entra en el puntaje
No necesitas un modelo entrenado para empezar. Señales baratas y honestas:
| Señal | Sube la confianza | Baja la confianza |
|---|---|---|
| Cobertura del match | El patrón consumió toda la entrada | Caracteres sobrantes sin match |
| Validación de campos | Las fechas parsean, los totales suman, los IDs pasan checksum | Un "precio" de $0.00 o 999999 |
| Ambigüedad | Exactamente un patrón hizo match | Dos patrones hicieron match a la vez |
| Distribución | Valores dentro de rangos históricos | Valores atípicos frente a tu corpus |
Empieza con una combinación ponderada a mano de estas señales. Si más adelante quieres que el puntaje signifique algo ("0.9 = correcto el 90% de las veces"), calíbralo contra una muestra etiquetada — Platt scaling y regresión isotónica son las herramientas estándar, ambas incluidas en el módulo de calibración de scikit-learn.
Cómo elegir el umbral
El umbral es una perilla de negocio, no una constante. Si lo bajas, gastas menos pero aceptas más errores silenciosos; si lo subes, compras precisión con llamadas al LLM. Mide dos números sobre una muestra etiquetada: tasa de escalamiento (qué fracción va al modelo) y tasa de error residual (con qué frecuencia un parseo aceptado está mal). Mueve el umbral hasta que ambos quepan en tu presupuesto y tu tolerancia al error — y registra cada decisión de ruteo para re-ajustar con datos de producción.
Trucos para usuarios avanzados
- Puntúa también al LLM. Pide salida estructurada al modelo e inspecciona los logprobs de los tokens — te dan una confianza por predicción que puedes umbralizar, así incluso el camino escalado puede marcar ítems "todavía dudosos" para revisión humana en vez de adivinar.
- Pásale al modelo el parseo fallido. Adjuntar el resultado parcial del regex como pista convierte la llamada al LLM en un trabajo de reparación, más corto y barato que parsear desde cero.
- Encadena modelos, no solo parsers. El mismo truco de puntuar-y-escalar funciona entre un modelo chico y uno grande. Routers open source como RouteLLM reportan recortes de costo de hasta 85% manteniendo ~95% de la calidad del mejor modelo al enrutar las consultas fáciles al modelo barato.
- Vigila el drift. Cuando los formatos aguas arriba cambian, la tasa de escalamiento se dispara antes de que caiga la precisión. Pon una alerta: es tu señal de alerta temprana más barata.
Recursos
- FrugalGPT: How to Use Large Language Models While Reducing Cost (arXiv)
- Probability calibration — guía de usuario de scikit-learn
- Using logprobs for classification confidence — OpenAI Cookbook
- RouteLLM — framework open source de ruteo de LLMs
re— operaciones con expresiones regulares, docs de Python
¿Construyendo una funcionalidad con IA? Yeda AI diseña, audita y entrega sistemas LLM de producción.