Kniha jízd je dokument, který nikdo nechce psát, a přesto ho spousta lidí píše. V Česku ho přitom žádný zákon nepřikazuje — je to důkazní praxe. Když se finanční úřad zeptá, proč jste si uplatnili náklady na auto, kniha jízd je ta věc, kterou položíte na stůl. (Na Slovensku je od letošního ledna elektronická evidence podmínkou plného odpočtu DPH, což pravidelně mate i české vyhledávání; české a slovenské předpisy tady nemají nic společného kromě podobně znějícího čísla.)

Důkazní praxe má nepříjemnou vlastnost: dělá se dlouho dopředu, než ji potřebujete, a odměnou za ni je, že se nic nestane. To je přesně ten typ práce, který lidé odkládají, dokud jim nezačne hořet termín — a pak ji dělají zpětně, z paměti a z kalendáře, tedy v ten nejhorší možný okamžik.

Provozuju na knihu jízd vlastní aplikaci. Roky jsem se soustředil na formulář. Aby byl rychlý, aby si pamatoval opakované trasy, aby se dal naklikat z mobilu jednou rukou. A pořád to byl formulář: prázdná políčka čekající, až do nich někdo přepíše to, co už jednou napsal jinam. Protože ty podklady existují. Jsou v kalendáři, v poznámkách z cest, ve výpisu z karty u čerpací stanice. Nechybí data. Chybí převod.

Tuhle část jsem letos v červenci dodělal: k aplikaci je připojený AI asistent, kterému podklady vložíte v běžné konverzaci a on z nich připraví jízdy. Zajímavá část toho projektu ale není, že model rozumí větě. To dneska umí kdekdo. Zajímavá část je, kde jsem mu musel svázat ruce — a proč mi to nakonec přišlo jako to hlavní, co jsem postavil.

Daňový dokument nesnese halucinaci

Jazykový model, který dostane přístup k databázi a právo do ní zapisovat, je fantastická demonstrace a mizerný nápad. U poznámkovníku vám nepovedený zápis nevadí, smažete ho. U knihy jízd je zápis tvrzení, které se za rok může ocitnout v odpovědi na úřední dotaz. Nechci být ten, kdo vysvětluje kontrole, že tahle cesta tam je proto, že to statisticky vypadalo pravděpodobně.

Postavil jsem to tedy tak, že asistent do knihy nezapisuje. Vůbec. Nikdy. Všechno, co vytvoří, je koncept — návrh, který se objeví v aplikaci v samostatné frontě „ke kontrole“ a do knihy se dostane až ve chvíli, kdy na něj kliknete. Model nemá zápisové právo, má návrhové právo. Rozdíl mezi tím dvojím je celý produkt.

Chvíli jsem to považoval za omezení, které bude potřeba omlouvat. Mýlil jsem se, je to naopak ta nejlepší věta, kterou o té funkci umím říct: do vaší knihy se nezapíše nic, co jste neschválili. Není to bezpečnostní pojistka nalepená zvenčí, je to tvar té věci. Stroj dělá tu část práce, která je otravná a mechanická; člověk si nechává tu část, která je zodpovědná a trvá tři vteřiny. Nikoho nepřekvapí, že asistentka připraví podklady a podpis zůstane na vás. Tohle je totéž, jen ta asistentka nikdy nespí a neumí říct ne.

Kde končí model a začíná kód

Druhá hranice byla méně zřejmá a považuju ji za důležitější.

Asistent nepočítá náhrady. Ani trochu. Když si řeknete o vyúčtování za červen, čísla nevymyslí model — spočítá je aplikace podle sazeb vyhlášky 589/2006 Sb., stejným kódem, jaký běží, když si o totéž požádáte klikáním. Model do toho výpočtu nevidí a nemá jak ho ovlivnit. Dostane hotový výsledek a maximálně ho převypráví.

Má to dva důvody a oba stojí za vyslovení nahlas. Ten první je, že aritmetika jazykových modelů je věrohodná, ne správná — a věrohodné číslo je horší než chybějící, protože nevyvolá otázku. Ten druhý je zajímavější: sazby se mění každý rok. Model natrénovaný loni vám letošní sazbu neřekne správně, ale řekne vám ji sebejistě, protože jeho jistota nemá nic společného s aktuálností. Jediná obrana proti tomu není lepší model. Je to nedat mu tu otázku.

Zůstalo mi z toho pravidlo, které od té doby používám i jinde: jazykový model nechte překládat, ne rozhodovat. Je vynikající v převodu neuspořádaného lidského vstupu do struktury — „v úterý a ve čtvrtek Brno a zpátky, plus někdy v pátek to letiště“ je pro něj snadné a pro regulární výraz nemožné. Ale ve chvíli, kdy z té struktury vzniká číslo, které někdo podepíše, musí být na řadě kód, který se dá přečíst, otestovat a v lednu opravit.

Sedm sloves

Celý asistent stojí na sedmi nástrojích. Umí přidat jízdu, hromadně naimportovat podklady, vypsat jízdy, udělat měsíční souhrn, spočítat náhradu, vyexportovat data a vyjmenovat vozidla. To je ono. Sedm sloves.

Chvíli jsem koukal na ten seznam a snažil se přijít na to, co v něm chybí, a pak mi došlo, že ta zajímavá informace je, co v něm chybí schválně: nic tam nemaže a nic tam nepřepisuje existující zápis. Není to opomenutí. Kdybych asistentovi dal sloveso „oprav mi tu jízdu z minulého týdne“, vypadalo by to v ukázce skvěle a byla by to tichá cesta, jak obejít celé schvalování — protože oprava je zápis, kterému se jen říká jinak.

Nástrojová plocha není technický detail, je to prohlášení o tom, co ta věc smí chtít. Skoro bych řekl, že je to jediný bezpečnostní dokument, který u takové integrace opravdu platí, protože na rozdíl od instrukcí v promptu se nedá ukecat.

Co se rozbilo

Čekal jsem, že problém bude porozumění. Nebyl.

Problém byly duplicity. Člověk, který diktuje své cesty, mluví v odkazech: „jako obvykle“, „to samé co minulý týden“, „a zpátky“. Když takový vstup pošlete dvakrát — protože jste si nebyli jistí, že to prošlo, což je velmi lidské — model vám velmi ochotně připraví tytéž jízdy podruhé. Nemá totiž jak vědět, že už jednou byl. Řešení není v modelu: hromadný import běží ve dvou krocích, nejdřív náhled toho, co by vzniklo, a teprve pak potvrzení, a každý požadavek nese vlastní identifikátor, aby se dal rozpoznat opakovaný pokus od nového záměru.

Druhá věc byla neurčitost. „Minulé úterý“ je pro člověka jednoznačné a pro stroj, který neví, kdy je dnes, není. Model tuhle mezeru vyplní vždycky — a v tom je ta past. Nechybí mu odvaha, chybí mu pochybnost. Nikdy neřekne „tomuhle nerozumím“, řekne datum. Proto je fronta konceptů užitečná i tam, kde jsem si myslel, že bude formalita: chyba, kterou takhle udělá, je vždycky viditelná chyba, protože stojí v seznamu a čeká na kliknutí, místo aby ležela zapsaná v knize.

Chyba, která nebyla v modelu

Nejhezčí selhání celého projektu se ale nestalo v AI. Stalo se v instalatérské práci okolo.

Adresa, na které poslouchá asistent, a adresa stránky, kde uživatel schvaluje koncepty, začínají stejnými znaky — jedna je předponou druhé. Pravidlo na proxy, které přesměrovává provoz asistenta, bylo napsané jako shoda na předponu. Takže si vzalo i tu druhou adresu. Jediná stránka v celé aplikaci, jejímž smyslem je lidský dohled, zmizela za tou částí, nad kterou má dohlížet.

Oprava byla jednořádková, ukotvená shoda místo předpony. Ale ta příhoda mi zůstala v hlavě jako nejlepší shrnutí toho, co jsem se za ten měsíc naučil. Věnoval jsem týdny přemýšlení o tom, jak zabránit modelu, aby si vymyslel jízdu, a málem mě položilo řazení pravidel v konfiguraci webserveru. Riziko u těchhle integrací není jenom to, čemu se dneska říká „AI safety“. Je to obyčejná, nudná, sto let stará softwarová faktura za nepozornost — jen teď visí nad dokumentem, o který se zajímá stát.

Co zatím nevím

Nevím, jestli to lidi budou používat. Vážně nevím a nechci to zamluvit tím, že napíšu „ohlasy jsou skvělé“.

Řekl jsem si tři signály, které mě můžou vyvést z omylu, a všechny tři jdou změřit. Zaprvé poměr schválených konceptů ke vzniklým: pokud lidé budou návrhy zahazovat, znamená to, že model podkladům nerozumí tak dobře, jak jsem si myslel, a celá úspora se rozpustí v opravování. Zadruhé rozdíl mezi připojením a používáním — u serverů, které provozuju jinde, jsem si už jednou zblízka ohmatal, že příchozí požadavky nejsou totéž co zájem, a nemám důvod myslet si, že tady to bude jiné. Konektor se dá připojit z pěti minut zvědavosti a pak už se nikdy neotevřít. A zatřetí duplicity: jestli se v knihách začnou objevovat dvě jízdy po téže trase v týž den, moje dvoukroková pojistka netěsní a je jedno, jak dobře vypadá na papíře.

Dávám tomu do konce roku. To je zhruba doba, za kterou se v mém malém světě pozná rozdíl mezi funkcí, kterou lidé používají, a funkcí, která je hezky napsaná.

Závěr

Nepřestal jsem vyplňovat knihu jízd proto, že by ji někdo zrušil. Přestal jsem ji vyplňovat proto, že jsem tu práci rozdělil na dvě části a každou dal na tu stranu, kde je levná. Přepis z kalendáře do políček je pro stroj triviální a pro člověka nudný. Rozhodnutí, že tohle tvrzení jde do daňového dokumentu, je pro stroj nedosažitelné a pro člověka otázka na jedno kliknutí.

Skoro všechny dobré integrace jazykových modelů, které jsem zatím viděl, vypadaly takhle. A skoro všechny špatné měly společné to, že se ta hranice někam ztratila — obvykle proto, že bez ní demo vypadá impozantněji.

Aplikace, o které je řeč, se jmenuje Kniha Jízd. AI asistent je v ní od července 2026 a je součástí placeného tarifu; samotná evidence jízd funguje i bez něj.