Blog

Agent AI w n8n: jak zbudować agenta, który zwraca poprawne dane

Kategoria:

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?

  1. Wyzwalacz: harmonogram, webhook albo wiadomość z czatu.
  2. Przygotowanie danych wejściowych. U mnie to węzeł kodu, który wybiera kategorię z rotacji i skleja listę tytułów do pominięcia.
  3. Węzeł AI Agent. Zadanie trafia do części użytkownika, zasady do komunikatu systemowego.
  4. Model i parser odpowiedzi podpięte do agenta, parser z przykładowym JSON-em zawierającym komplet pól.
  5. Węzeł kodu sprawdzający wynik przed kolejnym krokiem (o nim niżej).
  6. 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).title dział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.