Back Office Bot pro realitní kanceláře — 27 AI nástrojů, třívrstvá paměť, dotaženo v 6denním soutěžním sprintu na vlastním vícemesíčním Next.js 16 + Supabase základě.
- Kontext
- Realitní back-office
- Rozptyl
- 7 nástrojů · 3 e-mailové schránky
- Cena ztráty kontextu
- ~4 h / makléř / týden
Back-office v českých realitkách se odehrává napříč poznámkami v CRM, výpisy z ČÚZK Katastru, ISIR insolvenčním rejstříkem, feedy ze Sreality, e-mailovými vlákny s klienty, úpravami smluv a přehazováním schůzek — a všechno to vyžaduje kontext, který už jsi tenhle týden vysvětloval šestkrát.
Běžné LLM mezi sezeními zapomínají. Vlastní agenti pod zátěží nástrojů halucinují. Chyběl agent, který si pamatoval — kolega, ne hračka.
„Agent, který zapomíná, je jen další požadavek na funkci. Agent, který si pamatuje, je kolega.“
Udržet 27 nástrojů provázaných, paměť levnou, stihnout sprint.
Back-office agent musí procházet nabídky, psát odpovědi, číst smlouvy, plánovat prohlídky a všechno zaznamenávat do CRM — aniž by token budget explodoval nebo se výběr nástrojů rozpadl do šumu.
Modely s jedním kontextovým oknem se rozpadají za ~20 nástrojů. Samotné vektorové databáze propouštějí do odpovědí nerelevantní úryvky. A protáhnout 1 700+ testů 6denním sprintem znamená jediné: architektura musí být špatně přesně nulakrát.
Třívrstvý paměťový systém s noční konsolidací — autoDream.
Working → Episodic → Long-term. Agent běží ve vícekrokové smyčce (stopWhen stepCountIs(8)) přes všech 27 typovaných nástrojů. Každý tah a volání nástroje se připisuje do L3 activity logu; každou noc autoDream destiluje podstatné stopy do L2 sémantické paměti (pgvector embeddings + entity).
Výsledek: agent v pondělí ráno už ví, že Vinohradská 42 měla nevyřízený výpis z katastru a že makléřka kupujícího v úterý odpovídá pomalu.
Tři vrstvy paměti, jeden noční konsolidátor.
Kontext aktuální konverzace
Držený přímo v promptu. ~8k tokenů posledního uživatelského tahu, výsledků nástrojů a aktivního plánu. Po skončení konverzace se vše vymaže.
Sémantická paměť · pgvector
Postgres + pgvector pro sémantické vyhledávání. Konsolidované embeddings s označenými entitami — dotazovatelné podle podobnosti, entity nebo ID konverzace. Každou noc přebudované průchodem autoDreamu.
Activity log · append-only
Každý tah, volání nástroje, argument i výsledek se připojuje do strukturovaného audit logu. Neměnný zdroj pravdy — živí autoDream, přežívá změny schématu, dá se přehrát zpětně.
// Nightly consolidation passexport async function autoDream(userId: string) { const episodes = await getEpisodesSince(userId, "-24h"); const traces = await summarize(episodes, { model: "gpt-5.4-mini" }); for (const t of traces) { await longterm.upsert({ embedding: await embed(t.text), entities: t.entities, weight: t.salience, }); }}// Multi-step agent loop — all 27 typed tools in contextexport async function runAgent(turn: Turn) { const memory = await recall(turn, { store: "l2" }); return streamText({ model: openai("gpt-5.4-mini"), tools: allTools, stopWhen: stepCountIs(8), onStepFinish: (s) => appendActivity("l3", s), messages: [...memory, ...turn.messages], });}GPT-5.4 mini
324 commitů jeden po druhém — sobotní zadání, čtvrteční nasazení.
Soutěžní sprint — 6 dnů od sobotního zadání (21. 3.) po čtvrteční deadline (26. 3.), plus pátek na demo reel pro porotu. Celé nad vlastním vícemesíčním Next.js 16 + Supabase + OpenAI základem.
Zadání přišlo v sobotu, pustil jsem se do toho ten samý den. Email/heslo auth s per-user izolací dat, migrace 004 (rebuild views), Vercel framework config, strict TypeScript cleanup. Poslední commit 23:52.
Přepnul jsem na Chat Completions API, obalil každý nástroj do strategie zotavení (safe-tool wrapper), dodal prvních 13 typovaných nástrojů, systém nahrávání souborů s xlsx + csv parsingem. Základ dashboardu + chat UI. První funkční end-to-end tah v neděli večer.
Největší den co do řádků. sReality monitoring, Lead Pipeline, Analytics V2, hloubka dashboardu, napojení ČÚZK + ISIR. Agentní smyčka vyztužená: streamText + stopWhen stepCountIs(8) přes všechny typované nástroje.
Rozšíření nástrojové plochy, vyhledávání necitlivé na diakritiku napříč nástroji, oprava sReality region ID (10 ze 14 bylo špatně out-of-the-box), viditelnost Gmail draftů, limity monitoringu. Review hardening + první várka kontraktních testů.
L3 activity log, L2 vyhledávání v pgvectoru a noční konsolidační úloha. První průchod autoDreamu destiloval několik set řádků aktivit do dotazovatelného sémantického indexu. Cosine threshold kalibrován dvakrát. Design polish + focus rings stejný den.
V4 Thinking layer (Think-Plan-Execute), 27-nástrojový SSOT, E2E Playwright (137 testů napříč 9 sekcemi), sidebar health monitor, nativní extrakce PDF, manuální CRUD pro všechny sekce. Deadline splněn čtvrtek EOD — nasazeno na Vercel.
Demo reel pro hodnocení poroty. Musel jsem nahrávat třikrát, protože se agent mezi pokusy zlepšoval. Přidány Vercel Analytics, opraven mobilní chat workspace. Okno se zavírá, porota přebírá.
RELO zvládá pondělní inbox.
Výsledky
- R/01Umístění 5 ze 70 týmů — top 7 % v soutěži. Porota označila třívrstvou paměť za nejjasnější technický diferenciátor mezi finalisty.
- R/02Zadání v sobotu → nasazeno ve čtvrtek EOD — 324 commitů, jeden člověk, produkční back-office běží na Vercelu. 27 typovaných AI nástrojů, reálné integrace na Gmail + Kalendář + Telegram, funkční před deadlinem.
- R/03Spolehlivě přes 27 nástrojů, žádné zacyklení — stopWhen stepCountIs(8) drží agenta v rozumných mezích; safe-tool wrapper dělá každou chybu zotavitelnou. Agent zkusí znovu, přeformuluje dotaz nebo vrátí čistou chybovou hlášku — ale nikdy nezacyklí v retry smyčce uprostřed dema.
- R/04České integrace jako konkurenční výhoda — ČÚZK Katastr, ISIR, Valuo/CMA zapojené od prvního dne. Vyhledávání necitlivé na diakritiku, reálné region slugy (oprava 10 ze 14, které byly špatně out-of-the-box). Lokální znalosti, které globální konkurence zkrátka nemá.
Lekce
- L/01Konsolidace je těžší než vyhledávání. autoDream
potřeboval tři přepsání funkce pro určování důležitosti, než přestal nadhodnocovat nejnovější epizodu. Zápis do paměti je místo, kde se odehrává opravdová architektura — čtení z ní je ta lehčí půlka.
- L/02Typované nástroje + safe-tool wrapper.
Každý nástroj má Zod schéma a strategii zotavení — agent to zkusí znovu nebo dotaz přeformuluje, místo aby rozbil celou smyčku. Self-healing porazilo přísnou validaci. Uživatele nezajímá, jak přesně to spadlo; zajímá, jestli konverzace pokračuje.
- L/03Vícekroková smyčka > jedno volání nástroje.
Reálné požadavky nejsou 1 nástroj — jsou 5 (najdi nemovitost, ověř v katastru, naformátuj e-mail, rezervuj termín, potvrď). První pokus byl klasický single-call; stopWhen stepCountIs(8) dal agentovi prostor si kroky sám řetězit.
- L/04Postav si replay harness dřív než agenta.
Několik dní jsem iteroval naslepo, než jsem uměl přehrát 5-krokovou konverzaci proti staré a nové verzi agenta. Ve chvíli kdy to šlo, zrychlila se iterace třikrát. Eval není o pokrytí — je to rychlost zpětné vazby.
