{"id":464,"date":"2026-03-29T15:46:33","date_gmt":"2026-03-29T15:46:33","guid":{"rendered":"https:\/\/nuplo.org\/?page_id=464"},"modified":"2026-04-27T11:02:58","modified_gmt":"2026-04-27T11:02:58","slug":"agenci-ai","status":"publish","type":"page","link":"https:\/\/nuplo.org\/pl\/tworzenie-oprogramowania-w-erze-agentow-ai\/agenci-ai\/","title":{"rendered":"Agenci AI"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"wprowadzenie-0\">Wprowadzenie<\/h2>\n\n\n\n<p>Wiesz ju\u017c czym jest sztuczna inteligencja i na czym opiera si\u0119 jej dzia\u0142anie. Dob\u00f3r odpowiedniego narz\u0119dzia to po\u0142owa sukcesu! Do utworzenia kucharza w Twojej restauracji najlepiej nadaje si\u0119 model j\u0119zykowy: prze\u015blesz mu zdj\u0119cie, wygeneruje Ci przepis. Zaproponuj\u0119 Ci lepsze rozwi\u0105zanie, powi\u0105zane z LLM-ami &#8211; Agenci AI.&nbsp;<\/p>\n\n\n\n<p>Skoro mamy narz\u0119dzie, z kt\u00f3rym \u201crozmawiamy\u201d zwyk\u0142ym j\u0119zykiem, sprawmy, aby mog\u0142o planowa\u0107 dzia\u0142anie, podejmowa\u0107 decyzje i wykonywa\u0107 czynno\u015bci. To w\u0142a\u015bnie nazywamy agentem. Nie musisz r\u0119cznie przesy\u0142a\u0107 zdj\u0119cia jednym zapytaniem, przesy\u0142a\u0107 przepisu i dodatkowo poprawia\u0107 b\u0142\u0119dy, mo\u017cesz stworzy\u0107 agenta, kt\u00f3ry przetworzy zdj\u0119cie, wygeneruje przepis, wypisze list\u0119 sk\u0142adnik\u00f3w i dodatkowo weryfikuje swoje dzia\u0142anie. Jest to najwy\u017cszy poziom automatyzacji w tworzeniu oprogramowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-wygladaja-agenci-ai-od-kuchni-1\">Jak Wygl\u0105daj\u0105 Agenci AI od Kuchni?<\/h2>\n\n\n\n<p>Chcesz stworzy\u0107 w\u0142asnego, ale nie wiesz jak? Przed etapem programowania, musisz zrozumie\u0107 podstawowe poj\u0119cia wykorzystywane przy tworzeniu agent\u00f3w. S\u0105 to kluczowe elementy, z kt\u00f3rych ka\u017cdy agent jest zbudowany:<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prompt-co-agent-ma-wykonac-2\">Prompt: Co Agent Ma Wykona\u0107?<\/h3>\n\n\n\n<p>M\u00f3wi\u0105c kr\u00f3tko &#8211; jest to instrukcja lub polecenie dla sztucznej inteligencji.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Bardzo dobrze przygotowany prompt to po\u0142owa sukcesu, ale \u017ale sformu\u0142owane pytanie mo\u017ce stworzy\u0107 wi\u0119cej szkody ni\u017c po\u017cytku.&nbsp; AI musi wiedzie\u0107, jaki cel osi\u0105gn\u0105\u0107, wynik musi by\u0107 jasno zdefiniowany! Dobry prompt jasno okre\u015bla:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cel:<\/strong> co model ma wykona\u0107<\/li>\n\n\n\n<li><strong>Zakres: <\/strong>w jakiej dziedzinie agent wykonuje zadanie<\/li>\n\n\n\n<li><strong>Ograniczenia: <\/strong>czego agent nie mo\u017ce zrobi\u0107, czego powinien unika\u0107&nbsp;<\/li>\n\n\n\n<li><strong>Zasady jako\u015bci: <\/strong>agent musi wiedzie\u0107 jak wygl\u0105da dobry wynik<\/li>\n<\/ul>\n\n\n\n<p>Przy tworzeniu agent\u00f3w, trzeba te\u017c wspomnie\u0107 o r\u00f3\u017cnych typach prompt\u00f3w. Najwa\u017cniejszy jest System Prompt, kt\u00f3rego agent bezwzgl\u0119dnie przestrzega. Kolejnym poziomem jest User Prompt, kt\u00f3ry jak nazwa wskazuje, odpowiada za polecenie od u\u017cytkownika. Te 2 typy nie musz\u0105 si\u0119 wzajemnie wyklucza\u0107, System Prompt definiuje globalne zachowanie, okre\u015blone reakcje, dzia\u0142ania, blokady i schemat odpowiedzi, a User Prompt zwykle okre\u015bla zadanie do wykonania. Najpierw napisz prompt samemu, nast\u0119pnie wstaw go do LLM-a. Modele j\u0119zykowe bardzo dobrze przygotowuj\u0105 prompty, co pozwoli Tobie ujednolici\u0107 je oraz poprawi\u0107 ich jako\u015b\u0107. Zg\u0142aszaj modelowi problemy, kt\u00f3re napotkasz podczas tworzenia agenta, aby m\u00f3g\u0142 usprawni\u0107 prompt.&nbsp;<\/p>\n\n\n\n<p>Po przes\u0142aniu danych do AI, tekst zamieniany jest na tokeny. Token to podstawowa jednostka tekstu, kt\u00f3remu odpowiada jaka\u015b liczba, poniewa\u017c komputer lepiej rozumie liczby ni\u017c s\u0142owa. Korzystaj\u0105c z LLM-\u00f3w, p\u0142acisz za przes\u0142ane tokeny. Dzia\u0142a to te\u017c w drug\u0105 stron\u0119, model zwraca je t\u0105 sam\u0105 drog\u0105. Im wi\u0119cej token\u00f3w, tym powstanie lepszy tekst, ale wi\u0119cej zap\u0142acimy. Nie b\u00f3j si\u0119 jednak, \u017ce przekroczysz limit: dobry model przetworzy nawet 32 tysi\u0105ce s\u0142\u00f3w. Kolejny raz powt\u00f3rz\u0119 &#8211; SI nie rozumie s\u0142\u00f3w, tylko dobrze przewiduje na ich podstawie.<\/p>\n\n\n\n<p>Dobry prompt b\u0119dzie d\u0142ugi, z wieloma przyk\u0142adami, ograniczeniami, czasami nawet schematami. Pami\u0119taj! Musisz precyzyjnie okre\u015bli\u0107 rol\u0119 i zakres odpowiedzialno\u015bci. Podczas&nbsp; tworzenia ksi\u0105\u017cki kucharskiej, kluczowe jest aby zaznaczy\u0107 agentowi kontekst: &#8222;Jeste\u015b kucharzem w ekskluzywnej restauracji\u201d albo \u201cZajmujesz si\u0119 przygotowaniem w\u0142oskiego jedzenia\u201d.&nbsp; Bez tego model operuje w pr\u00f3\u017cni, przez co odpowied\u017a mo\u017ce by\u0107 nie trafiona.&nbsp;<\/p>\n\n\n\n<p>Dobry prompt pozwala zapobiec te\u017c zjawisku \u201chalucynacji\u201d. Je\u017celi model otrzyma dobre przyk\u0142ady, odpowiedni zakres i ograniczenia, zredukujemy jego mo\u017cliwo\u015b\u0107 do wytwarzania element\u00f3w nie powi\u0105zanych z naszym zapytaniem.<\/p>\n\n\n\n<p><strong>Przyk\u0142ad z\u0142ego promptu:<\/strong>&nbsp;<\/p>\n\n\n\n<p>\u201cNapisz przepis na makaron z kurczakiem.\u201d&nbsp;<\/p>\n\n\n\n<p>Agent bez problemu wykona przedstawione mu zadanie, ale efekt b\u0119dzie bardzo og\u00f3lny. Otrzymany przepis b\u0119dzie poprawny stylistycznie, ale ma\u0142o u\u017cyteczny w praktyce. Nie ma tutaj informacji o ograniczeniach, strukturze wyj\u015bciowej oraz kontekstu &#8211; model nie wie, czy jest kucharzem, kelnerem, czy pilotem samolotu.&nbsp;<\/p>\n\n\n\n<p><strong>Przyk\u0142ad dobrego promptu:<\/strong><\/p>\n\n\n\n<p><strong>\u201cWygeneruj przepis spe\u0142niaj\u0105cy poni\u017csze warunki:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Danie: makaron z kurczakiem<\/li>\n\n\n\n<li>Liczba porcji: 2<\/li>\n\n\n\n<li>Maksymalny koszt sk\u0142adnik\u00f3w: 30 z\u0142 (rynek PL)<\/li>\n\n\n\n<li>Czas przygotowania: \u2264 30 minut<\/li>\n\n\n\n<li>Styl: kuchnia \u015br\u00f3dziemnomorska<\/li>\n\n\n\n<li>Ka\u017cdy sk\u0142adnik podaj w gramach lub ml (bez &#8222;szczypty\u201d)<\/li>\n\n\n\n<li>Podaj makrosk\u0142adniki na porcj\u0119 (kalorie, bia\u0142ko, t\u0142uszcz, w\u0119glowodany)<\/li>\n\n\n\n<li>Zwr\u00f3\u0107 wynik w postaci listy krok\u00f3w<\/li>\n<\/ol>\n\n\n\n<p>Tak sformu\u0142owane polecenie precyzuje zakres zadania, wprowadza ograniczenia i struktur\u0119 odpowiedzi. Model wie co ma wykona\u0107, ale te\u017c w jakich ramach mo\u017ce si\u0119 porusza\u0107, jak ma wygl\u0105da\u0107 rezultat. R\u00f3\u017cnica mi\u0119dzy dobrym i z\u0142ym promptem nie odnosi si\u0119 do dzia\u0142ania, ale do kontroli rezultatu. Dobry prompt zredukuje przypadkowo\u015b\u0107 i zwi\u0119kszy u\u017cyteczno\u015b\u0107 odpowiedzi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"state-pamiec-krotkotrwala-3\">State: Pami\u0119\u0107 Kr\u00f3tkotrwa\u0142a<\/h3>\n\n\n\n<p>Pomi\u0119dzy wierzcho\u0142kami trzeba przekazywa\u0107 dane. Musisz utworzy\u0107 schemat, wed\u0142ug kt\u00f3rego wierzcho\u0142ki komunikuj\u0105 si\u0119 ze sob\u0105, kiedy node zako\u0144czy swoje dzia\u0142anie, musi przekaza\u0107 uzyskane dane do kolejnego. Mo\u017cesz przechowywa\u0107 wiele r\u00f3\u017cnych stan\u00f3w, w zale\u017cno\u015bci od potrzeb. Musisz tylko pami\u0119ta\u0107, aby by\u0142o to sp\u00f3jne.&nbsp;<\/p>\n\n\n\n<p>Jest to niestety \u201cpami\u0119\u0107 kr\u00f3tkotrwa\u0142a\u201d, poniewa\u017c istnieje tylko w jednym wykonaniu agenta. Zapytasz budowanego agenta o przepis, na podstawie poprzedniego zdj\u0119cia, co si\u0119 stanie? Agent odpowie Ci, \u017ce on nie ma \u017cadnego zdj\u0119cia.&nbsp;<\/p>\n\n\n\n<p>W poni\u017cszym przyk\u0142adzie przedstawi\u0142em bardzo prosty State, w kt\u00f3rym agent ma 2 tryby dzia\u0142ania oraz informacj\u0119 o tym, \u017ce przes\u0142any zosta\u0142 obraz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@dataclass\nclass State(MessagesState):\n  mode: Literal&#91;\"analyse_image\u201d, \u201cextract_recipe\u201d]\n  has_image: Boolean<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"node-sposob-dzialania-agenta-4\">Node: Spos\u00f3b Dzia\u0142ania Agenta<\/h3>\n\n\n\n<p>Programowo, agenci dzia\u0142aj\u0105 wed\u0142ug grafu. Wierzcho\u0142ki (node) zawieraj\u0105 dzia\u0142anie agenta w konkretnym kroku. Mo\u017cna tutaj wywo\u0142a\u0107 model j\u0119zykowy, zapisa\u0107 konwersacj\u0119 do pliku, dokona\u0107 oblicze\u0144 &#8211; ograniczaj\u0105 Ci\u0119 mo\u017cliwo\u015bci komputera. Musisz zapami\u0119ta\u0107, \u017ce w wierzcho\u0142ku agent co\u015b wykonuje.<\/p>\n\n\n\n<p>W przyk\u0142adzie przedstawi\u0142em prosty wierzcho\u0142ek, w kt\u00f3rym agent odwo\u0142uje si\u0119 do modelu j\u0119zykowego. System Prompt definiuje jego zachowanie.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def example_node(state: State):\n\n    message = state&#91;\"messages\"]&#91;-1]\n\n    SYSTEM_PROMPT = \"You are a helpful chef assistant. Answer user questions\u201d\n\n    system = SystemMessage(SYSTEM_PROMPT)\n    response = ai_model.invoke(&#91;system, message])\n    return {\"messages\": &#91;response]}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"edge-logika-dzialania-agenta-5\">Edge: Logika Dzia\u0142ania Agenta<\/h3>\n\n\n\n<p>Drugim elementem grafu s\u0105 kraw\u0119dzie (edge). Ich zadaniem jest zapewnienie przej\u015b\u0107 pomi\u0119dzy wierzcho\u0142kami. Mog\u0105 by\u0107 proste, ale te\u017c warunkowe. W warunkowym przej\u015bciu, agent ma wiele \u015bcie\u017cek, z kt\u00f3rych (zwykle) wybierze jedn\u0105, na podstawie jakiego\u015b kryterium. Na przyk\u0142adzie pomocnika gotowania, agent mo\u017ce wybra\u0107 \u015bcie\u017ck\u0119 analizuj\u0105c\u0105 zdj\u0119cie, poniewa\u017c dosta\u0142 zdj\u0119cie, albo przygotowa\u0107 przepis, je\u017celi zobaczy tekst. Pami\u0119taj! Wa\u017cne jest, aby graf by\u0142 prosty, dodatkowe komplikacje w grafie \u017ale wp\u0142ywaj\u0105 na dzia\u0142anie agenta.<\/p>\n\n\n\n<p>O to prosta kraw\u0119d\u017a, kt\u00f3ra pomo\u017ce Ci zapozna\u0107 si\u0119 z tym mechanizmem. Agent sprawdza, czy otrzyma\u0142 zdj\u0119cie i wybierany jest odpowiedni Node.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def edge_router(state: State) -&gt; Literal&#91;\"analyse_image\u201d, \u201cextract_recipe\u201d]:\n    if state&#91;\u201chas_image\u201d]:\n        return \u201canalyse_image\u201d\n    return \u201cextract_recipe\u201d<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"memory-czyli-jak-agent-ma-zapamietac-uzytkownika-6\">Memory, Czyli Jak Agent Ma Zapami\u0119ta\u0107 U\u017cytkownika<\/h3>\n\n\n\n<p>Musimy wi\u0119c zapewni\u0107 pami\u0119\u0107 d\u0142ugotrwa\u0142\u0105, kt\u00f3ra pozwoli zapami\u0119ta\u0107 konwersacje. Jest na to wiele sposob\u00f3w, najprostszy pozwala grupowa\u0107 wywo\u0142ania przez u\u017cytkownik\u00f3w. Kolejnymi, kt\u00f3re warto wyr\u00f3\u017cni\u0107 to baza danych, gdzie przechowuje si\u0119 poszczeg\u00f3lne konwersacje, ale te\u017c proste pliki tekstowe, w kt\u00f3rych mo\u017ce zosta\u0107 zapisane podsumowanie konwersacji.&nbsp;<\/p>\n\n\n\n<p>Wa\u017cne jest aby pouk\u0142ada\u0107 dane tak, aby rozr\u00f3\u017cni\u0107 konwersacje, u\u017cytkownik\u00f3w i pami\u0119ta\u0107 o tym aby przedstawi\u0107 te dane agentowi. Potrzebne jest narz\u0119dzie, dzi\u0119ki kt\u00f3remu model np. zapami\u0119ta, \u017ce u\u017cytkownik jest uczulony na orzechy i b\u0119dzie je odradza\u0142 u\u017cytkownikowi.&nbsp;<\/p>\n\n\n\n<p>Korzystaj\u0105c z LangGraph, mamy do dyspozycji obiekt MemorySaver(), kt\u00f3ry zachowa stan agenta pomi\u0119dzy wywo\u0142aniami. Historia zostaje zapisana w osobnych w\u0105tkach, co pozwala korzysta\u0107 wielu u\u017cytkownikom z agenta jednocze\u015bnie.&nbsp;<\/p>\n\n\n\n<p>Klasycznym podej\u015bciem jest zapisanie historii w bazie danych. Utworzenie tabel wymaga wi\u0119cej pracy od programisty, ale daje wi\u0119cej kontroli nad przekazywanymi danymi. Po ka\u017cdym kroku, musimy zapisa\u0107 stan w bazie danych, a przy kolejnych wykonaniach pobiera\u0107 je.<\/p>\n\n\n\n<p>Unikalnym podej\u015bciem, kt\u00f3re stosuje si\u0119 przy pracy z agentami jest RAG (Retrieval Augmented Generation). Nie jest to klasyczna baza danych, ale system wyszukiwania wiedzy. Model przeszukuje dodatkowe materia\u0142y, dopiero potem generuje odpowied\u017a. Jako programista, masz mo\u017cliwo\u015b\u0107 kontroli jakie dokumenty s\u0105 przekazywane do modelu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tools-podstawa-autonomicznosci-7\">Tools: Podstawa Autonomiczno\u015bci<\/h3>\n\n\n\n<p>Ostatnim wa\u017cnym poj\u0119ciem s\u0105 narz\u0119dzia, wykorzystywane przez agent\u00f3w. S\u0105 to po prostu funkcje z opisem, kt\u00f3re agent mo\u017ce wykorzysta\u0107. Agent przeanalizuje jakie dane s\u0105 potrzebne, wywnioskuje z opisu co funkcja robi i mo\u017ce j\u0105 samodzielnie wykona\u0107. Id\u0105c dalej, funkcja zwraca wynik, kt\u00f3ry agent podsumowuje. Taka funkcja pozwala agentowi realnie wp\u0142yn\u0105\u0107 na otoczenie. Jakie to ma znaczenie dla Ciebie?<br>Agent samodzielnie mo\u017ce podj\u0105\u0107 decyzj\u0119 o analizie zdj\u0119cia albo wygenerowaniu sk\u0142adnik\u00f3w. Otrzyma\u0142 zdj\u0119cie &#8211; uruchom narz\u0119dzie do jego analizy. U\u017cytkownik chce zapisa\u0107 przepis &#8211; uruchom narz\u0119dzie do zapisu do pliku. Utw\u00f3rz takie narz\u0119dzia, aby by\u0142y maksymalnie proste i wykonywa\u0142y jedn\u0105 czynno\u015b\u0107.&nbsp;<\/p>\n\n\n\n<p>W poprzednim rozdziale, MVP zak\u0142ada\u0142o analizowanie zdj\u0119\u0107 z lod\u00f3wki i tworzenie z nich przepis\u00f3w. W poni\u017cszym przyk\u0142adzie, kucharz, kt\u00f3ry otrzyma to narz\u0119dzie, b\u0119dzie m\u00f3g\u0142 to zadanie zrealizowa\u0107.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@tool \ndef tool_image(query: str, image_url: str) -&gt; str:\n    \"\"\"Parses image with LLM.\n    \"\"\"\n\n    SYSTEM_PROMPT = \"You are a chef, when user uploads image derive it's recipe\"\n\n    user_message = query\n    content = &#91;\n        {\"type\": \"text\", \"text\": user_message},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": image_url}},\n    ]\n    messages = &#91;SystemMessage(SYSTEM_PROMPT), HumanMessage(content=content)]\n\n    response = llm.invoke(messages)\n    return response.content<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"narzedzia-wykorzystywane-do-tworzenia-agentow-8\">Narz\u0119dzia Wykorzystywane do Tworzenia Agent\u00f3w<\/h2>\n\n\n\n<p>Chcesz ju\u017c zaprogramowa\u0107 agenta? Jednym z najlepszych narz\u0119dzi do tego jest LangGraph. Jest to otwarto \u017ar\u00f3d\u0142owe rozwi\u0105zanie do tworzenia agent\u00f3w AI. Masz gotowy zestaw narz\u0119dzi do tworzenia wierzcho\u0142k\u00f3w, kraw\u0119dzi, narz\u0119dzi. Mo\u017cesz wykorzysta\u0107 gotowe struktury danych dla stan\u00f3w i pami\u0119ci, albo rozbudowa\u0107 je i dostosowa\u0107 do swoich potrzeb. LangGraph oferuje swoje biblioteki w j\u0119zyku Python i TypeScript\/JavaScript.<\/p>\n\n\n\n<p>Warto wspomnie\u0107 o LangChain &#8211; rozwi\u0105zaniu r\u00f3wnie\u017c stosowanym do tworzenia agent\u00f3w. LangChain buduje agent\u00f3w, kt\u00f3rzy pracuj\u0105 krok po kroku, w przeciwie\u0144stwie do LangGraph, nie ma tutaj mo\u017cliwo\u015bci tworzenia warunk\u00f3w, logiki lub p\u0119tli. LangChain jest prostszy w wykorzystaniu, ale ma mniejsze mo\u017cliwo\u015bci, \u015bwietnie nadaje si\u0119 do tworzenia prostych, nieskomplikowanych agent\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"390\" height=\"309\" src=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-123830.webp\" alt=\"\" class=\"wp-image-645\" srcset=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-123830.webp 390w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-123830-300x238.webp 300w\" sizes=\"auto, (max-width: 390px) 100vw, 390px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"co-wyroznia-langgraph-9\">Co Wyr\u00f3\u017cnia LangGraph?<\/h3>\n\n\n\n<p>Tworz\u0105c agenta w tym narz\u0119dziu, budujemy jego proces decyzyjny poprzez graf. Klasyczne podej\u015bcie: Prompt -&gt; LLM -&gt; Wynik nie pozwala agentowi samemu podejmowa\u0107 decyzje, wymaga stworzenia p\u0119tli dzia\u0142ania i nie mamy kontroli nad dzia\u0142aniem agenta. Dzi\u0119ki podej\u015bciu grafowym, mo\u017cemy wprowadzi\u0107 warunki, zwi\u0119ksza odporno\u015b\u0107 na b\u0142\u0119dy i agent ma wi\u0119ksz\u0105 autonomiczno\u015b\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"chain-najprostszy-agent-10\">Chain: Najprostszy Agent<\/h3>\n\n\n\n<p>Najprostszy mo\u017cliwy agent, s\u0105 to w\u0119z\u0142y po\u0142\u0105czone sekwencyjnie &#8211; wynik jednego w\u0119z\u0142a jest wej\u015bciem dla kolejnego. Ka\u017cdy node ma wykona\u0107 jedno zadanie. Jest to po prostu ci\u0105g wywo\u0142a\u0144, przyk\u0142adowy agent mo\u017ce:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Przeanalizowa\u0107 obraz z daniem<\/li>\n\n\n\n<li>Utworzy\u0107 przepis z wyci\u0105gni\u0119tych sk\u0142adnik\u00f3w<\/li>\n\n\n\n<li>Zapisa\u0107 dane w pliku<\/li>\n\n\n\n<li>Przes\u0142a\u0107 je na serwer<\/li>\n\n\n\n<li>Stre\u015bci\u0107 wszystko u\u017cytkownikowi<\/li>\n<\/ul>\n\n\n\n<p>Dzia\u0142a to, jako jeden ci\u0105g wywo\u0142a\u0144, zawsze w tej samej kolejno\u015bci. Je\u017celi b\u0142\u0105d zajdzie w jednym ogniwie, reszta \u0142a\u0144cucha si\u0119 wysypie. Agent typu Chain to najlepszy punkt startowy dla Twojego agenta.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"627\" src=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133153.webp\" alt=\"\" class=\"wp-image-651\" srcset=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133153.webp 438w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133153-210x300.webp 210w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"router-agent-sam-podejmuje-decyzje-11\">Router: Agent Sam Podejmuje Decyzj\u0119<\/h3>\n\n\n\n<p>Wzorzec, w kt\u00f3rym jeden wierzcho\u0142ek pe\u0142ni rol\u0119 dyspozytora. Otrzymuje dane na wej\u015bciu i musi zdecydowa\u0107, do kt\u00f3rego w\u0119z\u0142a przekaza\u0107 zadanie do wyspecjalizowanych w\u0119z\u0142\u00f3w. Tworz\u0105 si\u0119 niezale\u017cne ga\u0142\u0119zie w grafie, czasami z r\u00f3\u017cnymi odpowiedziami. Nie ma tutaj zap\u0119tlenia, jeden w w\u0119ze\u0142 wybiera liniow\u0105 \u015bcie\u017ck\u0119.<\/p>\n\n\n\n<p>Na przyk\u0142adzie agenta zarz\u0105dzaj\u0105cego przepisami, mo\u017cemy wyr\u00f3\u017cni\u0107 3 \u015bcie\u017cki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Przeanalizuj zdj\u0119cie<\/li>\n\n\n\n<li>Utw\u00f3rz przepis<\/li>\n\n\n\n<li>Opisz sk\u0142adniki z przepisu<\/li>\n<\/ul>\n\n\n\n<p>Na wej\u015bciu, router mo\u017ce otrzyma\u0107 zdj\u0119cie, sk\u0142adniki albo przepis. Na tej podstawie, zdecyduje, gdzie przekierowa\u0107:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>otrzyma zdj\u0119cie, znaczy \u017ce musi zosta\u0107 przeanalizowane.<\/li>\n\n\n\n<li>otrzyma przepis, jego zadaniem jest wypisa\u0107 sk\u0142adniki<\/li>\n\n\n\n<li>otrzyma sk\u0142adniki, musi stworzy\u0107 przepis<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"454\" src=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133957-1024x454.webp\" alt=\"\" class=\"wp-image-658\" srcset=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133957-1024x454.webp 1024w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133957-300x133.webp 300w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133957-768x341.webp 768w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-133957.webp 1407w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"subgraph-agent-w-agencie-12\">SubGraph: Agent w Agencie<\/h3>\n\n\n\n<p>Podej\u015bcie podobne do funkcji czy obiekt\u00f3w z klasycznego programowania. Tworzymy izolowany graf, kt\u00f3ry z zewn\u0105trz wygl\u0105da jak jeden, pojedynczy w\u0119ze\u0142. G\u0142\u00f3wny graf nie wie nic o jego wewn\u0119trznej strukturze, wywo\u0142uje go i oczekuje na jego zako\u0144czenie. To rozwi\u0105zanie pozwala nam \u0142atwo je podmienia\u0107, u\u017cywa\u0107 w r\u00f3\u017cnych miejscach, czy testowa\u0107 niezale\u017cnie przed wykorzystaniem w grafie g\u0142\u00f3wnym.&nbsp;<\/p>\n\n\n\n<p>Odnosz\u0105c to do kuchni, SubGraph mo\u017ce by\u0107 jej sekcj\u0105, np. cukierni\u0105, kt\u00f3rej g\u0142\u00f3wny kucharz zleca wykonanie ciasta. Kucharza nie interesuje, jak wewn\u0105trz funkcjonuje cukiernia, tylko czy upiecze deser.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"549\" src=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134607.webp\" alt=\"\" class=\"wp-image-675\" srcset=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134607.webp 612w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134607-300x269.webp 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"react-pierwszy-krok-do-niezaleznosci-13\">ReAct: Pierwszy Krok do Niezale\u017cno\u015bci<\/h2>\n\n\n\n<p>Agent analizuje przedstawion\u0105 mu sytuacj\u0119 i podejmuje odpowiednie dzia\u0142anie (np. uruchamiaj\u0105c odpowiednie narz\u0119dzie). Na podstawie swojego dzia\u0142ania, ponownie je analizuje i wykonuje, do momentu gdy uzna\u0142 problem za rozwi\u0105zany. Zwykle, temu rodzajowi agent\u00f3w przypisujemy dobrze opisane narz\u0119dzia np.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zmie\u0144 sk\u0142adniki na przepis<\/li>\n\n\n\n<li>Wyci\u0105gnij sk\u0142adniki ze zdj\u0119cia<\/li>\n<\/ul>\n\n\n\n<p>Jest to pierwszy krok do pe\u0142nej automatyzacji, autonomiczny kucharz nie potrzebuje algorytmu do dzia\u0142ania, a sam eksperymentuje.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"642\" src=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134324-1.webp\" alt=\"\" class=\"wp-image-671\" style=\"width:592px;height:auto\" srcset=\"https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134324-1.webp 618w, https:\/\/nuplo.org\/wp-content\/uploads\/2026\/04\/Zrzut-ekranu-2026-04-25-134324-1-289x300.webp 289w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"podsumowanie-14\">Podsumowanie<\/h2>\n\n\n\n<p>Dob\u00f3r odpowiednich modeli i tworzenie agent\u00f3w pozwoli unowocze\u015bni\u0107 aplikacj\u0119. Wiesz, kt\u00f3re rozwi\u0105zania s\u0105 odpowiednie, a kt\u00f3rych lepiej unika\u0107 na pocz\u0105tku dzia\u0142ania aplikacji. Twoja ksi\u0105\u017cka ju\u017c nie tylko przedstawia przepisy, ale dzi\u0119ki agentowi mo\u017ce je aktywnie tworzy\u0107.&nbsp;<\/p>\n\n\n\n<p>Wiesz ju\u017c z jakiego narz\u0119dzia powiniene\u015b skorzysta\u0107 podczas tworzenia agenta. Rozumiesz podstawowe zagadnienia z nimi powi\u0105zane, musisz tylko umiej\u0119tnie uk\u0142ada\u0107 klocki. W kolejnym rozdziale przejdziemy do ulepszenia wygl\u0105du Twojego MVP. Kiedy stworzone przez Ciebie rozwi\u0105zanie dzia\u0142a i spe\u0142nia za\u0142o\u017cenia, musi by\u0107 jeszcze estetyczna, dostosowana do r\u00f3\u017cnych u\u017cytkownik\u00f3w i urz\u0105dze\u0144 i wygodna w u\u017cyciu.&nbsp;<\/p>\n\n\n\n<p>Tworz\u0105c jednak pi\u0119kn\u0105 sal\u0119 (stron\u0119 internetow\u0105), nie mo\u017cesz zapomnie\u0107 o kucharzach (agentach AI) i kuchni (serwerze). Kolejny rozdzia\u0142 naprowadzi Ci\u0119 na to, jak powinna funkcjonowa\u0107 restauracja jako ca\u0142o\u015b\u0107 (aplikacja internetowa).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"materialy-15\">Materia\u0142y<\/h2>\n\n\n\n<p>Materia\u0142y do samodzielnej nauki zwi\u0105zane z tym tematem:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/help.openai.com\/en\/articles\/5112595-best-practices-for-api-key-safety\">Najlepsze praktyki dotycz\u0105ce bezpiecze\u0144stwa kluczy API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/help.openai.com\/en\/articles\/8304786-how-can-i-keep-my-openai-accounts-secure\">Jak mog\u0119 zabezpieczy\u0107 moje konta OpenAI?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/medium.com\/@kranthigoud975\/understanding-ai-agents-a-beginners-guide-with-simple-analogies-b89fdfa6a513\" data-type=\"link\" data-id=\"https:\/\/medium.com\/@kranthigoud975\/understanding-ai-agents-a-beginners-guide-with-simple-analogies-b89fdfa6a513\"><a href=\"https:\/\/help.openai.com\/en\/articles\/8304786-how-can-i-keep-my-openai-accounts-secure\">Jak dzia\u0142aj\u0105 agenci AI (logika dzia\u0142ania agent\u00f3w AI)<\/a><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.geeksforgeeks.org\/artificial-intelligence\/langchain-vs-langgraph\/\" data-type=\"link\" data-id=\"https:\/\/www.geeksforgeeks.org\/artificial-intelligence\/langchain-vs-langgraph\/\">R\u00f3\u017cnica mi\u0119dzy LangChain a LangGraph<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.sysaid.com\/docs\/writing-effective-prompts-for-ai-agent-creation\" data-type=\"link\" data-id=\"https:\/\/documentation.sysaid.com\/docs\/writing-effective-prompts-for-ai-agent-creation\">Przyk\u0142ady dobrych prompt\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.promptingguide.ai\/\" data-type=\"link\" data-id=\"https:\/\/www.promptingguide.ai\/\">Jak pisa\u0107 dobre prompty<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.langchain.com\/oss\/python\/langchain\/multi-agent\" data-type=\"link\" data-id=\"https:\/\/docs.langchain.com\/oss\/python\/langchain\/multi-agent\">Dokumentacja LangChain<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/academy.langchain.com\/courses\/intro-to-langgraph\" data-type=\"link\" data-id=\"https:\/\/academy.langchain.com\/courses\/intro-to-langgraph\">Podstawy LangGraph<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=jx7xuHlfsEQ\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=jx7xuHlfsEQ\">Samouczek: korzystanie z LangSmith<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=jGg_1h0qzaM\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=jGg_1h0qzaM\">Przewodnik po tworzeniu agenta AI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=jGg_1h0qzaM&amp;t=83s\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=jGg_1h0qzaM&amp;t=83s\">Kompletny kurs LangGraph dla pocz\u0105tkuj\u0105cych \u2013 z\u0142o\u017ceni agenci AI w Pythonie<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=FwOTs4UxQS4\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=FwOTs4UxQS4\">Czym s\u0105 agenci AI?<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Wprowadzenie Wiesz ju\u017c czym jest sztuczna inteligencja i na czym opiera si\u0119 jej dzia\u0142anie. Dob\u00f3r odpowiedniego narz\u0119dzia to po\u0142owa sukcesu! Do utworzenia kucharza w Twojej restauracji najlepiej nadaje si\u0119 model j\u0119zykowy: prze\u015blesz mu zdj\u0119cie, wygeneruje Ci przepis. Zaproponuj\u0119 Ci lepsze rozwi\u0105zanie, powi\u0105zane z LLM-ami &#8211; Agenci AI.&nbsp; Skoro mamy narz\u0119dzie, z kt\u00f3rym \u201crozmawiamy\u201d zwyk\u0142ym j\u0119zykiem, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":415,"menu_order":5,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-464","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/comments?post=464"}],"version-history":[{"count":8,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/464\/revisions"}],"predecessor-version":[{"id":788,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/464\/revisions\/788"}],"up":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/415"}],"wp:attachment":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/media?parent=464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}