Artykuł 8 z serii Anatomia Agenta AI ← NLWeb — jak sprawić żeby Twoja strona odpowiadała agentom
Agent w środowisku testowym kosztował centa za rozmowę. Po trzech tygodniach w produkcji rachunek za API to 800 dolarów miesięcznie.
To nie jest scenariusz z sufitu. To jest pattern który powtarza się regularnie — i prawie zawsze z tego samego powodu: agent w testach był używany przez dewelopera z krótkimi, precyzyjnymi zapytaniami. Agent w produkcji jest używany przez prawdziwych użytkowników z długimi rozmowami, powtarzającymi się pytaniami i tendencją do wchodzenia w niespodziewane ścieżki.
Koszty agentów są przewidywalne. Ale tylko jeśli je mierzysz i rozumiesz z czego wynikają.
Jak liczyć koszty — konkretny przykład
Token cost to iloczyn trzech zmiennych: rozmiar kontekstu wejściowego, długość generowanego outputu i cena modelu za milion tokenów.
Przykład: agent obsługi klienta na Claude Sonnet 4 (maj 2026: $3/1M input, $15/1M output).
Konwersacja:
- System prompt: 1 500 tokenów
- Historia rozmowy: 2 000 tokenów (5 wymian)
- Wyniki narzędzi: 1 500 tokenów
- Kontekst wejściowy łącznie: 5 000 tokenów
- Odpowiedź agenta: 400 tokenów
Koszt jednej konwersacji:
Input: 5 000 × $3/1M = $0.015
Output: 400 × $15/1M = $0.006
Łącznie: $0.021
Dwa centy za rozmowę. Tysiąc rozmów dziennie = $21/dzień = $630/miesiąc.
To jest obliczenie przy krótkich rozmowach. Teraz dodaj długą rozmowę: użytkownik wymienia 20 wiadomości zamiast 5, historia rośnie do 8 000 tokenów, wyniki narzędzi się kumulują — kontekst wejściowy rośnie do 12 000 tokenów. Koszt jednej takiej rozmowy: $0.042. Dwa razy więcej.
Jeśli 20% Twoich użytkowników prowadzi długie rozmowy — realny koszt jest 20-40% wyższy niż testowy.
Context window bloat — główny winowajca
Najczęstsza przyczyna wysokich kosztów w produkcji: kontekst który rośnie bez kontroli.
Winowajca 1: Za długi system prompt.
System prompt który zawiera całą dokumentację firmy, wszystkie edge cases które kiedykolwiek się zdarzyły i wszystkie procedury — jest za długi. Każde wywołanie agenta płaci za te tokeny, nawet gdy są nieistotne dla aktualnego zadania.
Dobry system prompt jest zwięzły i precyzyjny. Szczegółowa wiedza domenowa żyje w bazie RAG — agent pobiera ją gdy potrzebuje, nie trzyma w kontekście permanentnie.
Winowajca 2: Surowe wyniki narzędzi.
Narzędzie zwraca pełny obiekt JSON z API:
{
"order_id": "12345",
"customer_id": "67890",
"items": [...], // 50 pozycji
"shipping_address": {...},
"billing_address": {...},
"payment_method": {...},
"internal_notes": "...",
"audit_log": [...], // 200 wpisów
"status": "shipped",
"tracking_number": "PL123456789"
}
Użytkownik pytał o status zamówienia. Agent potrzebuje: status, tracking_number. Reszta to szum który kosztuje tokeny.
Rozwiązanie: wrapper narzędzia który ekstrahuje tylko relevantne pola zanim przekaże do modelu. Wynik 2 pola zamiast 500 tokenów pełnego obiektu.
Winowajca 3: Historia konwersacji bez kompresji.
Każda runda rozmowy dołącza do historii. Po 10 rundach kontekst jest duży. Po 30 — ogromny.
Rozwiązanie: rolling summary. Co N rund — agent podsumowuje starszą część historii jednym akapitem i usuwa szczegóły. Kontekst zostaje stabilny mimo rosnącej rozmowy.
Model routing — tańszy model dla prostszych zadań
Nie każde wywołanie agenta wymaga Sonnet 4. Rozkład zapytań w typowym agencie obsługi klienta:
- 60%: proste sprawdzenia statusu → Claude Haiku (10x tańszy od Sonnet)
- 30%: standardowe zapytania → Claude Sonnet
- 10%: złożone analizy, reklamacje → Claude Sonnet lub Opus
Model routing to prosta klasyfikacja przed wywołaniem: oceń złożoność zapytania, wyślij do właściwego modelu.
Implementacja w n8n: węzeł klasyfikacji (tani model z pytaniem „oceń złożoność: proste/średnie/złożone”), potem switch node który kieruje do odpowiedniego modelu.
Implementacja w kodzie:
def route_to_model(query: str) -> str:
# Prosta heurystyka bez dodatkowego wywołania modelu
simple_patterns = [
"status zamówienia", "gdzie moja paczka",
"kiedy dotrze", "numer śledzenia"
]
if any(p in query.lower() for p in simple_patterns):
return "claude-haiku-4"
complex_patterns = [
"reklamacja", "prawnik", "odszkodowanie",
"zrezygnuję", "umowa"
]
if any(p in query.lower() for p in complex_patterns):
return "claude-sonnet-4" # lub opus dla krytycznych
return "claude-haiku-4" # default: tańszy model
Oszczędność: 40-60% kosztów przy minimalnej degradacji jakości dla prostych zapytań.
Prompt caching — 90% redukcja kosztów input
Anthropic, OpenAI i Google oferują prompt caching — gdy ta sama treść pojawia się na początku kontekstu wielokrotnie, jest cachowana i opłata za jej przetworzenie jest radykalnie niższa.
Dla Claude: tokeny cache write kosztują 25% standardowej ceny, tokeny cache read kosztują 10% standardowej ceny.
Praktycznie: Twój system prompt (1 500 tokenów) jest identyczny w każdym wywołaniu agenta. Bez cachowania — płacisz za 1 500 tokenów input przy każdym wywołaniu. Z cachowaniem — płacisz za cache write raz, potem 10% tej ceny przy kolejnych wywołaniach.
Dla agenta z 1 000 wywołań dziennie i system promptem 2 000 tokenów:
Bez cache: 1000 × 2000 × $3/1M = $6/dzień
Z cache: 1 × 2000 × $0.75/1M + 999 × 2000 × $0.30/1M
= $0.0015 + $0.60 = $0.60/dzień
90% redukcji kosztów za system prompt. W skali miesiąca: $180 zamiast $180.
Implementacja: oznacz prefix system promptu jako cacheable (jeden parametr w API call dla Claude). Treść musi być identyczna między wywołaniami — żadnych dynamicznie wstawianych elementów w cachowanej części.
Latency — kiedy czas ma znaczenie
Latency agentowa to suma: czas modelu + czas narzędzi + czas retrieval + overhead orchestracji.
Dwa różne typy agentów mają fundamentalnie różne wymagania:
Synchroniczny (odpowiedź teraz): chatbot obsługi klienta, asystent w czasie rzeczywistym. Limit UX: 3-5 sekund. Przekroczenie = użytkownik myśli że coś się zawiesiło.
Asynchroniczny (wynik kiedy gotowy): analiza raportu, przygotowanie propozycji, research. Limit UX: minuty lub godziny. Użytkownik dostaje powiadomienie gdy gotowe.
Dla synchronicznych — trzy strategie redukcji latency:
Równoległe wywołania narzędzi. Zamiast:
Sprawdź zamówienie → poczekaj → sprawdź status dostawy → poczekaj → odpowiedz
Zrób:
Sprawdź zamówienie i status dostawy jednocześnie → poczekaj → odpowiedz
Oszczędność: 30-60% czasu dla niezależnych wywołań.
Streaming odpowiedzi. Zamiast czekać aż agent wygeneruje pełną odpowiedź — streamuj tokeny do interfejsu użytkownika od razu. Użytkownik widzi jak odpowiedź się pojawia. Całkowity czas jest taki sam — postrzegany czas jest radykalnie krótszy.
Mniejszy model tam gdzie możliwe. Claude Haiku odpowiada 3-5x szybciej niż Sonnet. Dla prostych zapytań routing do Haiku zmniejsza latency i koszty jednocześnie.
Obserwowalność agentów — co mierzysz, to kontrolujesz
Agent observability to monitoring który sprawia że agent w produkcji nie jest czarną skrzynką.
Pięć metryk które musisz mieć:
Token cost per conversation — nie per call. Agent może mieć 10 wywołań modelu w jednej konwersacji. Metryka per call ukrywa to. Metryka per conversation pokazuje realne koszty. Alarm gdy rośnie bez wyraźnego powodu.
Latency p95 — nie średnia. Średnia latency 2 sekundy jest akceptowalna. Ale jeśli 5% konwersacji trwa 20 sekund — Twoi użytkownicy to czują. p95 (95 percentyl) pokazuje ile trwa dla najwolniejszych konwersacji.
Tool call success rate — jaki procent wywołań narzędzi kończy się sukcesem. Spadek poniżej 95% to sygnał: narzędzie ma problemy, API zewnętrzne jest niestabilne, lub agent wywołuje narzędzia z błędnymi parametrami.
Conversation length distribution — histogram długości konwersacji. Ogon rozkładu (bardzo długie konwersacje) jest często źródłem nieproporcjonalnie wysokich kosztów. Jeśli 2% konwersacji jest 10x dłuższych niż średnia — to te 2% generuje dużą część rachunku.
Error rate — procent konwersacji które kończą się błędem lub eskalacją do człowieka. Trend rosnący = coś się pogorszyło (update modelu, zmiana w danych wejściowych, nowy typ zapytań).
Narzędzia
LangSmith — jeśli budujesz na LangChain/LangGraph, to naturalne centrum. Tracing każdego kroku, ewaluacja jakości, dashboard kosztów.
Anthropic Console — wbudowany tracing dla agentów na Claude API. Dobry punkt startowy bez dodatkowej konfiguracji.
OpenTelemetry + dowolny backend — emerging standard dla agentów AI. Strukturalne logi z krokami agent loop w formacie który wchodzi w Datadog, Grafana, New Relic.
n8n execution log — jeśli budujesz w n8n, masz wbudowany log każdego wykonania z czasami każdego node’a i wynikami. Wystarczy na start.
Jeden ważny szczegół: PII scrubbing w logach. Logi konwersacji mogą zawierać dane osobowe użytkowników. Konfiguracja automatycznego redagowania (imiona, emaile, numery zamówień) jest obowiązkowa jeśli przetwarza dane osobowe — to wymóg GDPR, nie opcja.
Kalkulator na start
Zanim wdrożysz agenta do produkcji — oblicz scenariusz:
Szacowane wywołania dziennie: _____
Średni kontekst wejściowy (tokeny): _____
Średnia długość odpowiedzi (tokeny): _____
Model: _____ (cena input/output per 1M)
Koszt/dzień = wywołania × (kontekst × cena_input + output × cena_output) / 1 000 000
Koszt/miesiąc = koszt/dzień × 30
Wariant pesymistyczny: pomnóż × 3 (długie konwersacje, pętle, edge cases)
Jeśli wariant pesymistyczny jest akceptowalny — wdrażaj. Jeśli nie — zanim wdrożysz, zaimplementuj model routing i prompt caching.
W następnym artykule serii: budujesz agenta, wiesz ile kosztuje, zabezpieczasz go — jak wiesz że robi to co powinien? Ewaluacja agentów, LLM-as-judge i CI/CD dla systemów agentowych.
Pojęcia ze słownika: Token cost · Latency agentowa · Agent observability · Agent loop · Model distillation · Hallucination detection









![Artykuł 2 z serii "Agenci AI — od konceptu do produkcji" ← RAG, Agent AI, Agentic RAG — czym się różnią Poprzedni artykuł tej serii skończył się na rozróżnieniu: RAG odpowiada na pytanie, agent realizuje cel. Ale to rodzi pytanie które każdy kto buduje agenta zadaje sobie prędzej czy później: jak właściwie agent decyduje co zrobić dalej? Między "dostałem zadanie" a "zadanie wykonane" jest czarna skrzynka. Dla chatbota ta czarna skrzynka jest prosta — jeden prompt, jedna odpowiedź. Dla agenta to sekwencja decyzji, wywołań narzędzi i ocen wyniku która może trwać sekundy albo godziny. Żeby budować agentów świadomie — a nie przez próby i błędy — trzeba zrozumieć co jest w środku tej czarnej skrzynki. Pętla która napędza każdego agenta Zacznijmy od analogii. Wyobraź sobie że dostajesz zadanie: "Zarezerwuj mi hotel w Krakowie na weekend 14-15 czerwca, do 400 zł za noc, blisko centrum." Jak to robisz? Nie jednym ruchem. Najpierw szukasz opcji. Sprawdzasz ceny. Czytasz opinie. Może jedno miejsce ma dobry rating ale jest za drogie — odrzucasz. Drugie pasuje, ale patrzysz jeszcze na lokalizację. Potwierdzasz. Rezerwujesz. To jest pętla: obserwujesz → planujesz → działasz → oceniasz wynik → wracasz do początku. Agent AI działa identycznie. Każde wieloetapowe zadanie jest realizowane przez powtarzający się cykl czterech kroków — i ten cykl ma swoją nazwę: agent loop. Cztery kroki pętli Percepcja — agent patrzy na stan: co jest w oknie kontekstu, jakie były wyniki poprzednich akcji, co zwróciło ostatnie narzędzie, jaki jest cel. Planowanie — na podstawie tego co widzi, agent decyduje co zrobić dalej. To jest moment decyzji: czy cel jest osiągnięty? Jeśli nie — jaka akcja przybliży mnie do celu? Jakie narzędzie wywołać? Akcja — agent wykonuje to co zaplanował. Wywołuje narzędzie MCP, odpytuje bazę danych, robi request HTTP, pisze plik. Ocena — agent patrzy na wynik akcji. Czy to działało? Co teraz wiem więcej? Co jest następnym krokiem? Czy napotkałem błąd który wymaga innej strategii? I z powrotem do percepcji. Pętla kręci się dopóki agent nie osiągnie celu, nie napotka przeszkody której nie może pokonać, albo — i to jest ważne — nie przekroczy limitu iteracji. Limit iteracji jest krytyczny Agent bez limitu może kręcić się w pętli nieskończenie. Narzędzie zwraca błąd, agent próbuje jeszcze raz, i jeszcze raz, i jeszcze raz. Minuty zamieniają się w godziny. Tokeny i koszty rosną. Każdy agent produkcyjny musi mieć limit kroków po którym zatrzymuje się i raportuje do człowieka: "doszedłem do limitu X iteracji, oto co udało mi się ustalić, oto gdzie utknąłem." To jest pierwsza zasada którą ignoruje większość ludzi budujących swojego pierwszego agenta. ReAct — jak agent myśli zanim działa Teraz wiemy że agent kręci się w pętli. Ale co dokładnie dzieje się w kroku "planowanie"? Jak agent decyduje co zrobić? W 2022 roku badacze z Princeton i Google zaproponowali wzorzec który zmienił sposób budowania agentów: ReAct (Reasoning + Acting). Pomysł jest prosty do bólu: zanim agent wykona akcję, niech najpierw "powie na głos" co myśli. Generuje explicite reasoning — widoczny łańcuch myślenia — a potem na jego podstawie podejmuje decyzję o akcji. Wygląda to tak: Thought: Użytkownik chce hotelu w Krakowie na 14-15 czerwca do 400 zł. Powinienem najpierw sprawdzić dostępność. Action: search_hotels(city="Kraków", checkin="2026-06-14", checkout="2026-06-15", max_price=400) Observation: [3 wyniki: Hotel A — 380 zł, Hotel B — 350 zł, Hotel C — 420 zł] Thought: Hotel C jest za drogi. Hotel A i B mieszczą się w budżecie. Sprawdzam odległość od centrum. Action: get_location(hotel_id="hotel_A") Observation: 800m od Rynku Głównego Thought: 800m to blisko centrum. Hotel A kosztuje 380 zł i jest blisko. Rezerwuję. Action: book_hotel(hotel_id="hotel_A", dates=["2026-06-14"]) Trzy zalety ReAct które robią różnicę w praktyce: Debugging jest możliwy. Widzisz dokładnie skąd pochodzi każda decyzja agenta. Jeśli coś poszło nie tak — możesz śledzić rozumowanie krok po kroku i znaleźć moment gdzie agent zboczył z kursu. Narzędzia są wywoływane trafniej. Agent który "przemyśli" co wywołać zanim to zrobi, robi mniej błędnych wywołań niż agent który po prostu reaguje na ostatni wynik. Agent może się korygować. Reasoning jest widoczny — i agent może sam zauważyć że jego poprzedni krok był błędny, zanim podejmie kolejny. Chain-of-Thought — "myślmy krok po kroku" ReAct to wzorzec na poziomie architektury agenta. Chain-of-thought (CoT) to technika na poziomie promptowania modelu. Idea: zamiast prosić model o bezpośrednią odpowiedź, zachęć go żeby najpierw pokazał swoje obliczenia. Jak matematyk który nie podaje samego wyniku, ale zapisuje wszystkie kroki. Najprostszy możliwy CoT to dosłownie jedno zdanie dodane do promptu: "Myślmy krok po kroku." Brzmi banalnie. Ale działa — szczególnie przy zadaniach wieloetapowych, matematycznych i logicznych. Bardziej zaawansowany CoT to few-shot: dostarczasz modelowi przykłady pytanie + rozumowanie + odpowiedź, i model uczy się wzorca. Dla agentów operujących w specyficznej domenie — powiedzmy agent analizujący umowy prawne — few-shot CoT z przykładami z tej domeny jest jednym z najskuteczniejszych sposobów poprawy jakości. Extended thinking — CoT wbudowany w model Claude 3.7+ i kilka innych modeli poszło dalej: extended thinking jest wbudowane bezpośrednio w model, bez potrzeby specjalnego promptowania. Model generuje wewnętrzny długi łańcuch myślenia przed odpowiedzią — niewidoczny dla użytkownika (lub opcjonalnie widoczny). Efekt: znacząco lepsza jakość przy złożonych, wieloetapowych zadaniach — za cenę wyższej latencji i więcej tokenów. Dla agentów wykonujących skomplikowane analizy gdzie czas odpowiedzi jest mniej ważny niż poprawność — extended thinking jest naturalnym wyborem. Przykład który łączy wszystko: agent rezerwujący hotel Wróćmy do zadania: "Zarezerwuj hotel w Krakowie na 14-15 czerwca." Chatbot dostałby to pytanie i wygenerował listę hoteli z opisem. Odpowiedź tekstowa. Nic nie zarezerwował. Agent z agent loop, ReAct i dostępem do narzędzi wykonuje to zadanie od początku do końca: Iteracja 1: Percepcja → cel jasny, narzędzia dostępne. Planowanie → wywołaj search_hotels. Akcja → [wywołanie]. Ocena → 3 wyniki, Hotel C za drogi. Iteracja 2: Percepcja → mam 2 kandydatów. Planowanie → sprawdź lokalizację. Akcja → [wywołanie]. Ocena → Hotel A blisko centrum, Hotel B dalej. Iteracja 3: Percepcja → Hotel A: 380 zł, 800m od centrum. Spełnia wszystkie kryteria. Planowanie → rezerwuj. Akcja → [wywołanie book_hotel]. Ocena → rezerwacja potwierdzona, numer #KRK2026-0891. Wynik: "Zarezerwowałem Hotel A na 14-15 czerwca, 380 zł, 800m od Rynku Głównego. Numer rezerwacji: #KRK2026-0891." Trzy iteracje pętli. Trzy wywołania narzędzi. Jedno wykonane zadanie. Co to zmienia dla kogoś kto buduje agenta Zrozumienie agent loop, ReAct i CoT nie jest teorią akademicką — bezpośrednio wpływa na to jak projektujesz agenta. Agent loop mówi ci: musisz zdefiniować kryterium sukcesu (jak agent wie że skończył?), ustawić limit iteracji (co gdy agent utknął?), i zdecydować gdzie wstawić human-in-the-loop (które akcje wymagają potwierdzenia człowieka przed wykonaniem?). ReAct mówi ci: daj modelowi miejsce na reasoning zanim podejmie akcję. Nie optymalizuj prompta do minimum — reasoning kosztuje tokeny, ale zmniejsza błędy narzędziowe i ułatwia debugging gdy coś pójdzie nie tak. CoT mówi ci: przy złożonych zadaniach "myślmy krok po kroku" to nie magia — to zmiana trybu pracy modelu. Dla zadań domenowych few-shot CoT z przykładami z Twojej domeny jest wart inwestycji. W następnym artykule: agent myśli i działa — ale co pamięta? Jak działa pamięć agenta między krokami, między sesjami i między zadaniami — i dlaczego zły design pamięci jest jednym z najczęstszych błędów przy budowaniu agentów produkcyjnych. Pojęcia ze słownika: Agent loop · Chain-of-thought · Reasoning model · Tool use · Human-in-the-loop · Agent AI](https://webflux.pl/wp-content/uploads/2026/06/agent_mysli.webp)

