Zpět na domů

Přesná aritmetika LLM prostřednictvím kódu

Článek popisuje metodu přesných výpočtů v LLM prostřednictvím generování a spouštění Python-kódu v Docker-pískovišti. Diskutuje architekturu, typické problémy a řešení pro úkoly jako výpočet komunálních služeb a analýza odhadů. Dosahuje se 100% aritmetické přesnosti.

LLM bez chyb ve výpočtech: generujeme kód
Advertisement 728x90

Přesná aritmetika v LLM: generování spustitelného kódu

LLM nejsou určeny pro přesné výpočty: architektura transformer předpovídá tokeny na základě pravděpodobností, nikoli provádí operace. Dotaz na násobení 18 × 38,76 může dát 697,68 nebo chybu jako 680 kvůli aproximaci vzorů ze školicích dat. Toto je systémové omezení, nikoli degradace modelu.

Řešení: vynechat LLM z výpočtů. Model generuje Python kód pro úkol, který se spouští v izolovaném prostředí. Python zaručuje přesnost: 18 * 38,76 vždy vrátí 697,68.

Architektura systému

Průtok zpracování: uživatel → LLM → Python skript → Docker kontejner → výsledek (text + Excel).

Google AdInline article slot

Příklad pro výpočet komunálních poplatků (Tomsk):

  • Uživatel: «VH 320, TV 229, el 7422, před: VH 302, TV 222, el 7133».
  • LLM s systémovým promptem (sazby z konfigurace) generuje skript.
  • Skript vypočítá spotřebu, aplikuje sazby, tvoří tabulku.
  • Spuštění v pískovišti, vrácení souboru.

Zjednodušený generovaný kód:

# Ukazatele měřičů
cold_current, cold_prev = 320, 302
hot_current, hot_prev = 229, 222
elec_current, elec_prev = 7422, 7133

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

# Sazby Tomsk 2025 (z konfigurace, ne z modelu)
tariffs = {
    'cold_water': 38.76,
    'hot_water': 142.63,
    'electricity': 4.94,
    'drainage': 27.04,
}

# Výpočet
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

# Vytvoření Excel souboru
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Služba', 'Spotřeba', 'Sazba, Kč', 'Částka, Kč'])
ws.append(['Voda studená', f'{cold_usage} m³', tariffs['cold_water'], cold_cost])
ws.append(['Voda horká', f'{hot_usage} m³', tariffs['hot_water'], hot_cost])
ws.append(['Elektřina', f'{elec_usage} kWh', tariffs['electricity'], elec_cost])
ws.append(['Kanalizace', f'{cold_usage + hot_usage} m³', tariffs['drainage'], drain_cost])
ws.append(['CELKEM', '', '', total])
wb.save('komunální.xlsx')

Sazby jsou injektovány z externí konfigurace aktualizované podle oficiálních zdrojů. Model nevytváří hodnoty z hlavy.

Google AdInline article slot

Volba LLM a pískoviště

Modely:

  • Qwen (Alibaba): bezplatný API, stabilní generování kódu pro jednoduché úkoly.
  • DeepSeek V3: pro složité scénáře (analýza dokumentů), s cache promtů.

GPT-4/Claude jsou nadbytečné pro generování skriptů do 20 řádků.

Pískoviště: Docker kontejner na požádání.

Google AdInline article slot
  • Izolace uživatelů.
  • Základní knihovny: openpyxl, math, datetime.
  • Časový limit 30 sekund.
  • Zakázáno pandas/numpy v promtu.

Běžné problémy a řešení

| Problém | Řešení |

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

| Halucinace sazeb | Sazby z konfigurace v promtu |

| Přímý výpočet bez kódu | Validace + opakování s instrukcí „jen kód“ |

| Nepochopitelné znaky v Excelu | encoding='utf-8', postránější validace |

| Neexistující importy | Omezení knihoven v obraze i promtu |

| UX: špatný počet tokenů | Počítání na backendu |

| Chyby v kódu | Vrácení stderr modelu pro iterativní opravu |

stderr ve výstupu snižuje počet iterací na pětinu: model analyzuje traceback a upravuje.

Rozšíření: analýza rozpočtů

Pro kontrolu rozpočtů (Excel soubor, město): model generuje 150–200 řádků kódu.

  • Parsování libovolné struktury.
  • Porovnání s tržními cenami z konfigurace.
  • Detekce aritmetických chyb.
  • Report s barevným zvýrazněním (openpyxl).

Příklad: rozpočet opravy koupelny (Tomsk) — přehodnocení 25,9 %, 8 položek >50 %, rozdíly 1–4 Kč.

Co je důležité

  • Aritmetika 100 % přesná: spouští se v Pythonu.
  • Sazby z externích dat, ne z modelu.
  • Pískoviště je povinné pro bezpečnost.
  • Iterace s stderr zrychlují ladění.
  • Škálovatelné: aktualizace konfigurace bez přetrénování.

— Editorial Team

Advertisement 728x90

Číst dál