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).
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.
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í.
- 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
Zatím žádné komentáře.