Retour à l'accueil

Arithmétique LLM précise via Code

L'article décrit une méthode pour des calculs précis dans LLM en générant et exécutant du code Python dans une sandbox Docker. Discute de l'architecture, des problèmes typiques et des solutions pour des tâches comme le calcul de factures d'utilités et l'analyse d'estimations. Atteint 100 % de précision arithmétique.

LLM sans erreurs dans les calculs : générer du code
Advertisement 728x90

Arithmétique exacte dans les LLM : génération de code exécutable

Les LLM ne sont pas conçus pour des calculs précis — l'architecture transformer prédit des tokens en fonction de probabilités, pas d'opérations mathématiques. Une requête comme « 18 × 38,76 » peut renvoyer 697,68 ou une erreur comme 680, en raison d'une approximation de motifs tirée des données d'entraînement. Il s'agit d'une limitation systémique, non d'un déclin du modèle.

Solution : maintenir le LLM à l'écart du calcul direct. Le modèle génère un script Python pour la tâche, qui s'exécute dans un environnement isolé. Python garantit la précision : 18 * 38,76 renvoie toujours exactement 697,68.

Architecture du système

Flux de traitement : utilisateur → LLM → script Python → conteneur Docker → résultat (texte + Excel).

Google AdInline article slot

Exemple : calcul des factures d'utilités (Tomsk) :

  • Entrée utilisateur : « Eau froide 320, eau chaude 229, électricité 7422, ancien : Eau froide 302, eau chaude 222, électricité 7133 ».
  • LLM avec prompt système (taux depuis la configuration) génère un script.
  • Script calcule la consommation, applique les tarifs et construit un tableau.
  • Exécution en sandbox, fichier retourné.

Code généré simplifié :

# Consommation des compteurs
froide_courant, froide_prev = 320, 302
chaude_courant, chaude_prev = 229, 222
elec_courant, elec_prev = 7422, 7133

# Consommation
froide_consom = froide_courant - froide_prev   # 18 m³
chaude_consom = chaude_courant - chaude_prev      # 7 m³
elec_consom = elec_courant - elec_prev   # 289 kWh

# Tarifs à Tomsk 2025 (issus de la config, non du modèle)
tarifs = {
    'eau_froide': 38.76,
    'eau_chaude': 142.63,
    'electricite': 4.94,
    'assainissement': 27.04,
}

# Calcul
froide_cout = froide_consom * tarifs['eau_froide']       # 697.68
chaude_cout = chaude_consom * tarifs['eau_chaude']           # 998.41
elec_cout = elec_consom * tarifs['electricite']       # 1427.66
drain_cout = (froide_consom + chaude_consom) * tarifs['assainissement']  # 676.00

total = froide_cout + chaude_cout + elec_cout + drain_cout  # 3799.75

# Génération Excel
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Service', 'Consommation', 'Tarif, ₽', 'Montant, ₽'])
ws.append(['Eau froide', f'{froide_consom} m³', tarifs['eau_froide'], froide_cout])
ws.append(['Eau chaude', f'{chaude_consom} m³', tarifs['eau_chaude'], chaude_cout])
ws.append(['Électricité', f'{elec_consom} kWh', tarifs['electricite'], elec_cout])
ws.append(['Assainissement', f'{froide_consom + chaude_consom} m³', tarifs['assainissement'], drain_cout])
ws.append(['TOTAL', '', '', total])
wb.save('communal.xlsx')

Les tarifs proviennent d’un fichier de configuration externe mis à jour via des sources officielles — aucune hallucination du modèle.

Google AdInline article slot

Choix du LLM et du sandbox

Modèles :

  • Qwen (Alibaba) : API gratuite, génération fiable de code pour les tâches simples.
  • DeepSeek V3 : pour les scénarios complexes (analyse de documents), prend en charge le cache de prompts.

GPT-4/Claude sont surdimensionnés pour les scripts de moins de 20 lignes.

Sandbox : conteneur Docker à la demande.

Google AdInline article slot
  • Isolation des utilisateurs.
  • Bibliothèques de base : openpyxl, math, datetime.
  • Timeout de 30 secondes.
  • Pandas/numpy bloqués dans les prompts.

Problèmes courants et solutions

| Problème | Solution |

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

| Hallucinations de tarifs | Injection des tarifs depuis la config dans le prompt |

| Calcul direct sans code | Validation + relance avec instruction : « uniquement du code » |

| Texte corrompu dans Excel | Utilisation de encoding='utf-8', validation post-exécution |

| Importations manquantes | Restriction des bibliothèques dans l’image et le prompt |

| UX : comptage incorrect de tokens | Comptage côté backend |

| Erreurs de code | Retour de stderr au modèle pour corrections itératives |

Retourner stderr réduit les itérations de 5 fois — les modèles analysent les traces et corrigent plus vite.

Extensions : analyse budgétaire

Pour vérifier des budgets (fichier Excel, ville) : le modèle génère 150–200 lignes de code.

  • Analyse de structures arbitraires.
  • Comparaison avec les prix du marché depuis la config.
  • Détection d'erreurs arithmétiques.
  • Génération de rapports avec coloration (openpyxl).

Exemple : budget de rénovation de salle de bains (Tomsk) — surcharge de 25,9 %, 8 articles >50 % au-dessus, écarts de 1 à 4 roubles.

Points clés

  • Les calculs sont 100 % précis : exécutés via Python.
  • Les tarifs proviennent de données externes, jamais du modèle.
  • Le sandbox est obligatoire pour la sécurité.
  • Les itérations basées sur stderr accélèrent le débogage.
  • Évolutive : mise à jour de la config sans re-entraînement.

— Editorial Team

Advertisement 728x90

Lire ensuite