Volver al inicio

Aritmética LLM precisa vía código

El artículo describe un método para cómputos precisos en LLM mediante la generación y ejecución de código Python en un sandbox de Docker. Discute arquitectura, problemas típicos y soluciones para tareas como cálculo de facturas de servicios públicos y análisis de estimaciones. Logra el 100% de precisión aritmética.

LLM sin errores en cálculos: genera código
Advertisement 728x90

Aritmética exacta en LLMs: generación de código ejecutable

Los modelos de lenguaje no están diseñados para cálculos precisos: la arquitectura de transformadores predice tokens basándose en probabilidades, no en operaciones matemáticas. Una consulta como "18 × 38.76" podría devolver 697.68 o incluso un error como 680 debido a aproximaciones de patrones extraídos durante el entrenamiento. Este es un límite sistémico, no una degradación del modelo.

Solución: mantener al LLM fuera del cálculo directo. El modelo genera un script en Python para la tarea, que se ejecuta en un entorno aislado. Python garantiza precisión: 18 * 38.76 siempre devuelve exactamente 697.68.

Arquitectura del sistema

Flujo de procesamiento: usuario → LLM → script en Python → contenedor Docker → resultado (texto + Excel).

Google AdInline article slot

Ejemplo: cálculo de facturas de servicios (Tomsk):

  • Entrada del usuario: «CW 320, HW 229, electricity 7422, prev: CW 302, HW 222, electricity 7133».
  • LLM con prompt sistemático (tarifas desde configuración) genera un script.
  • El script calcula el consumo, aplica tarifas y construye una tabla.
  • Ejecución en sandbox, archivo devuelto.

Código generado simplificado:

# Lecturas de medidores
cold_current, cold_prev = 320, 302
hot_current, hot_prev = 229, 222
elec_current, elec_prev = 7422, 7133

# Consumo
cold_usage = cold_current - cold_prev   # 18 m³
hot_usage = hot_current - hot_prev      # 7 m³
elec_usage = elec_current - elec_prev   # 289 kWh

# Tarifas de Tomsk 2025 (desde config, no del modelo)
tariffs = {
    'cold_water': 38.76,
    'hot_water': 142.63,
    'electricity': 4.94,
    'drainage': 27.04,
}

# Cálculo
cold_cost = cold_usage * tariffs['cold_water']       # 697.68
hot_cost = hot_usage * tariffs['hot_water']           # 998.41
elec_cost = elec_usage * tariffs['electricity']       # 1427.66
drain_cost = (cold_usage + hot_usage) * tariffs['drainage']  # 676.00

total = cold_cost + hot_cost + elec_cost + drain_cost  # 3799.75

# Generar Excel
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Servicio', 'Consumo', 'Tarifa, ₽', 'Monto, ₽'])
ws.append(['Agua fría', f'{cold_usage} m³', tariffs['cold_water'], cold_cost])
ws.append(['Agua caliente', f'{hot_usage} m³', tariffs['hot_water'], hot_cost])
ws.append(['Electricidad', f'{elec_usage} kWh', tariffs['electricity'], elec_cost])
ws.append(['Alcantarillado', f'{cold_usage + hot_usage} m³', tariffs['drainage'], drain_cost])
ws.append(['TOTAL', '', '', total])
wb.save('comunal.xlsx')

Las tarifas se inyectan desde un archivo externo de configuración actualizado mediante fuentes oficiales — sin alucinaciones del modelo.

Google AdInline article slot

Elección del LLM y sandbox

Modelos:

  • Qwen (Alibaba): API gratuita, generación confiable de código para tareas simples.
  • DeepSeek V3: Ideal para escenarios complejos (análisis de documentos), soporta caché de prompts.

GPT-4/Claude son excesivos para scripts de menos de 20 líneas.

Sandbox: contenedor Docker bajo demanda.

Google AdInline article slot
  • Aislamiento por usuario.
  • Librerías base: openpyxl, math, datetime.
  • Tiempo máximo: 30 segundos.
  • Pandas/numpy bloqueados en prompts.

Problemas comunes y soluciones

| Problema | Solución |

|--------|----------|

| Alucinaciones de tarifas | Inyectar tarifas desde el archivo de configuración en el prompt |

| Cálculo directo sin código | Validación + reintentar con instrucción: "solo código" |

| Texto corrupto en Excel | Usar encoding='utf-8', validación posterior |

| Importaciones faltantes | Restringir librerías en imagen y prompt |

| UX: conteo incorrecto de tokens | Conteo basado en backend |

| Errores de código | Devolver stderr al modelo para correcciones iterativas |

Devolver stderr reduce las iteraciones en un 5x: los modelos analizan trazas y corrigen errores más rápido.

Extensiones: análisis de presupuestos

Para revisar presupuestos (archivo Excel, ciudad): el modelo genera 150–200 líneas de código.

  • Analiza estructuras arbitrarias.
  • Compara con precios de mercado desde la configuración.
  • Detecta errores aritméticos.
  • Genera informes con codificación por colores (openpyxl).

Ejemplo: presupuesto de reforma de baño (Tomsk) — sobreprecio del 25,9%, 8 artículos >50% por encima, diferencias de 1–4 rublos.

Conclusiones clave

  • Los cálculos son 100 % precisos: se ejecutan mediante Python.
  • Las tarifas provienen de datos externos, nunca del modelo.
  • El sandbox es obligatorio para seguridad.
  • Las iteraciones con stderr aceleran la depuración.
  • Escalable: actualizar la configuración sin reentrenar.

— Editorial Team

Advertisement 728x90

Leer después