Jak funguje AI agent: jazykový model ve smyčce s nástroji
Smyčka úvaha – volání nástroje – výsledek na skutečné úloze nad články webu, tři postupy a jejich cena v tokenech, proč roste kontext, plán a paměť, spolehlivost dlouhých úloh s kontrolou a bez ní, a proč agent potřebuje schvalování.
Série Základy AI Díl 81 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Co se v agentovi děje krok po kroku a co dělá model a co obslužný program.
- Proč je kontext drahý a jak ho dobří agenti šetří.
- Proč dlouhé úlohy bez kontroly selhávají a jak pomáhají testy a schvalování.
Co se hodí znát předem: Prompty, kontext a RAG: jak modelu dát správné informace, Tokenizace: jak se text rozseká na kousky pro model, Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
Jazykový model sám od sebe jen odpovídá: dostane text, vrátí text. Agent je model, kterému dáme ruce — nástroje, kterými může něco zjistit nebo udělat — a necháme ho pracovat ve smyčce, dokud úkol nedokončí. Takhle fungují programovací agenti, kteří sami čtou kód, spouštějí testy a opravují chyby, i asistenti, kteří hledají na webu. A takhle funguje i agent, kterého coden ovládá z telefonu. V tomhle dílu rozebereme smyčku na skutečné úloze a spočítáme, co stojí a kde se láme.
Navazuje na díly Prompty, kontext a RAG, Tokenizace a Markovovy rozhodovací procesy.
1. Model ve smyčce
Definice — AI agent
Obecně je agent funkce, která každé dosavadní historii vjemů přiřadí akci (agentní funkce z mapy AI). AI agent v užším smyslu tohoto dílu je tato konkrétní konstrukce. Nechť
- T je množina všech textů (konečných posloupností tokenů) a ⊕ : T × T → T připojení textu na konec;
- M : T → T je jazykový model, který z kontextu napíše další krok (model se vzorkováním je ve skutečnosti náhodný; tady bereme jeden pevný průběh);
- F ⊆ T je množina kroků, které jsou konečnou odpovědí; ostatní kroky v ∈ T ∖ F jsou volání nástroje;
- N : T ∖ F → T je obslužný program: volání nástroje skutečně provede a vrátí jeho výsledek jako text;
- c1 ∈ T je počáteční kontext (systémový prompt, popis nástrojů a úkol) a Kmax ∈ ℕ, Kmax ≥ 1, rozpočet kroků.
Běh agenta je posloupnost kontextů c1, c2, … a kroků v1, v2, … daná pro k = 1, 2, …, Kmax předpisem
vk = M(ck), ck+1 = ck ⊕ vk ⊕ N(vk) (je-li vk ∉ F).
Běh se zastaví v prvním kroku k, pro který vk ∈ F — výstupem je odpověď vk —, nebo po kroku Kmax, pokud žádný krok konečnou odpovědí nebyl — výstupem je „došel rozpočet kroků“.
Agent tedy střídá krok modelu a provedení nástroje, dokud model neodpoví nebo nedojde rozpočet. Střídání úvahy a akce popsali Shunyu Yao a kol. (2022) pod jménem ReAct (reason + act); zápis výše je zjednodušená formalizace pro tenhle díl.
Chytrý kolega na telefonu, který nevidí váš počítač. Řekne „otevři složku src“, vy mu přečtete, co tam je, on řekne „teď soubor server.js, řádky 100 až 150“ — a tak dál, dokud nemá odpověď. Model je ten kolega, obslužný program jsou vaše ruce a oči. V řeči posilovaného učení: stavem je dosavadní konverzace, akcí volání nástroje.
vk = M(ck), ck+1 = ck ⊕ vk ⊕ N(vk)
- ck
- kontext před k-tým voláním modelu: systémový prompt, úkol a všechno, co se zatím stalo. Je to celý „stav“ agenta — nic jiného si model nepamatuje
- M
- jazykový model; z kontextu napíše další krok. Jediná část, která „přemýšlí“, a jediná, které nelze úplně věřit
- vk
- krok modelu: úvaha a volání nástroje, nebo konečná odpověď (pak smyčka končí)
- N(vk)
- výsledek nástroje, který spočítá obslužný program; přidává do kontextu to, co model sám vědět nemůže (obsah souboru, výstup testů)
kontext = [systémový prompt, popis nástrojů, úkol]
pro k = 1 … K_max: # rozpočet kroků
krok = model(kontext) # čte CELÝ kontext
kontext += krok
když krok je konečná odpověď: vrať ji
když nástroj potřebuje souhlas a člověk ho nedal:
kontext += "zamítnuto"; pokračuj
výsledek = proveď(krok.nástroj, krok.parametry) # obslužný program
kontext += výsledek
vrať "došel rozpočet kroků"
2. Nástroje
Definice — volání nástrojů (tool use, function calling)
Nechť agent má m ≥ 1 nástrojů. Nástroj i ∈ {1, …, m} je dán
- jménem ji (jména různých nástrojů jsou různá),
- slovním popisem, k čemu slouží,
- schématem parametrů Si — popisem, jaké parametry a jakých typů nástroj přijímá (typicky jako schéma JSON),
- procedurou, kterou obslužný program pro platné parametry spustí a která vrátí výsledek jako text.
Jméno, popis a schéma všech nástrojů se vloží do promptu. Volání nástroje je strukturovaný výstup modelu tvaru (j, x) — jméno a parametry, třeba {"nastroj": "hledej", "text": "KL divergence"}. Model je doladěný tak, aby takový výstup místo běžného textu uměl napsat. Obslužný program volání (j, x) zpracuje takto:
- existuje-li i s j = ji a parametry x odpovídají schématu Si, spustí proceduru nástroje i s parametry x a její výsledek připojí do kontextu jako další zprávu;
- jinak do kontextu připojí chybovou zprávu a nástroj nespustí.
Model sám tedy nic nespouští — jen píše, co se má spustit; spouští (nebo odmítne spustit) obslužný program.
Jídelní lístek a objednávka. Model dostane lístek („tyhle nástroje máš a takhle se objednávají“) a napíše objednávku přesně ve tvaru, kterému kuchyně rozumí. Vaří kuchyně, ne host. Proto jde kuchyni přikázat, že některá jídla bez souhlasu nevydá.
Náš agent pracuje nad texty 21 starších článků tohoto webu (stejnými jako v dílech o tokenizaci a RAG) a má tři nástroje. Celý jeho systémový prompt má 157 tokenů:
Jsi agent, který odpovídá na otázky podle článků webu. Máš nástroje:
- seznam(): Vypíše články a jejich délku ve znacích.
- hledej(text, max): Najde výskyty textu ve všech článcích; vrátí článek, pozici a okolí.
- cti(clanek, od, do): Vrátí úsek článku od pozice do pozice (znaky).
V každém kroku napiš krátkou úvahu a zavolej jeden nástroj, nebo napiš konečnou odpověď s odkazem na článek. Když něco nenajdeš, zkus jiný dotaz.
Skutečné nástroje programovacích agentů jsou podobné: hledat v souborech, přečíst úsek souboru, upravit ho, spustit příkaz v terminálu. Od roku 2024 se nástroje dají připojovat i přes společný protokol MCP (Model Context Protocol), takže stejný nástroj — databázi, kalendář, prohlížeč — může používat kterýkoli agent.
3. Jedna otázka, tři postupy
Otázka: „Proč KL divergence není vzdálenost? Uveď příklad z článků.“ Odpověď je v článku o teorii informace: KL divergence není symetrická, DKL(0,7 ‖ 0,5) = 0,119, ale DKL(0,5 ‖ 0,7) = 0,126. Kroky agenta jsme sepsali ručně — za model jsme napsali úvahy a volání. Nástroje, jejich výsledky i tokeny jsou ale skutečné.
Příklad — proč DKL(0,7 ‖ 0,5) ≠ DKL(0,5 ‖ 0,7)
Pro dvě rozdělení ano/ne (déšť s pravděpodobností p, model říká q; p, q ∈ (0, 1)) je DKL(p ‖ q) = p log2 p/q + (1 − p) log2 1 − p/1 − q bitů (teorie informace).
DKL(0,7 ‖ 0,5) = 0,7 · log2 0,7/0,5 + 0,3 · log2 0,3/0,5 = 0,7 · log2 1,4 + 0,3 · log2 0,6 = 0,340 − 0,221 = 0,119.
DKL(0,5 ‖ 0,7) = 0,5 · log2 5/7 + 0,5 · log2 5/3 = −0,243 + 0,368 = 0,126.
Průměruje se pokaždé podle jiného rozdělení (podle toho, co je skutečnost), proto prohození argumentů dá jiné číslo — a vzdálenost (metrika) musí být symetrická. Tohle je odpověď, kterou agent hledá.
-
Hledám přesně slova z otázky.
hledej(text: "KL divergence není metrika")nic nenalezeno
+34 tokenů, kontext 209 -
Nic. Zkusím jen název pojmu.
hledej(text: "KL divergence")5 výskytů: informace:3258: … minimum je tam, kde model říká pravdu. KL divergence Definice — Kullbackova–Leiblerova diver… informace:3656: …,222 bitu. Podle Gibbsovy nerovnosti je KL divergence vždy nezáporná a nulová jen pro q = p .… informace:3717: …záporná … (dalších 310 znaků)
+205 tokenů, kontext 414 -
Je to v článku informace. Přečtu okolí.
cti(clanek: "informace", od: 3660, do: 3960)ivergence vždy nezáporná a nulová jen pro q = p . Pozor, KL divergence není vzdálenost: není symetrická. D KL (0,7 ‖ 0,5) = 0,119, ale D KL (0,5 ‖ 0,7) = 0,126. Záleží na tom, co je skutečnost a co model. Informační zisk Definice — podmíněná entropie H ( Y | X … (dalších 40 znaků)
+146 tokenů, kontext 560
Tři volání nástrojů a čtvrté volání modelu napíše odpověď. První hledání nic nenajde — slova z otázky v textu nejsou. Agent to vidí a zkusí obecnější dotaz; to je výhoda smyčky proti jednorázovému vyhledání. Kontext na konci má 560 tokenů.
-
Nevím, kde to je. Projdu články jeden po druhém.
cti(clanek: "co-je-pravdepodobnost")Jazykový model nevybírá další slovo, ale pravděpodobnosti všech slov. Klasifikátor neříká „je to kočka“, ale „s pravděpodobností 0,93 je to kočka“. Celé strojov … (dalších 7 175 znaků)
+1 933 tokenů, kontext 2 108 -
Tady to není, další článek.
cti(clanek: "csp")Rozvrh hodin, ve kterém žádný učitel neučí dvě třídy naráz. Sudoku. Rozmístění součástek na desce, směny v nemocnici, přidělení letadel k branám. Všechny tyhle … (dalších 11 914 znaků)
+3 148 tokenů, kontext 5 256 - … dalších 8 kroků stejně (kontext na konci 24 927 tokenů)
Agent bez hledání prochází články v abecedním pořadí. Na odpověď narazí až v 10. článku a kontext mezitím naroste na 24 927 tokenů.
A třetí postup, jednorázový RAG z minulého dílu: vyhledat tři nejpodobnější úseky a vložit je do promptu. Všechny tři úseky pocházejí ze správného článku (informace, informace, informace), ale ani jeden neobsahuje příklad s čísly 0,119 a 0,126 — odpověď by byla bez příkladu. Agent ve smyčce si může říct „tohle nestačí, čtu dál“. Jednorázové vyhledání ne.
4. Kontext je drahý
Definice — cena smyčky
Model nemá paměť mezi voláními; při každém volání znovu čte celý kontext — systémový prompt, úkol a všechny dosavadní kroky a výsledky nástrojů. Nechť běh agenta (definice výše) skončil po K ≥ 1 voláních modelu a pro k = 1, …, K je ck ∈ ℕ délka kontextu (počet tokenů) před k-tým voláním. Cena smyčky je počet tokenů, které model během běhu zpracuje na vstupu:
Z = ∑k=1K ck.
Protože kontext s každým krokem roste, roste Z zhruba s druhou mocninou počtu kroků (věta níže).
Jako byste před každou větou dopisu museli celý dopis přečíst znovu od začátku. Krátký dopis nevadí. Dlouhý dopis, do kterého jste navíc vlepili deset přečtených knih, je drahý — a ve všech těch stránkách se snadno ztratí to podstatné.
Postup „čti všechno“ stojí 141 820 zpracovaných tokenů, „hledej a čti výřez“ jen 1 358 — 104krát méně, a na stejnou odpověď. Proto dobří programovací agenti nejdřív hledají (grep) a čtou jen kousky souborů. A proto se dlouhé sezení čas od času zhušťuje: starší část konverzace se nahradí shrnutím, aby se kontext vešel a model se v něm neztrácel. Pomáhá i ukládání začátku promptu do mezipaměti (prompt caching), díky kterému se opakované čtení stejného začátku platí levněji.
Z = ∑k=1K ck, ck = c1 + ∑j<k (vj + oj)
- Z
- celkem zpracované tokeny — to, co se platí a na co se čeká
- K
- počet volání modelu (kroky s nástrojem + konečná odpověď); každé volání čte kontext znovu od začátku
- c1
- systémový prompt a úkol; jsou v kontextu od prvního volání, takže se zaplatí K-krát — proto se vyplatí je mít krátké a ukládat do mezipaměti
- vj + oj
- tokeny, které přidal krok j: volání a výsledek nástroje. Krok j se čte ve všech pozdějších voláních, proto se dlouhý výsledek nástroje platí mnohokrát
Věta — cena roste s druhou mocninou počtu kroků
Nechť K ∈ ℕ, K ≥ 1, je počet volání modelu, c1 ≥ 0 délka počátečního kontextu a d ≥ 0 počet tokenů, který přidá každý krok (volání i výsledek nástroje dohromady), takže ck = c1 + (k − 1) d pro k = 1, …, K. Pak
Z = K c1 + d · K(K − 1)/2.
Důkaz: Z = ∑k=1K (c1 + (k − 1) d) = K c1 + d ∑k=1K (k − 1) a ∑k=1K (k − 1) = 0 + 1 + … + (K − 1) = K(K − 1)/2. ∎ Pro velké K převáží druhý člen ≈ d K²/2: dvakrát delší sezení stojí zhruba čtyřikrát víc. (Barvy odpovídají členům rozboru výše: d je stálá hodnota vj + oj.)
Příklad — přepočet obou postupů
Hledej a čti výřez. Systémový prompt má 157 tokenů, otázka 18, tedy c1 = 175. Po třech krocích má kontext 209, 414, 560 tokenů. Čtyři volání modelu čtou Z = 175 + 209 + 414 + 560 = 1 358 tokenů (barvy podle vzorce výše).
Čti všechno. K = 11 volání, kontext naroste z 175 na 24 927 tokenů, průměrně o d = 24 927 − 175/10 ≈ 2 475 za krok. Podle věty Z ≈ 11 · 175 + 2 475 · 11 · 10/2 = 138 050; skutečnost je 141 820 (články mají různou délku, takže kroky nepřidávají přesně stejně). Systémový prompt s otázkou je z toho jen 1 925 tokenů — skoro všechno je opakované čtení článků.
5. Plán a paměť
Definice — plánování a paměť agenta
Tyto pojmy nejsou matematické; jsou to role částí běhu agenta (definice AI agenta výše, kontexty c1, c2, …, nástroje N). Jedno sezení je jeden běh agenta od c1 po zastavení.
- Plán je text v kontextu — číslovaný seznam kroků, který agent napíše jako jeden ze svých kroků vk na začátku sezení a v dalších krocích opakovaně přepisuje (odškrtává hotové, mění zbylé). Model ho čte jako každou jinou část kontextu; nic ho nevynucuje.
- Pracovní paměť je kontext ck jednoho sezení. Zaniká se sezením a je omezená délkou kontextu, kterou model zvládne.
- Dlouhodobá paměť jsou data uložená mimo model i mimo kontext (soubory, databáze), která přetrvají konec sezení. Agent do nich zapisuje a čte z nich jen voláním nástrojů; v dalším sezení se dostanou do kontextu, jen pokud je agent přečte nebo je obslužný program vloží do c1.
- Dílčí agent je jiný běh agenta, který hlavní agent spustí jako nástroj: dílčí agent začne s vlastním počátečním kontextem (jen popis dílčího úkolu), pracuje ve vlastní smyčce a do kontextu hlavního agenta se jako výsledek nástroje N(vk) vrátí jen jeho konečná odpověď. Podrobnosti jeho práce tak hlavní kontext nezaplní.
Řemeslník na delší zakázce si píše seznam na papír a večer si do sešitu poznamená, co zjistil — ráno si nemusí všechno pamatovat, stačí otevřít sešit. Na pomocné práce pošle učně a od něj chce jen „hotovo, bylo to tady“.
U programovacích agentů je dlouhodobou pamětí obvykle obyčejný textový soubor v projektu (pravidla, příkazy, na co si dát pozor), který agent čte na začátku každého sezení. Je to nejjednodušší a nejprůhlednější paměť: člověk ji může přečíst i opravit.
6. Dlouhé úlohy a kontrola
Agent, který udělá správný krok v 90 % případů, vypadá spolehlivě. Jenže úloha se skládá z mnoha kroků a chyba v kterémkoli z nich ji pokazí. Když se krok povede s pravděpodobností p, povede se celá úloha z n kroků s pravděpodobností pn — pokud agent chyby nepoznává.
Definice — uzavřená smyčka se zpětnou vazbou
Nechť p ∈ [0, 1], d ∈ [0, 1], r ∈ ℕ ∪ {0} a n ∈ ℕ, n ≥ 1. Krok s kontrolou (uzavřená smyčka) probíhá takto:
- agent krok provede; pokus se povede s pravděpodobností p;
- agent výsledek ověří (spustí testy, přečte výstup příkazu, porovná s očekáváním); povedený pokus kontrola vždy přijme, nepovedený pozná jako chybný s pravděpodobností d;
- pokus se povedl ⇒ krok skončí úspěchem;
- pokus se nepovedl, kontrola to poznala a agent zatím opakoval méně než r-krát ⇒ agent krok opakuje od bodu 1;
- jinak (chyba prošla kontrolou, nebo došla opakování) krok skončí neúspěchem.
Výsledky jednotlivých pokusů a kontrol jsou navzájem nezávislé. Úspěšnost kroku q je pravděpodobnost, že krok skončí úspěchem; úloha je n takových kroků za sebou, nezávislých, a povede se, právě když se povedou všechny. Pak
q = p ∑k=0r ((1 − p) d)k, P(úloha se povede) = qn.
Sčítanec k je pravděpodobnost, že prvních k pokusů selže a selhání se pozná (každý s pravděpodobností (1 − p) d) a pokus k + 1 se povede; tyto možnosti se navzájem vylučují, proto se sčítají. Bez kontroly (d = 0 nebo r = 0) je q = p.
Kdo píše dlouhý program bez spouštění, skoro jistě v něm má chybu. Kdo po každé změně pustí testy, chybu najde hned, když je ještě malá a ví se, kde je. Agenti na tom nejsou jinak.
q = p ∑k=0r ((1 − p) d)k = p + p (1 − p) d + p ((1 − p) d)² + …
- p
- pokus se povede; každý sčítanec končí právě jedním povedeným pokusem
- 1 − p
- pokus selže; každé selhání před úspěchem stojí jeden takový činitel
- d
- kontrola selhání pozná; jen tehdy agent krok zopakuje — nepoznaná chyba projde dál a pokazí úlohu
- ∑k=0r, k
- k = kolik pokusů selhalo, než jeden vyšel; nejvýš r opakování, aby agent nezkoušel donekonečna
S p = 0,9 a dvaceti kroky se bez kontroly povede jen 12 % úloh, s kontrolou 79 %. Simulace 20 000 úloh dává 12 % a 79 %, vzorec sedí. I velmi dobrý krok (p = 0,99) při stovce kroků bez kontroly selže častěji, než uspěje (37 %); s kontrolou uspěje v 90 %. Tohle je hlavní důvod, proč programovací agenti fungují tak dobře: kód se dá spustit a otestovat, takže skoro každý krok má zpětnou vazbu. Organizace METR (2025) měří, že délka úloh, které agenti zvládnou v polovině případů, se zhruba každých sedm měsíců zdvojnásobuje.
Příklad — p = 0,9, d = 0,9, r = 2, dvacet kroků
Úspěšnost kroku (barvy podle vzorce výše): q = 0,9 + 0,9 · 0,1 · 0,9 + 0,9 · (0,1 · 0,9)² = 0,9 + 0,081 + 0,00729 = 0,98829.
Celá úloha: bez kontroly 0,920 = 0,122, s kontrolou 0,9882920 = 0,790. Krok se zlepšil jen z 90 % na 98,8 %, ale úloha z 12 % na 79 % — mocnina n malé rozdíly v kroku nafukuje.
Definice — délka úlohy, kterou agent zvládne v polovině případů
Nechť q ∈ (0, 1) je úspěšnost kroku a úloha z n nezávislých kroků se povede s pravděpodobností qn (definice výše). Délka úlohy zvládnutelné v polovině případů je reálné číslo n50 % > 0, pro které qn50 % = 1/2, tedy
n50 % = ln 0,5/ln q = ln 2/−ln q ≈ 0,69/1 − q pro q blízko 1
(přibližná rovnost plyne z −ln q ≈ 1 − q pro q → 1). Protože qn s rostoucím n klesá, platí qn ≥ 1/2, právě když n ≤ n50 %; největší celý počet kroků, který agent zvládne aspoň v polovině případů, je tedy ⌊n50 %⌋.
V našem modelu: p = 0,9 bez kontroly 6,6 kroku, s kontrolou 58,8; p = 0,99 bez kontroly 69,0, s kontrolou 686. Úloha, kterou agent zvládne napůl, se prodlouží zhruba úměrně tomu, kolikrát klesne chybovost kroku 1 − q.
Stejnou veličinu (dobu úlohy, kterou agent zvládne v 50 % případů) měří METR — jen ne v krocích, ale v čase, který by úloha zabrala člověku (Thomas Kwa a kol., Measuring AI Ability to Complete Long Tasks, 2025). Náš vzorec je zjednodušený model s nezávislými kroky, ne jejich metoda.
7. Oprávnění a dohled
Agent, který smí spouštět příkazy, smí i škodit — omylem (smaže špatnou složku) nebo na pokyn, který si přečetl v cizím textu (prompt injection). Obrana nestojí na modelu, ale na obslužném programu: nástroje s omezenými právy, běh v izolovaném prostředí, a hlavně schvalování — nebezpečné nebo nevratné kroky provede až po souhlasu člověka. Na tom stojí i coden: agent pracuje na vašem počítači a vy jeho kroky schvalujete z telefonu.
8. Shrnutí
- Agent = jazykový model ve smyčce: úvaha, volání nástroje, výsledek do kontextu, znovu.
- Model nástroje jen popisuje strukturovaným voláním; spouští je obslužný program, který může vynutit pravidla.
- Smyčka umí opravit neúspěšné hledání — jednorázový RAG ne.
- Každé volání čte celý kontext: „čti všechno“ stálo 141 820 tokenů, „hledej a čti výřez“ 1 358.
- Plán, poznámky v souborech a dílčí agenti drží kontext malý a přehledný.
- Bez kontroly klesá úspěšnost s délkou úlohy jako pn; testy a ověřování to mění (20 kroků při p = 0,9: 12 % → 79 %).
Chcete si to osahat? Požádejte AI agenta, ať vám popíše každé volání nástroje, které při úkolu udělá, a na konci ať odhadne, kolik tokenů ho úkol stál. Pak mu zadejte stejný úkol s pokynem „nejdřív hledej, čti jen výřezy“.
Máte na to jiný názor? Napište na support@coden-app.com.