Skip to content
02 / INŽENÝRSKÁ CASE STUDYAutonomous Agent · Three-Layer Memory · 2026LIVE

RELO

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ě.

OD DAVIDA RAJNOHY  ·  BŘEZEN 2026
Scroll
02
Projektový index
Role
Solo builder & architekt
Odvětví
Reality / PropTech
Rok
2026
Stack
Next.js · Supabase+ OpenAI · pgvector
0
AI nástrojů
0
Prošlých testů
0
Dní sprintu
0×
Vrstvy paměti
03
Problém
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.“
Zadání

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.

Řešení

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.

04
Architektura systému

Tři vrstvy paměti, jeden noční konsolidátor.

FIG. 01 — TOPOLOGIE PAMĚTI
Paměť & graf nástrojů
uživatel → plánovač → nástroje → paměť · fan-out: 27
Diagram paměťové a nástrojové architektury RELOUživatelský vstup jde do agentní smyčky, která může volat libovolný z 27 typovaných nástrojů ve vícekrokovém řetězci (stopWhen stepCountIs 8). Každý krok se připojuje do L3 activity logu. Noční průchod autoDreamu destiluje log do L2 sémantické paměti (pgvector), která se načítá v dalším tahu.User / AgentINPUTAGENT LOOPstepCountIs(8)gpt-5.4-mini27 TYPED TOOLSCRM · Katastr · ISIR · Email · KalendářL1 · WORKINGCurrent session context · ~8k tokL2 · EPISODICpgvector · semantic searchL3 · LONG-TERMActivity log · append-onlyNIGHTLY · 03:00 UTCautoDreamconsolidation passResponse + ActionOUTPUTtool_call()write(turn)resultconsolidate
L1 · Working

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.

L2 · Episodic

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.

L3 · Long-term

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ě.

/lib/memory/autodream.ts
// 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,    });  }}
/lib/agent/loop.ts
// 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],  });}
08
Stack
HLAVNÍ MODEL · 01
OpenAI
GPT-5.4 mini
Agentní smyčka + sumarizátor autoDreamu. Vercel AI SDK v6 · volání nástrojů · streaming · strukturované výstupy. Fallback na gpt-5.4 pro sumarizaci dlouhého kontextu.
APLIKACE · 02
Next.js 16 + TypeScript
App Router, Server Actions, streaming RSC. Tenká vrstva routes, tlustý lib/.
DATA · 03
PostgreSQL + Supabase
Epizodické úložiště, vektorový index (pgvector), autentizace. Jedna databáze, nula dalších služeb.
SDK · 04
Vercel AI SDK
Datové proudy pro nástroje, typovaná schémata.
UI · 05
Tailwind CSS
Design tokeny, žádné další CSS frameworky.
RUNTIME · 06
Vercel
Next.js runtime, streamované odpovědi.
06
6denní sprint

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.

01
SO · ZÁKLADY
Auth, schéma, deploy path
29 commitůauth + RLSzákladní schéma

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.

02
NE · JÁDRO AGENTA V1
Chat Completions, safe-tool wrapper, prvních 13 nástrojů
15 commitů13 nástrojůsafe-tool wrapper

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.

03
PO · PLATFORMA
Monitoring, analytika, integrace
48 commitů+20K řádkůmonitoring

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.

04
ÚT · HLOUBKA NÁSTROJŮ
Další nástroje, české vyhledávání, testy
58 commitů+7K řádkůhloubka nástrojů

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ů.

05
ST · TŘÍVRSTVÁ PAMĚŤ
autoDream + konsolidace v L2 pgvectoru
96 commitů+11K řádkůautoDream v1

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.

06
ČT · NASAZENÍ
1 700+ testů + V4 Thinking + 27 nástrojů
78 commitů+13K řádkůnasazeno · 1 700+ testů ✓

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.

07
PÁ · DEMO
Ladění po deadlinu + demo reel
3 commitydemo reelpo nasazení

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á.

07
Živé demo

RELO zvládá pondělní inbox.

↳ Nahraný produktový průchod · živý odkaz níže · citlivá data anonymizovaná.
Otevřít živý produkt
08
Výsledky & Lekce

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/01
    Konsolidace 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/02
    Typované 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/03
    Ví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/04
    Postav 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.