W piątek 18 września mój automat redakcyjny nie opublikował artykułu. Model językowy zwrócił tytuł, opis i tagi, ale pominął pole z treścią, więc parser odpowiedzi w n8n odrzucił wynik i zatrzymał przepływ. Straciłem jeden artykuł z harmonogramu. Z tej i kilku wcześniejszych wpadek zebrałem zasady budowy agenta AI w n8n, którego wynik da się bezpiecznie przekazać do kolejnych kroków automatyzacji.
Co to jest agent AI w n8n?
Agent AI w n8n to węzeł AI Agent połączony z modelem językowym i opcjonalnie z narzędziami. Dostaje zadanie w języku naturalnym, decyduje, czy użyć narzędzia (wyszukiwarki, zapytania HTTP, innego przepływu), i zwraca wynik. Zwykły węzeł modelu wykonuje jedno zapytanie. Agent może wykonać kilka kroków, zanim odpowie, a liczbę tych kroków ogranicza ustawienie maksymalnej liczby iteracji.
Z czego składa się agent w n8n?
- Model czatu: OpenAI, Anthropic, Gemini, Groq albo model lokalny uruchomiony przez Ollamę.
- Prompt systemowy: zasady pracy, ton, format wyniku, zakazy.
- Narzędzia (tools): węzeł HTTP Request, wyszukiwarka, węzeł kodu, inne przepływy wywoływane jako narzędzie, serwery MCP.
- Pamięć: historia rozmowy, potrzebna w czatach. W przepływach wsadowych jej nie podpinam, bo każdy przebieg zaczyna się od zera.
- Parser odpowiedzi (Structured Output Parser): wymusza wynik w formacie JSON według przykładu albo schematu.
W moich przepływach redakcyjnych agent nie ma narzędzi. Dostaje kategorię i listę opublikowanych już tytułów, a oddaje JSON z tytułem, opisem, tagami, zapytaniem do wyszukiwarki zdjęć i treścią. Kolejne węzły dobierają okładkę i publikują artykuł przez API systemu CMS.
Jak zbudować agenta krok po kroku?
- Wyzwalacz: harmonogram, webhook albo wiadomość z czatu.
- Przygotowanie danych wejściowych. U mnie to węzeł kodu, który wybiera kategorię z rotacji i skleja listę tytułów do pominięcia.
- Węzeł AI Agent. Zadanie trafia do części użytkownika, zasady do komunikatu systemowego.
- Model i parser odpowiedzi podpięte do agenta, parser z przykładowym JSON-em zawierającym komplet pól.
- Węzeł kodu sprawdzający wynik przed kolejnym krokiem (o nim niżej).
- Akcja: zapis do CMS-a, arkusza albo CRM-a, wiadomość na komunikatorze.
Jak zmusić agenta do poprawnego JSON-a?
W węźle AI Agent parser odpowiedzi działa jak narzędzie, które model ma wywołać z gotowym wynikiem. Ten mechanizm podnosi szansę na poprawny format, ale jej nie gwarantuje, co pokazał mi przebieg z 18 września. Ryzyko zmniejszają trzy ustawienia:
- Przykład z kompletem pól. Parser buduje schemat z przykładu, więc pole, którego nie ma w przykładzie, nie istnieje także dla modelu.
- Opis pól w prompcie systemowym: długość treści, format adresu (tylko małe litery, cyfry i dywizy), liczba tagów, język.
- Automatyczna naprawa formatu (Auto-Fix). Parser odsyła błędny wynik do modelu z prośbą o poprawkę. Kosztuje to dodatkowe wywołanie modelu, a w przypadku takim jak mój ratuje przebieg. W automacie, który zawiódł 18 września, ta opcja była wyłączona.
Drugą linią obrony jest ponowienie próby (Retry On Fail) w ustawieniach węzła agenta. Model, który raz pominął pole, przy kolejnym wywołaniu może zwrócić komplet, bo odpowiedzi modeli różnią się między przebiegami.
Pułapki, na które trafiłem
- **Wynik zagnieżdżony w polu
output.** Agent z parserem oddaje dane w$json.output, zamiast na górnym poziomie. Pierwszy przebieg mojego automatu opublikował stronę z pustym tytułem, bo kolejne węzły czytały$json.title. Wyrażenie($json.output || $json).titledziała w obu przypadkach. - Brak bezpiecznika przed publikacją. Po tamtym przebiegu dołożyłem przed publikacją węzeł kodu, który zatrzymuje przepływ z czytelnym błędem, gdy brakuje tytułu, adresu albo treści. Zatrzymany przepływ poprawiam i uruchamiam ponownie, a pustą stronę opublikowaną przez automat musiałem usuwać ręcznie w panelu.
- Awaria jednej usługi zatrzymuje cały przepływ. Gdy w usłudze generującej okładki skończyły się kredyty, straciłem cztery artykuły, zanim dodałem ścieżkę błędu. Dziś węzły zewnętrznych usług mają ustawione „Continue (using error output)”, a gałąź błędu prowadzi do zapasowego źródła okładki.
- Agent bez pamięci o przeszłości. Bez listy opublikowanych tytułów agent wraca do tych samych tematów. Ostatnie tytuły przekazuję mu w prompcie jako listę do pominięcia.
Kiedy agent, a kiedy zwykły węzeł modelu?
Agenta z narzędziami wybieram, gdy model ma sam zdobyć dane: sprawdzić stronę, przeszukać bazę wiedzy, wywołać API. Gdy dane są już na wejściu i potrzebuję tylko przetworzenia (streszczenia, klasyfikacji, tłumaczenia), wystarcza węzeł Basic LLM Chain z parserem. Taki przepływ zużywa mniej tokenów i ma mniej miejsc, w których może się wyłożyć.
Agent pracuje u mnie na własnej instalacji n8n; jak ją postawić, opisałem w tekście o n8n na Docker Compose. O tym, gdzie AI w automatyzacji się sprawdza, a gdzie zawodzi, piszę w tekście o automatyzacji AI w firmie. Jeśli planujesz agenta w swoim procesie, projektuję i wdrażam rozwiązania AI z bezpiecznikami, które opisałem wyżej.