Přeskočit na obsah

Chybějící nástroj si agent nahradí — pětatřiceti jinými

vlastní konfigurace · nástroje webuthinkingcap-27b
web_search
35 volání
web_extract
1 — selhal
Tool výstupy
~20 tis. tokenů
Kontext 65k
přetekl

Stalo se 9. 8. 2026 při obyčejné rešerši: výběr intenzivního kurzu, porovnání cen, ohlasy mimo oficiální web. Přesně úloha pro asistenta.

Teze: Agent s dírou v sadě nástrojů neselže viditelně. Chybějící schopnost si potichu nahradí tou nejbližší, kterou má — a účet přijde jinde.

Co se stalo

Model si při rešerši sáhl po web_extract, aby přečetl konkrétní stránku. Nástroj odpověděl poctivě:

Brave Search (Free) is a search-only backend and cannot extract
URL content. Set web.extract_backend to firecrawl, tavily, exa…

Extrakční backend nebyl nikdy nakonfigurovaný — vyhledávání přes Brave funguje, čtení stránek ne. Model se nezastavil a neřekl „chybí mi nástroj". Udělal to, co agenti dělají: našel si cestu. Místo přečtení tří stránek položil 35 vyhledávacích dotazů a odpověď skládal z útržků ve výsledcích.

web_search — náhradní cesta · 35 volání, ~20 tis. tokenů výsledkůweb_extract — nástroj, o který si model řekl · 1 volání, selhalo„search-only backend … set web.extract_backend“Každý puntík je jedno volání v jediné rešerši. Kontext 65 536 tokenů přetekl uprostřed odpovědi.

Účet přišel o hodinu později

Každé hledání vrací 5 tisíc znaků úryvků. Pětatřicet jich dohromady dalo **20 tisíc tokenů** tool výstupů v jedné konverzaci — nad systémovým promptem o 16,5 tisících. Ve tři čtvrtě na šest to sečetl inferenční server:

Streaming failed before delivery: {"code":500,
"message":"Context size has been exceeded."}

Okno 65 536 tokenů přeteklo uprostřed odpovědi. Komprese kontextu (nově přepracovaná v Hermes 0.20) sezení zachránila a konverzace dojela do konce — včetně poslední otázky, kde si asistent správně přečetl můj zdravotní přehled a doporučil rozhodnutí odložit. Výsledek dobrý; cesta k němu draze zaplacená za nástroj, který nikdy neexistoval.

Proč to nikdo neviděl dřív

Ta díra je v konfiguraci od začátku — a tohle je první úloha, která extrakci doopravdy potřebovala. Rešerše se do té doby dělaly hledáním, kde úryvky stačí. Selhání nemá podobu chyby: model dál odpovídá, jen pomaleji, dráž a z horších pramenů — z útržků místo stránek. Bez čtení záznamu konverzace by rozdíl nikdo nepoznal.

Je to zrcadlový obraz nálezu 17: tam nástroj tiše vracel nulu a vypadalo to jako prázdno. Tady nástroj poctivě řekl, že chybí — ale agent si poradil tak hladce, že poctivá chyba zanikla. Náhradní cesta se někdy odhaluje hůř než tichá nula.

Přeměřeno týž večer

Jádro nedělní rešerše — podrobnosti a ohlasy mimo oficiální web — položené znovu, tentokrát s funkční extrakcí:

bez extrakce (neděle) s extrakcí (večer)
volání nástrojů 35 hledání + 1 selhaná extrakce 4 hledání + 2 extrakce
prameny útržky z výsledků hledání celé stránky
kontext 65k přetekl uprostřed odpovědi v pořádku

Srovnání je orientační — neděle byla třífázová konverzace, tohle jedna otázka — ale řádový rozdíl v počtu koleček model↔nástroj je jasný. A jedna poctivá nuance: objem přečtených znaků klesl jen málo (~54 tisíc proti ~61). Extrakce rešerši nezlevnila, ale ohraničila — dvě stránky po 15 tisících znaků se stropem místo neomezené řady útržků, a odpověď stojí na skutečném obsahu stránek. I závěr byl kvalitnější: místo skládanky si model troufl napsat, že čerstvé nezávislé recenze prostě neexistují.

Poznámka k publikaci

Předmět rešerše je uveden obecně a zdravotní kontext bez podrobností. Počty volání, velikosti a chybové hlášky jsou doslovné ze záznamu sezení.

Co se pro to změnilo
  • config9. 8. večer: `web.extract_backend: tavily` — extrakce ověřena naostro (15 250 znaků z první stránky, strop 15k platí)
  • pozn.autodetekce podle klíče nestačila, backend chtěl uvést explicitně
  • přeměřenotáž rešerše: 36 volání → 6, kontext přežil, prameny celé stránky
Souvisí — štítek „architektura“