Lekce 02.3: Tahy a požadavky na API (Turns And Model Provider Requests)
🧠 Mentální model & teoretický rozbor
Mnoho vývojářů si představuje jedno zadání v terminálu jako jeden dotaz a jednu odpověď. V agentickém prostředí je to však vícekroková sekvence tahů (Multi-turn Tool Loop):
┌────────────────────────────────────────────────────────────────────────┐│ 1. UŽIVATEL: "Oprav chybu v kalkulaci košíku" │└───────────────────────────────────┬────────────────────────────────────┘ │ HTTP Request 1 (Prompt + Nástroje)┌───────────────────────────────────▼────────────────────────────────────┐│ 2. MODEL: Chci zavolat tool: ViewFile("src/cart.ts") │└───────────────────────────────────┬────────────────────────────────────┘ │ HTTP Request 2 (Předchozí + ToolResult 1)┌───────────────────────────────────▼────────────────────────────────────┐│ 3. MODEL: Chci zavolat tool: EditFile("src/cart.ts", patch) │└───────────────────────────────────┬────────────────────────────────────┘ │ HTTP Request 3 (Předchozí + ToolResult 2)┌───────────────────────────────────▼────────────────────────────────────┐│ 4. MODEL: Chci zavolat tool: Bash("npm test -- cart") │└───────────────────────────────────┬────────────────────────────────────┘ │ HTTP Request 4 (Předchozí + ToolResult 3)┌───────────────────────────────────▼────────────────────────────────────┐│ 5. MODEL: "Chyba opravena, testy jsou zelené." (Konec uživatelského tahu)│└────────────────────────────────────────────────────────────────────────┘Každý jednotlivý krok v této sekvenci je samostatný HTTP POST požadavek na Anthropic API. Při každém dalším kroku se velikost odesílaného požadavku zvětšuje, protože nese celou dosavadní historii všech předchozích kroků!
🏢 Realistický scénář z praxe
Zadáte zdánlivě banální úkol: „Zkontroluj logy a najdi, proč padá server.“
- Agent zavolá
Bash("cat server.log"). - Soubor má 10 000 řádků (cca 150 000 tokenů).
- Harness tento obří výstup pošle v
ToolResultdo API. - V dalším kroku model napíše: „Vidím chybu na řádku 400. Upravím kód.“
- Při každém dalším tahu v tomto sezení se oněch 150 000 tokenů logu odesílá znovu a znovu!
- Výsledek: Během tří tahů jste spotřebovali 500 000 tokenů a zaplatili zbytečné dolary.
💻 Konkrétní ukázky kódu & promptů
Jak správně formulovat instrukce pro minimalizaci počtu tahů:
❌ Špatný přístup (Vede k 10 tahům na slepo):
Něco je špatně s platbami. Podívej se na to a oprav to.(Agent stráví 5 tahů hledáním souborů, 3 tahy zkoušením špatných oprav a 2 tahy testováním).
✅ Inženýrský přístup (Hotovo ve 3 tazích):
V souboru src/services/payment.ts na řádku 142 dochází k chybě TypeError: Cannot read properties of undefined (reading 'amount').
Postup:1. Přečti soubor src/services/payment.ts v rozsahu řádků 130–160.2. Přidej volitelné řetězení (optional chaining) `transaction?.amount ?? 0`.3. Spusť test: `npm test -- payment.test.ts`.⚠️ Analýza selhání & Anti-patterns
Anti-pattern: Zaseknutí v nekonečné smyčce nástrojů (Tool Loop Lock)
Někdy agent narazí na chybu v testu, pokusí se ji opravit, test selže jinak, agent provede další úpravu, test selže původní chybou… Pokud tento cyklus nezastavíte:
- Agent provede 20 tahů za minutu.
- Vyčerpá vaše tokeny i trpělivost.
- Řešení: Okamžitě stiskněte
Ctrl + C, pokud vidíte, že agent po 3 tazích tápe ve stejném souboru.
🛠️ Inženýrský postup krok za krokem (Playbook)
- Sledujte indikátor tahů: Claude Code vypisuje, jaký nástroj zrovna model vyvolává (
Running: Bash...,Reading: src/index.ts...). - Přerušte zbytečné bádání: Pokud vidíte, že model čte soubory, které s úkolem nesouvisejí, stiskněte
Ctrl + Ca upřesněte zadání. - Předávejte kontext rovnou v promptu: Pokud znáte přesnou cestu k souboru a řádek, napište ho. Ušetříte 2 zbytečné vyhledávací tahy.
🧪 Praktické cvičení (Hands-on Lab)
Úkol:
Spočítejte, kolik tahů agent potřebuje na vyřešení zadaného úkolu.
Kroky:
- Otevřete Claude Code v čistém adresáři.
- Zadejte: „Vytvoř soubor math.ts s funkcí add, vytvoř k němu test ve Vitestu a spusť ho.“
- Počítejte jednotlivé kroky, které harness na obrazovce zobrazí (zápis souboru 1 ➔ zápis souboru 2 ➔ spuštění testu ➔ finální odpověď).
- Všimněte si, že jeden váš příkaz znamenal 4 samostatné HTTP požadavky na server.