{"id":2099,"date":"2024-09-04T10:30:00","date_gmt":"2024-09-04T08:30:00","guid":{"rendered":"https:\/\/pletzenauer.com\/?p=2099"},"modified":"2026-08-05T17:22:33","modified_gmt":"2026-08-05T15:22:33","slug":"agent-rag-sans-code-n8n-supabase","status":"publish","type":"post","link":"https:\/\/pletzenauer.com\/fr\/2024\/09\/04\/agent-rag-sans-code-n8n-supabase\/","title":{"rendered":"Agent RAG sans code : combiner n8n et Supabase en production"},"content":{"rendered":"<p>La plupart des tutoriels RAG que l&#8217;on trouve en ligne montrent toujours le m\u00eame jouet : \u00ab\u00a0discutez avec votre PDF\u00a0\u00bb. Ce qui y est rarement dit : ces d\u00e9monstrations sont loin d&#8217;un usage productif. D\u00e8s que la base de connaissances grandit, que des documents sont mis \u00e0 jour ou que des utilisateurs posent des questions que personne n&#8217;a test\u00e9es, les probl\u00e8mes commencent. C&#8217;est pr\u00e9cis\u00e9ment l\u00e0 qu&#8217;intervient l&#8217;approche d\u00e9crite ici.<\/p>\n<p>Dans sa vid\u00e9o, Cole Medin montre comment, avec les deux outils que sont <strong>n8n<\/strong> (automatisation de flux de travail, comparable \u00e0 Make.com ou Zapier) et <strong>Supabase<\/strong> (plateforme de base de donn\u00e9es avec prise en charge vectorielle via PG Vector), on peut construire un agent IA RAG plus proche de la pratique que beaucoup d&#8217;autres guides. La promesse : pas de code, un effort raisonnable, et une architecture qui grandit avec la base de connaissances. Pour les d\u00e9cideurs de PME, l&#8217;int\u00e9r\u00eat tient surtout \u00e0 ceci : cela permet de rendre consultables des documents internes, des comptes rendus ou des manuels, sans mobiliser une \u00e9quipe de d\u00e9veloppement.<\/p>\n<div style=\"background:#FFE6D6;border-left:4px solid #F26A21;padding:16px 20px;border-radius:6px;margin:24px 0;\">\n<strong>L&#8217;essentiel en bref<\/strong><\/p>\n<ul>\n<li>Le RAG (Retrieval Augmented Generation) relie un mod\u00e8le de langue \u00e0 une base de connaissances propre, de sorte que l&#8217;agent acc\u00e8de \u00e0 vos documents et non uniquement \u00e0 son savoir d&#8217;entra\u00eenement.<\/li>\n<li>n8n prend en charge l&#8217;automatisation, Supabase sert \u00e0 la fois de m\u00e9moire de conversation et de base de donn\u00e9es vectorielle.<\/li>\n<li>L&#8217;ensemble du montage fonctionne sans programmation et, selon la vid\u00e9o, se met en place en moins de 15 minutes.<\/li>\n<li>Deux d\u00e9tails distinguent cette approche des tutoriels superficiels : un stockage \u00e9volutif de l&#8217;historique de conversation et la suppression des vecteurs obsol\u00e8tes, afin d&#8217;\u00e9viter les doublons.<\/li>\n<li>Le palier gratuit de Supabase suffit largement pour d\u00e9marrer, selon la vid\u00e9o.<\/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=\"Zwei-Spalten-Vergleich: links typische RAG-Tutorials mit Demo-Fokus und lokalem Speicher, rechts der praxistaugliche Ansatz mit Supabase-Ged\u00e4chtnis und L\u00f6schen veralteter Vektoren.\" style=\"width:100%;height:auto;border-radius:8px;border:1px solid #E5E2DE;\"\/><figcaption style=\"font-size:0.9em;color:#6b6b6b;margin-top:8px;\">Deux d\u00e9tails souvent n\u00e9glig\u00e9s d\u00e9terminent si un agent RAG reste utilisable \u00e0 mesure que la base de connaissances grandit.<\/figcaption><\/figure>\n<h2>Ce que l&#8217;agent fait concr\u00e8tement<\/h2>\n<p>Le fonctionnement est montr\u00e9 dans la vid\u00e9o \u00e0 partir d&#8217;un exemple simple. Au d\u00e9part, la base de connaissances est vide, la table correspondante dans Supabase ne contient aucune entr\u00e9e. \u00c0 une question test sur les t\u00e2ches issues d&#8217;une r\u00e9union, l&#8217;agent ne peut logiquement pas r\u00e9pondre.<\/p>\n<p>Ensuite, un document contenant des notes de r\u00e9union est d\u00e9pos\u00e9 sous forme de Google Doc dans un dossier surveill\u00e9. En une minute environ, un workflow n8n s&#8217;ex\u00e9cute en arri\u00e8re-plan, traite le fichier et l&#8217;ins\u00e8re dans la base de connaissances. Un nouvel enregistrement appara\u00eet alors dans Supabase avec le contenu de la page, les m\u00e9tadonn\u00e9es (dont l&#8217;ID du fichier Google Drive) et ce que l&#8217;on appelle le vecteur d&#8217;embedding. Si l&#8217;on repose la m\u00eame question, l&#8217;agent fournit \u00e0 pr\u00e9sent la bonne r\u00e9ponse tir\u00e9e du document. Les mises \u00e0 jour du fichier sont \u00e9galement d\u00e9tect\u00e9es et reprises.<\/p>\n<h2>Vue d&#8217;ensemble du montage<\/h2>\n<p>Le workflow comprend deux parties : l&#8217;agent conversationnel proprement dit et une cha\u00eene distincte qui int\u00e8gre automatiquement les documents dans la base de connaissances. Un mod\u00e8le JSON pr\u00eat \u00e0 l&#8217;emploi peut, selon la vid\u00e9o, \u00eatre t\u00e9l\u00e9charg\u00e9 depuis un d\u00e9p\u00f4t GitHub et charg\u00e9 dans sa propre instance n8n via \u00ab\u00a0Import from file\u00a0\u00bb. Il ne reste ensuite qu&#8217;\u00e0 compl\u00e9ter ses propres identifiants et le dossier souhait\u00e9.<\/p>\n<h3>Pr\u00e9parer Supabase<\/h3>\n<p>Supabase se met en place avec un compte GitHub. Deux sections des param\u00e8tres du projet fournissent les identifiants n\u00e9cessaires :<\/p>\n<ul>\n<li><strong>Database\u00a0:<\/strong> h\u00f4te, nom de la base, port, utilisateur et mot de passe pour la connexion Postgres. Ces donn\u00e9es servent \u00e0 la m\u00e9moire de conversation.<\/li>\n<li><strong>API\u00a0:<\/strong> l&#8217;URL propre au projet ainsi que le Service-Role-Secret. Ces donn\u00e9es sont n\u00e9cessaires pour la base de donn\u00e9es vectorielle.<\/li>\n<\/ul>\n<p>Pour la recherche vectorielle, n8n met \u00e0 disposition du code SQL pr\u00eat \u00e0 l&#8217;emploi dans sa documentation. Celui-ci est ex\u00e9cut\u00e9 une seule fois dans l&#8217;\u00e9diteur SQL de Supabase et cr\u00e9e automatiquement l&#8217;extension PG Vector, la table des documents et la fonction de correspondance pour le RAG. Aucun code propre n&#8217;est n\u00e9cessaire.<\/p>\n<h3>L&#8217;agent conversationnel<\/h3>\n<p>L&#8217;agent est lanc\u00e9 par un d\u00e9clencheur \u00ab\u00a0When a chat message is received\u00a0\u00bb. Celui-ci fournit en m\u00eame temps une fen\u00eatre de chat directement dans n8n, avec laquelle l&#8217;agent peut \u00eatre test\u00e9 sans d\u00e9ploiement. Au besoin, la m\u00eame interface peut \u00eatre int\u00e9gr\u00e9e sur un site web au moyen d&#8217;un code d&#8217;int\u00e9gration pr\u00eat \u00e0 l&#8217;emploi. Trois briques sont raccord\u00e9es \u00e0 l&#8217;agent :<\/p>\n<ul>\n<li><strong>Mod\u00e8le de chat\u00a0:<\/strong> dans l&#8217;exemple GPT-4o mini, connect\u00e9 via la cl\u00e9 API OpenAI. Anthropic est \u00e9galement possible.<\/li>\n<li><strong>M\u00e9moire de conversation\u00a0:<\/strong> ici, Postgres via Supabase est d\u00e9lib\u00e9r\u00e9ment utilis\u00e9 plut\u00f4t que la m\u00e9moire \u00e0 fen\u00eatre locale souvent recommand\u00e9e. Le stockage local charge le serveur n8n et passe mal \u00e0 l&#8217;\u00e9chelle. n8n cr\u00e9e lui-m\u00eame la table n\u00e9cessaire au besoin.<\/li>\n<li><strong>Outil RAG\u00a0:<\/strong> l&#8217;outil \u00ab\u00a0retrieve documents\u00a0\u00bb avec Supabase comme stockage vectoriel, configur\u00e9 via le nom de table et la fonction de requ\u00eate.<\/li>\n<\/ul>\n<h3>Int\u00e9grer les documents automatiquement<\/h3>\n<p>La deuxi\u00e8me partie du workflow maintient la base de connaissances \u00e0 jour. Un d\u00e9clencheur Google Drive v\u00e9rifie r\u00e9guli\u00e8rement la pr\u00e9sence de fichiers nouveaux ou modifi\u00e9s dans un dossier d\u00e9fini. La suite du d\u00e9roulement :<\/p>\n<ul>\n<li>L&#8217;ID du fichier est extrait et transmis aux \u00e9tapes suivantes.<\/li>\n<li>Les vecteurs existants portant le m\u00eame ID de fichier sont supprim\u00e9s dans Supabase (voir plus bas).<\/li>\n<li>Le fichier est t\u00e9l\u00e9charg\u00e9, les documents sont convertis en texte et les Google Sheets en CSV, afin d&#8217;obtenir le contenu textuel brut.<\/li>\n<li>Le texte est ins\u00e9r\u00e9 dans la base de donn\u00e9es vectorielle. Pour les petits fichiers, le d\u00e9coupage en sections n&#8217;a pas lieu\u00a0; sinon, un simple d\u00e9coupeur de texte r\u00e9cursif est utilis\u00e9.<\/li>\n<\/ul>\n<h2>Deux d\u00e9tails qui d\u00e9cident de l&#8217;aptitude \u00e0 la pratique<\/h2>\n<p>L&#8217;article met en avant deux points absents de beaucoup de tutoriels et qui posent probl\u00e8me pr\u00e9cis\u00e9ment l\u00e0 o\u00f9 les choses deviennent s\u00e9rieuses.<\/p>\n<h3>M\u00e9moire de conversation \u00e9volutive<\/h3>\n<p>L&#8217;historique d&#8217;un \u00e9change est souvent stock\u00e9 localement sur l&#8217;instance n8n, parce que c&#8217;est le plus simple. C&#8217;est exactement cela qui sature le serveur \u00e0 mesure que l&#8217;usage augmente. L&#8217;externalisation vers une base Postgres chez Supabase est l&#8217;\u00e9tape qui rend l&#8217;agent r\u00e9ellement robuste.<\/p>\n<h3>Supprimer les vecteurs obsol\u00e8tes<\/h3>\n<p>Le point le plus important concerne les mises \u00e0 jour. Les options vectorielles dans n8n ne fonctionnent pas comme un \u00ab\u00a0upsert\u00a0\u00bb : lors d&#8217;une nouvelle insertion, un vecteur existant n&#8217;est pas remplac\u00e9 mais dupliqu\u00e9, car l&#8217;ID du fichier ne sert pas d&#8217;ID de vecteur. Si l&#8217;on met \u00e0 jour plusieurs fois le m\u00eame fichier, les doublons s&#8217;accumulent et la qualit\u00e9 des r\u00e9ponses en souffre. La solution retenue dans le workflow : avant chaque insertion, tous les vecteurs dont les m\u00e9tadonn\u00e9es portent l&#8217;ID du document Google Drive courant sont supprim\u00e9s. Ce n&#8217;est qu&#8217;ensuite que la nouvelle version, mise \u00e0 jour, est ins\u00e9r\u00e9e. Ainsi, il reste exactement un enregistrement \u00e0 jour par document.<\/p>\n<h2>Ce qu&#8217;il faut en retenir comme d\u00e9cideur<\/h2>\n<p>Le montage pr\u00e9sent\u00e9 se veut explicitement un point de d\u00e9part solide, pas une solution finie. Des extensions comme une meilleure recherche s\u00e9mantique ou une recherche par mots-cl\u00e9s suppl\u00e9mentaire sont possibles, mais sont d\u00e9lib\u00e9r\u00e9ment laiss\u00e9es de c\u00f4t\u00e9. Pour une premi\u00e8re base de connaissances proche de la production, l&#8217;approche tient n\u00e9anmoins la route.<\/p>\n<p>Le volet co\u00fbts m\u00e9rite d&#8217;\u00eatre not\u00e9 : le palier gratuit de Supabase suffit pour d\u00e9marrer, selon la vid\u00e9o, et le passage au plan payant ne devient utile qu&#8217;au moment de la mont\u00e9e en charge. Qui travaille de toute fa\u00e7on avec n8n peut mettre en place l&#8217;agent avec ses propres documents en peu de temps, sans commander de d\u00e9veloppement externe.<\/p>\n<h2>Conclusion<\/h2>\n<p>L&#8217;article montre sobrement et de fa\u00e7on compr\u00e9hensible comment mettre en \u0153uvre un agent IA RAG avec n8n et Supabase sans programmation. La v\u00e9ritable valeur ne r\u00e9side pas dans l&#8217;effet de d\u00e9monstration rapide, mais dans deux d\u00e9tails souvent n\u00e9glig\u00e9s : une m\u00e9moire de conversation \u00e9volutive et la suppression syst\u00e9matique des vecteurs obsol\u00e8tes. Ce sont pr\u00e9cis\u00e9ment ces points qui d\u00e9cident si un agent reste utilisable quand la base de connaissances grandit, ou s&#8217;il devient peu fiable avec le temps. Qui veut rendre consultables ses documents internes trouvera ici un plan pragmatique, extensible \u00e9tape par \u00e9tape.<\/p>\n<p><strong>Source\u00a0:<\/strong> Cole Medin, \u00ab\u00a0This RAG AI Agent with n8n + Supabase is the Real Deal\u00a0\u00bb, <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>Comment construire avec n8n et Supabase un agent IA RAG pr\u00eat pour la production sans code : base de connaissances, recherche vectorielle et mise \u00e0 jour automatique des documents.<\/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-2099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unkategorisiert"],"_links":{"self":[{"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/posts\/2099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/comments?post=2099"}],"version-history":[{"count":1,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/posts\/2099\/revisions"}],"predecessor-version":[{"id":2502,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/posts\/2099\/revisions\/2502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/media\/1506"}],"wp:attachment":[{"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/media?parent=2099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/categories?post=2099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pletzenauer.com\/fr\/wp-json\/wp\/v2\/tags?post=2099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}