← Zpět na blog

Vlastní data v druhém mozku

Série: Jak jsem si postavil druhý mozek · díl 6

První díly této série byly o tom, co si AI pamatuje z rozhovorů se mnou. Jenže rozhovor je jen to, co si sám vybavím a řeknu. Mezi červencem a koncem srpna jsem proto do druhého mozku napojil pět zdrojů, které o mně vědí víc než moje paměť: hodinky, auto, banku, fotky a poštu. Každý se ukázal jako jiný problém. Ale selhaly všechny stejně: potichu.

Jeden tvar pro všechno

Vzor jsem nastavil u prvního zdroje a pak ho jen opakoval. Data přijdou jako soubor do vlastní složky a tam se už nikdy nemění. Z té složky program vygeneruje stránky ve wiki, celé znovu při každém běhu. Stránku nikdo ručně neupravuje.

Vygenerovaná stránka je čistá funkce surových dat. Smažte ji, spusťte program znovu a musí vyjít přesně stejně.

Zní to jako akademická poznámka, ale je to pojistka. Když opravím chybu v programu, opraví se celá historie jedním přegenerováním, bez ručního přepisování stovek stránek. A všechno běží na mém stroji, žádná cloudová služba, žádná databáze, jen soubory.

Hodinky: „proběhlo v pořádku, nic nezapsáno"

Hodinky posílají data přes telefon na můj server. V červenci tři noci po sobě nepřišlo nic a program každou noc hlásil, že proběhl v pořádku. Proběhl. Jen nic nezapsal, a to se od klidného dne nedá rozeznat. Příčina byla obyčejná: na telefonu neběželo VPN spojení, přes které data chodí.

Opravou nebyl lepší přenos, ale alarm. Každý běh dnes nejdřív zkontroluje, jak stará jsou nejnovější data, a teprve potom dělá cokoli jiného. Když neběží dost dlouho, ozve se, a dokud se ještě dají data z telefonu zachránit, napíše i kolik hodin na to zbývá.

Pak jsem alarm porovnal s jeho vlastním logem a zjistil, že by se v noci, kdy na tom záleží, nikdy neozval. Data chodí jednou denně, takže jejich stáří neroste plynule, ale skáče po celých dnech. Hranice ležela těsně nad první vynechanou noc. Upozornění tak chodilo o den později, než mělo.

Dvě další lekce z hodinek:

  • Co vidíte na displeji, nemusí přijít v datech. Hodinky ukazují zátěž srdce. V žádném z přijatých souborů ale nebyla, protože výrobce odvozené hodnoty dál nepouští. Spočítal jsem si je sám ze surového tepu, který chodí.
  • Pojmenování pole je tvrzení. Pole „spánek" měřilo celý čas v posteli. Měsíc jsem četl číslo, které znamenalo něco jiného, než říkal jeho název.

Auto: měsíc bez jízd vypadá jako měsíc doma

Jízdy auta zapisuje open-source program TeslaMate. Když jsem ho napojoval na wiki, první dotaz do jeho databáze ukázal díru: skoro dva měsíce nezapsal jedinou jízdu. Tesla změnila své API a TeslaMate přestal zapisovat, zatímco stroj, na kterém běží, vypadal úplně zdravě.

Nikdo si toho nevšiml, protože nic nevypadalo špatně. Měsíc bez jízd se vykreslí stejně jako měsíc strávený doma.

Pomohlo až jedno číslo: stav tachometru mínus konec poslední zapsané jízdy. Tachometr běží, ať se zapisuje, nebo ne, takže rozdíl je přesně ta vzdálenost, která se ztratila. Je to jediný signál, který rozliší „nejel jsem" od „nezapsal jsem". A po každé opravě slouží jako zkouška: projedu se, a pokud se rozdíl nevynuluje, oprava nezabrala.

Banka: zdroj, kterým je moje pozornost

S bankou to bylo opačně. Přímý přístup přes API je u nás pro jednotlivce zavřený, potřeboval bych licenci. Bezplatný zprostředkovatel, přes kterého se to dalo obejít, přestal přijímat nové uživatele. Zůstal ruční export z internetového bankovnictví.

To má jeden poctivý důsledek, který jsem si zapsal: tenhle zdroj alarm mít nemůže. Žádný skript nerozezná „nic jsem neutratil" od „zapomněl jsem nahrát výpis". Místo alarmu proto stránka sama ukazuje, jak stará je její nejnovější platba, aby se staré číslo nedalo citovat jako dnešní.

Parsování bylo snadné. Každý výpis se kontroluje proti vlastním součtům banky a program odmítne zapisovat, když nesedí. Zkusil jsem to: změnil jsem jednu částku v kopii o korunu a chyba se našla na správném řádku. Skutečná práce byla klasifikace. Jedna platba se počítala jako převod mezi mými účty jen proto, že v popisu bylo moje jméno.

Fotky: zdroj se otočí

Chtěl jsem, aby si poradci mohli číst moji knihovnu fotek. Nejde to, a nejde to nikomu: Google v březnu 2025 zrušil oprávnění, přes které šlo knihovnu číst bez obsluhy. Celý přístup se tedy musel otočit. Zdrojem je telefon, odkud se fotky kopírují na můj stroj, a místní model každou roztřídí: účtenka, jídlo, dokument.

Než jsem třídiči uvěřil, změřil jsem ho. Jeden doklad totožnosti zařadil jako zdravotní záznam. Horší bylo, že u všech sto sedmi fotek hlásil vysokou jistotu. Jistota, která se nikdy nesníží, není jistota. Prompt jsem uprostřed měření záměrně neopravoval, aby se nástroj nekalibroval během testu.

Pošta: filtr při čtení, ne při zápisu

Ranní přehled poštu četl, poradci podle něj jednali a pak se to zahodilo. Dnes se ukládají jen metadata zpráv, nikdy jejich obsah. Filtr, který odděluje skutečnou poštu od hromadné, běží až při generování stránky. Když jsem ho opravil, opravila se celá historie jedním přegenerováním, bez jediného dotazu do Gmailu.

Hned první den se to vyplatilo: systém měl dvanáct dní vedenou jednu odpověď jako mlčení. Odpověď přitom přišla.

Pět kopií téhož kódu

Pět zdrojů vzniklo jeden po druhém a každý dostal vlastní kopii stejného kódu: zápis do wiki, zámek, uložení do gitu, upozornění. Kopie se rozešly. Některé ukládaly do gitu i soubory, které jim nepatřily. Pět programů zapisovalo bez společného zámku. Koncem srpna jsem je nahradil jednou knihovnou a přidal první testy. Než jsem cokoli uložil, ověřil jsem, že nový kód vygeneruje všechny stránky bajt po bajtu stejně jako starý.

Co platí pro všechny zdroje

Chybějící stránka znamená „nenahráno", nikdy „nestalo se".

Tohle pravidlo dnes platí pro všechny poradce. Než řeknou, že něco v datech není, musí ověřit, že data vůbec sahají k danému datu.

Jak začít

  1. Jeden tvar pro každý zdroj: surová data se nemění, stránky se z nich celé generují znovu.
  2. Ke každému zdroji si napište, jak selže potichu. Pak hlídejte právě to.
  3. Měřte, co chybí, ne co přišlo. Tachometr mínus zapsané jízdy, stáří nejnovějších dat.
  4. Alarm ověřte proti historii, ne proti představě, jak by se měl chovat.
  5. Kde alarm nejde, ať stránka přizná, jak je stará.
  6. Druhou kopii kódu udělejte, třetí už ne.

Příště: jak z těch dat složit jeden den, i když každý zdroj vidí jen jeho kousek.

← Zpět na blog Napište mi