Někde v záznamu klienta, uprostřed obyčejné poznámky o obyčejném telefonátu, je věta jako tato: “Rozpočet je teď napjatý, dohodli jsme se, že se jim ozveme za dva měsíce a probereme to znovu.”
Napsaná jednou. Nikdy víc nepřečtená. Ne proto, že by někdo zapomněl, že je to důležité, ale proto, že na ní nic nevypadalo jako úkol. Nebyl to záznam v kalendáři. Nebyla to připomínka. Byla to prostě věta, která dělala to, co věty v poznámkách dělají: seděla tam, technicky pravdivá, funkčně neviditelná.
Chtěli jsme vědět, jestli to systém dokáže zachytit sám, aniž by si někdo musel pamatovat, že se má vrátit a ručně z věty udělat úkol.
Co jsme skutečně postavili a co záměrně ne
Instinkt u podobné funkce je nechat AI, ať to zvládne celé — přečte poznámku, zjistí datum, rozhodne, že je po termínu, možná i navrhne připomínku. My jsme to místo toho záměrně rozdělili.
Jediným úkolem modelu je porozumění jazyku: přečíst nedávné poznámky klienta a rozpoznat do budoucna směřující závazek, něco jako “za dva měsíce se k tomu vrátíme” nebo “ozveme se po jejich zasedání představenstva.” Jednoduchými slovy odhadne naznačené zpoždění. To je vše. Veškerý skutečný výpočet data — termín, jestli ho dnešek už překročil — probíhá až poté, v běžném, deterministickém kódu. Model nikdy nepočítá a nikdy nedělá konečné rozhodnutí o tom, co je po termínu. On čte. Kód rozhoduje.
Toto rozdělení je důležitější, než zní. Porozumění jazyku je přesně ten druh vágního, na kontextu závislého úkolu, ve kterém je model dobrý. Počítání dat je přesně ten druh úkolu, kde nechcete, aby model improvizoval, ani trochu.
Skutečný test
Neověřovali jsme jen to, jestli endpoint vrátí něco, co vypadá rozumně. Napsali jsme skutečnou poznámku ke skutečnému záznamu klienta: “…dohodli jsme se, že se jim ozveme za 2 měsíce a probereme rozpočet znovu.” Zavolali jsme endpoint. Správně z ní vytáhl závazek, spočítal naznačené zpoždění 60 dní a dospěl k termínu přesně 60 dní od skutečného časového razítka poznámky, správně označenému jako ještě ne po termínu.
Malé, a přesně o to jde. Systém nepotřeboval, aby mu někdo řekl, že je tam slib, který má najít. Přečetl větu, kterou si někdo napsal sám pro sebe, ne pro formulář, a vytáhl z ní skutečný termín.
Část, kterou je snadné přehlédnout
Poznámky v Craft11 se dají jen přidávat. Nikdo je needituje, nikdo je nemaže, ani Stark. Je to stejný princip, který drží syrovou stranu každého záznamu poctivou: to, co jste skutečně napsali, zůstává přesně tak, jak jste to napsali. Když jsme pak potřebovali testovací poznámku odstranit, nebylo po ruce žádné tlačítko smazat, protože žádné být nemá. Vyžadovalo to přímý zásah do databáze, nejprve potvrzený, hned poté zrušený.
Pro nás je to při testování drobná nepříjemnost. Je to zároveň přesně ten důvod, proč je detekce slibů vůbec důvěryhodná: čte skutečné, nezměněné, neupravené lidské psaní, ne jeho vyčištěnou verzi.
Proč se to vůbec vyplatí dělat
Nic z tohohle nenahrazuje správce úkolů. Nahrazuje ten konkrétní, tichý způsob selhání, kdy jediným záznamem slibu je věta, kterou už nikdo nikdy nepřečte. Systém nepotřebuje, abyste psali jinak, strukturovali si poznámky nebo si pamatovali, že máte něco označit. Potřebuje jen, abyste napsali, co se skutečně stalo, tak, jak byste to napsali sami sobě, a on se postará o to, aby si toho všiml.