{"id":2281,"date":"2024-09-04T10:30:00","date_gmt":"2024-09-04T08:30:00","guid":{"rendered":"https:\/\/pletzenauer.com\/?p=2281"},"modified":"2026-08-05T17:24:16","modified_gmt":"2026-08-05T15:24:16","slug":"agent-rag-n8n-supabase","status":"publish","type":"post","link":"https:\/\/pletzenauer.com\/pl\/2024\/09\/04\/agent-rag-n8n-supabase\/","title":{"rendered":"Agent RAG bez kodu: produktywne po\u0142\u0105czenie n8n i Supabase"},"content":{"rendered":"<p>Wi\u0119kszo\u015b\u0107 tutoriali o RAG w sieci pokazuje wci\u0105\u017c t\u0119 sam\u0105 zabawk\u0119: &#8220;porozmawiaj ze swoim PDF-em&#8221;. Rzadko si\u0119 przy tym wspomina, \u017ce te demonstracje s\u0105 dalekie od zastosowania produkcyjnego. Gdy tylko baza wiedzy ro\u015bnie, dokumenty s\u0105 aktualizowane albo u\u017cytkownicy zadaj\u0105 pytania, kt\u00f3rych nikt nie testowa\u0142, zaczynaj\u0105 si\u0119 problemy. Dok\u0142adnie w tym miejscu wchodzi opisane tu podej\u015bcie.<\/p>\n<p>W swoim filmie Cole Medin pokazuje, jak za pomoc\u0105 dw\u00f3ch narz\u0119dzi \u2014 <strong>n8n<\/strong> (automatyzacja przep\u0142yw\u00f3w pracy, por\u00f3wnywalna z Make.com lub Zapier) i <strong>Supabase<\/strong> (platforma bazodanowa ze wsparciem wektor\u00f3w przez PG Vector) \u2014 zbudowa\u0107 agenta RAG opartego na AI, kt\u00f3ry jest bli\u017cszy praktyce ni\u017c wiele innych poradnik\u00f3w. Obietnica: bez kodu, przewidywalny nak\u0142ad pracy i konstrukcja, kt\u00f3ra ro\u015bnie razem z baz\u0105 wiedzy. Dla decydent\u00f3w w M\u015aP jest to interesuj\u0105ce przede wszystkim dlatego, \u017ce pozwala uczyni\u0107 wewn\u0119trzne dokumenty, protoko\u0142y czy podr\u0119czniki przeszukiwalnymi bez zatrudniania zespo\u0142u deweloperskiego.<\/p>\n<div style=\"background:#FFE6D6;border-left:4px solid #F26A21;padding:16px 20px;border-radius:6px;margin:24px 0;\">\n<strong>Najwa\u017cniejsze w skr\u00f3cie<\/strong><\/p>\n<ul>\n<li>RAG (Retrieval Augmented Generation) \u0142\u0105czy model j\u0119zykowy z w\u0142asn\u0105 baz\u0105 wiedzy, dzi\u0119ki czemu agent si\u0119ga do Pani dokument\u00f3w, a nie tylko do wiedzy z treningu.<\/li>\n<li>n8n przejmuje automatyzacj\u0119, Supabase s\u0142u\u017cy jednocze\u015bnie jako pami\u0119\u0107 czatu i baza wektorowa.<\/li>\n<li>Ca\u0142a konstrukcja dzia\u0142a bez programowania i wed\u0142ug filmu daje si\u0119 skonfigurowa\u0107 w mniej ni\u017c 15 minut.<\/li>\n<li>Dwa szczeg\u00f3\u0142y odr\u00f3\u017cniaj\u0105 to podej\u015bcie od powierzchownych tutoriali: skalowalna pami\u0119\u0107 historii czatu i usuwanie nieaktualnych wektor\u00f3w, aby unikn\u0105\u0107 duplikat\u00f3w.<\/li>\n<li>Darmowy poziom Supabase wed\u0142ug filmu w zupe\u0142no\u015bci wystarcza na start.<\/li>\n<\/ul>\n<\/div>\n<figure style=\"margin:28px 0;\"><img decoding=\"async\" src=\"https:\/\/pletzenauer.com\/wp-content\/uploads\/2026\/06\/1486-1.png\" alt=\"Por\u00f3wnanie w dw\u00f3ch kolumnach: po lewej typowe tutoriale RAG nastawione na demo i lokaln\u0105 pami\u0119\u0107, po prawej praktyczne podej\u015bcie z pami\u0119ci\u0105 w Supabase i usuwaniem nieaktualnych wektor\u00f3w.\" style=\"width:100%;height:auto;border-radius:8px;border:1px solid #E5E2DE;\"\/><figcaption style=\"font-size:0.9em;color:#6b6b6b;margin-top:8px;\">Dwa cz\u0119sto pomijane szczeg\u00f3\u0142y decyduj\u0105 o tym, czy agent RAG pozostanie u\u017cyteczny przy rosn\u0105cej bazie wiedzy.<\/figcaption><\/figure>\n<h2>Co agent daje w praktyce<\/h2>\n<p>Spos\u00f3b dzia\u0142ania pokazano w filmie na prostym przyk\u0142adzie. Na pocz\u0105tku baza wiedzy jest pusta, odpowiednia tabela w Supabase nie zawiera wpis\u00f3w. Na testowe pytanie o zadania z pewnego spotkania agent konsekwentnie nie potrafi odpowiedzie\u0107.<\/p>\n<p>Nast\u0119pnie do monitorowanego folderu trafia dokument z notatkami ze spotkania jako Google Doc. W ci\u0105gu mniej wi\u0119cej minuty w tle uruchamia si\u0119 workflow n8n, kt\u00f3ry przetwarza plik i wstawia go do bazy wiedzy. Potem w Supabase pojawia si\u0119 nowy rekord z zawarto\u015bci\u0105 strony, metadanymi (mi\u0119dzy innymi identyfikatorem pliku Google Drive) i tak zwanym wektorem embeddingu. Gdy zada si\u0119 to samo pytanie ponownie, agent podaje teraz poprawn\u0105 odpowied\u017a z dokumentu. Aktualizacje pliku s\u0105 r\u00f3wnie\u017c wykrywane i nadrabiane.<\/p>\n<h2>Konstrukcja w skr\u00f3cie<\/h2>\n<p>Workflow sk\u0142ada si\u0119 z dw\u00f3ch cz\u0119\u015bci: w\u0142a\u015bciwego agenta czatu i osobnej \u015bcie\u017cki, kt\u00f3ra automatycznie wprowadza dokumenty do bazy wiedzy. Gotowy szablon JSON mo\u017cna wed\u0142ug filmu pobra\u0107 z repozytorium GitHub i wczyta\u0107 do w\u0142asnej instancji n8n przez &#8220;Import from file&#8221;. Potem trzeba ju\u017c tylko uzupe\u0142ni\u0107 w\u0142asne dane dost\u0119powe i wybrany folder.<\/p>\n<h3>Przygotowanie Supabase<\/h3>\n<p>Supabase konfiguruje si\u0119 za pomoc\u0105 konta GitHub. Dwa obszary ustawie\u0144 projektu dostarczaj\u0105 potrzebnych danych dost\u0119powych:<\/p>\n<ul>\n<li><strong>Database:<\/strong> host, nazwa bazy danych, port, u\u017cytkownik i has\u0142o do po\u0142\u0105czenia z Postgres. Te dane s\u0105 u\u017cywane dla pami\u0119ci czatu.<\/li>\n<li><strong>API:<\/strong> adres URL specyficzny dla projektu oraz service role secret. Te dane s\u0105 potrzebne dla bazy wektorowej.<\/li>\n<\/ul>\n<p>Dla wyszukiwania wektorowego n8n udost\u0119pnia w swojej dokumentacji gotowy kod SQL. Uruchamia si\u0119 go jednorazowo w edytorze SQL w Supabase, a on automatycznie zak\u0142ada rozszerzenie PG Vector, tabel\u0119 dokument\u00f3w i funkcj\u0119 dopasowania dla RAG. W\u0142asny kod programu nie jest do tego potrzebny.<\/p>\n<h3>Agent czatu<\/h3>\n<p>Agenta uruchamia wyzwalacz &#8220;When a chat message is received&#8221;. Daje on zarazem okno czatu bezpo\u015brednio w n8n, dzi\u0119ki czemu agenta mo\u017cna testowa\u0107 bez wdro\u017cenia. W razie potrzeby ten sam interfejs da si\u0119 osadzi\u0107 na stronie gotowym kodem osadzenia. Do agenta pod\u0142\u0105czone s\u0105 trzy elementy:<\/p>\n<ul>\n<li><strong>Model czatu:<\/strong> w przyk\u0142adzie GPT-4o mini, pod\u0142\u0105czony przez klucz API OpenAI. Alternatywnie mo\u017cliwy jest tak\u017ce Anthropic.<\/li>\n<li><strong>Pami\u0119\u0107 czatu:<\/strong> tu \u015bwiadomie u\u017cywa si\u0119 Postgres przez Supabase zamiast cz\u0119sto polecanej lokalnej pami\u0119ci okna. Lokalna pami\u0119\u0107 obci\u0105\u017ca serwer n8n i s\u0142abo si\u0119 skaluje. Potrzebn\u0105 tabel\u0119 n8n zak\u0142ada w razie potrzeby samo.<\/li>\n<li><strong>Narz\u0119dzie RAG:<\/strong> narz\u0119dzie &#8220;retrieve documents&#8221; z Supabase jako magazynem wektor\u00f3w, konfigurowane przez nazw\u0119 tabeli i funkcj\u0119 zapytania.<\/li>\n<\/ul>\n<h3>Automatyczne wprowadzanie dokument\u00f3w<\/h3>\n<p>Druga cz\u0119\u015b\u0107 workflow utrzymuje baz\u0119 wiedzy w aktualnym stanie. Wyzwalacz Google Drive regularnie sprawdza w ustalonym folderze nowe lub zmienione pliki. Dalszy przebieg:<\/p>\n<ul>\n<li>Identyfikator pliku zostaje wyodr\u0119bniony i przekazany do kolejnych krok\u00f3w.<\/li>\n<li>Istniej\u0105ce wektory z tym samym identyfikatorem pliku s\u0105 usuwane w Supabase (o tym wi\u0119cej ni\u017cej).<\/li>\n<li>Plik zostaje pobrany, dokumenty s\u0105 zamieniane na tekst, a Google Sheets na CSV, aby uzyska\u0107 czyst\u0105 tre\u015b\u0107 tekstow\u0105.<\/li>\n<li>Tekst zostaje wstawiony do bazy wektorowej. Przy ma\u0142ych plikach dzielenie na fragmenty odpada; w pozosta\u0142ych przypadkach u\u017cywany jest prosty rekurencyjny text splitter.<\/li>\n<\/ul>\n<h2>Dwa szczeg\u00f3\u0142y, kt\u00f3re decyduj\u0105 o przydatno\u015bci w praktyce<\/h2>\n<p>Wpis podkre\u015bla dwa punkty, kt\u00f3rych brakuje w wielu tutorialach i kt\u00f3re prowadz\u0105 do problem\u00f3w dok\u0142adnie tam, gdzie robi si\u0119 powa\u017cnie.<\/p>\n<h3>Skalowalna pami\u0119\u0107 czatu<\/h3>\n<p>Historia rozmowy jest cz\u0119sto zapisywana lokalnie na instancji n8n, bo to najprostsze. W\u0142a\u015bnie to przeci\u0105\u017ca serwer wraz ze wzrostem u\u017cycia. Przeniesienie jej do bazy Postgres w Supabase to krok, kt\u00f3ry czyni agenta naprawd\u0119 odpornym na obci\u0105\u017cenie.<\/p>\n<h3>Usuwanie nieaktualnych wektor\u00f3w<\/h3>\n<p>Wa\u017cniejszy punkt dotyczy aktualizacji. Opcje wektorowe w n8n nie dzia\u0142aj\u0105 jak &#8220;upsert&#8221;: istniej\u0105cy wektor przy ponownym wstawieniu nie jest zast\u0119powany, lecz duplikowany, poniewa\u017c identyfikator pliku nie s\u0142u\u017cy jako identyfikator wektora. Je\u015bli aktualizuje si\u0119 ten sam plik wielokrotnie, zbieraj\u0105 si\u0119 duplikaty, a jako\u015b\u0107 odpowiedzi cierpi. Rozwi\u0105zanie w workflow: przed ka\u017cdym wstawieniem usuwane s\u0105 wszystkie wektory, kt\u00f3rych metadane nios\u0105 identyfikator aktualnego dokumentu Google Drive. Dopiero potem wstawiana jest nowa, zaktualizowana wersja. Dzi\u0119ki temu na ka\u017cdy dokument przypada dok\u0142adnie jeden aktualny rekord.<\/p>\n<h2>Ocena dla decydent\u00f3w<\/h2>\n<p>Pokazana konstrukcja jest wyra\u017anie pomy\u015blana jako solidny punkt wyj\u015bcia, a nie gotowe rozwi\u0105zanie docelowe. Rozszerzenia takie jak lepsze wyszukiwanie semantyczne czy dodatkowe wyszukiwanie po s\u0142owach kluczowych s\u0105 mo\u017cliwe, ale \u015bwiadomie pozostawione otwarte. Dla pierwszej, zbli\u017conej do produkcyjnej bazy wiedzy podej\u015bcie jest mimo to no\u015bne.<\/p>\n<p>Godna uwagi jest strona kosztowa: darmowy poziom Supabase wed\u0142ug filmu wystarcza na start, przej\u015bcie na plan p\u0142atny op\u0142aca si\u0119 dopiero przy skalowaniu. Kto i tak pracuje z n8n, mo\u017ce w kr\u00f3tkim czasie postawi\u0107 agenta na w\u0142asnych dokumentach, bez zlecania prac zewn\u0119trznemu deweloperowi.<\/p>\n<h2>Wniosek<\/h2>\n<p>Wpis pokazuje trze\u017awo i zrozumiale, jak wdro\u017cy\u0107 agenta RAG opartego na AI z n8n i Supabase bez programowania. W\u0142a\u015bciwa warto\u015b\u0107 nie le\u017cy w szybkim efekcie demonstracyjnym, lecz w dw\u00f3ch cz\u0119sto pomijanych szczeg\u00f3\u0142ach: skalowalnej pami\u0119ci czatu i konsekwentnym usuwaniu nieaktualnych wektor\u00f3w. Dok\u0142adnie te punkty decyduj\u0105, czy agent pozostanie u\u017cyteczny przy rosn\u0105cej bazie wiedzy, czy z czasem stanie si\u0119 zawodny. Kto chce uczyni\u0107 wewn\u0119trzne dokumenty przeszukiwalnymi, dostaje tu pragmatyczny schemat, kt\u00f3ry da si\u0119 rozbudowywa\u0107 krok po kroku.<\/p>\n<p><strong>\u0179r\u00f3d\u0142o:<\/strong> Cole Medin, &#8220;This RAG AI Agent with n8n + Supabase is the Real Deal&#8221;, <a href=\"https:\/\/www.youtube.com\/watch?v=PEI_ePNNfJQ\">https:\/\/www.youtube.com\/watch?v=PEI_ePNNfJQ<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak zbudowa\u0107 z n8n i Supabase gotowego do produkcji agenta RAG opartego na AI bez kodu: baza wiedzy, wyszukiwanie wektorowe i automatyczne aktualizacje dokument\u00f3w wyja\u015bnione.<\/p>\n","protected":false},"author":0,"featured_media":1506,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unkategorisiert"],"_links":{"self":[{"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/posts\/2281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/comments?post=2281"}],"version-history":[{"count":1,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/posts\/2281\/revisions"}],"predecessor-version":[{"id":2833,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/posts\/2281\/revisions\/2833"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/media\/1506"}],"wp:attachment":[{"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/media?parent=2281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/categories?post=2281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pletzenauer.com\/pl\/wp-json\/wp\/v2\/tags?post=2281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}