Přeskočit na obsah

Lekce 02.3: Tahy a požadavky na API (Turns And Model Provider Requests)

⏱️ 3 min čtení Lekce 02.3

🧠 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 ToolResult do 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)

  1. Sledujte indikátor tahů: Claude Code vypisuje, jaký nástroj zrovna model vyvolává (Running: Bash..., Reading: src/index.ts...).
  2. Přerušte zbytečné bádání: Pokud vidíte, že model čte soubory, které s úkolem nesouvisejí, stiskněte Ctrl + C a upřesněte zadání.
  3. 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:

  1. Otevřete Claude Code v čistém adresáři.
  2. Zadejte: „Vytvoř soubor math.ts s funkcí add, vytvoř k němu test ve Vitestu a spusť ho.“
  3. Počítejte jednotlivé kroky, které harness na obrazovce zobrazí (zápis souboru 1 ➔ zápis souboru 2 ➔ spuštění testu ➔ finální odpověď).
  4. Všimněte si, že jeden váš příkaz znamenal 4 samostatné HTTP požadavky na server.