Construire un chatbot RAG pour votre site avec Supabase

Avancé

Ceci est unSupport Chatbot, AI RAGworkflow d'automatisation du domainecontenant 18 nœuds.Utilise principalement des nœuds comme FormTrigger, HtmlExtract, HttpRequest, ConvertToFile, Agent. Utiliser RAG, OpenAI GPT-4o-mini et la base de données vectorielle Supabase pour construire un chatbot de questions-réponses pour le site web

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
  • Informations de connexion à la base de données PostgreSQL
  • URL et Clé API Supabase
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "klsAKNm0Q07J8RXY",
  "meta": {
    "instanceId": "fcb622cbd5234c565b9b78babeaf0ea2455df9d2aad0d1adff7c1ef99583e685",
    "templateCredsSetupCompleted": true
  },
  "name": "Build RAG Chatbot for Your Website Using Supabase",
  "tags": [],
  "nodes": [
    {
      "id": "c2c34da8-27e8-4881-a3fd-3b5f6987e0bf",
      "name": "À la réception d'un message chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        500,
        -580
      ],
      "webhookId": "dec328cc-f47e-4727-b1c5-7370be86a958",
      "parameters": {
        "mode": "webhook",
        "public": true,
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "31f5d600-1694-4d50-a581-0880f65a7755",
      "name": "Extraire HTML",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        -460,
        -540
      ],
      "parameters": {
        "options": {},
        "extractionValues": {
          "values": [
            {
              "key": "title",
              "cssSelector": "title, h1"
            },
            {
              "key": "content",
              "cssSelector": "p, article, .content, .post-content, main"
            },
            {
              "key": "meta_description",
              "attribute": "content",
              "cssSelector": "meta[name='description']",
              "returnValue": "attribute"
            },
            {
              "key": "links",
              "attribute": "href",
              "cssSelector": "a[href]",
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d48d0d67-cfb6-4058-96e2-4198b40650bc",
      "name": "Chargeur de données par défaut",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        20,
        -360
      ],
      "parameters": {
        "loader": "jsonLoader",
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "website_url",
                "value": "={{ $('Enter Website Url').item.json['Website Url'] }}"
              }
            ]
          }
        },
        "dataType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "32b79786-e8d1-4083-80e9-4d2eada2c46b",
      "name": "Séparateur de texte récursif",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        120,
        -160
      ],
      "parameters": {
        "options": {},
        "chunkSize": 3000,
        "chunkOverlap": 500
      },
      "typeVersion": 1
    },
    {
      "id": "b7541584-131f-4868-b8dd-053ab509ab1b",
      "name": "Magasin vectoriel Supabase",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -40,
        -540
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "embeddingBatchSize": 100
      },
      "credentials": {
        "supabaseApi": {
          "id": "E3H0gensGX1OYVwU",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "7b923d0f-c803-4b3c-afd8-ee680793c955",
      "name": "Saisir l'URL du site web",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -820,
        -540
      ],
      "webhookId": "b02a5096-11b0-4677-acfa-fcac5722498c",
      "parameters": {
        "options": {},
        "formTitle": "Form",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Website Url",
              "placeholder": "Enter Website Url"
            }
          ]
        },
        "formDescription": "Enter Website Url"
      },
      "typeVersion": 2.2
    },
    {
      "id": "9e961fc5-b937-4f0e-b9f5-8ada4f3598f5",
      "name": "Note adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        -680
      ],
      "parameters": {
        "color": 3,
        "width": 520,
        "height": 100,
        "content": "## Generating Embeddings from Website Content"
      },
      "typeVersion": 1
    },
    {
      "id": "7f4feec8-62a8-47a0-a8d6-9bce01261b1a",
      "name": "Note adhésive 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        -680
      ],
      "parameters": {
        "width": 300,
        "height": 80,
        "content": "## User-Initiated Question"
      },
      "typeVersion": 1
    },
    {
      "id": "1c11199e-d217-4f2d-8afe-913f902ef47c",
      "name": "Note adhésive 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        -680
      ],
      "parameters": {
        "color": 3,
        "width": 540,
        "height": 80,
        "content": "## Vector-Based Answer Retrieval"
      },
      "typeVersion": 1
    },
    {
      "id": "ddb37d99-4e8d-4eef-83da-6b3088360062",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -840,
        -680
      ],
      "parameters": {
        "width": 640,
        "height": 100,
        "content": "## Website Data Extraction\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eeffcae9-2e9c-48f2-ad13-2b75b7218fe2",
      "name": "Récupération des données du site web",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 3,
      "position": [
        -640,
        -540
      ],
      "parameters": {
        "url": "={{ $json['Website Url'] }}",
        "options": {
          "timeout": 30000,
          "redirect": {
            "redirect": {
              "maxRedirects": 5
            }
          }
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.1
    },
    {
      "id": "df8e6032-41f2-4f95-8906-7150ce565d8a",
      "name": "Convertir en fichier",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        -320,
        -540
      ],
      "parameters": {
        "options": {},
        "operation": "toJson"
      },
      "typeVersion": 1.1
    },
    {
      "id": "697c29c6-6bcd-4748-a874-3c754f9b034e",
      "name": "Embellissements Cohere",
      "type": "@n8n/n8n-nodes-langchain.embeddingsCohere",
      "position": [
        -100,
        -360
      ],
      "parameters": {},
      "credentials": {
        "cohereApi": {
          "id": "5VhbvbDzLliD5nO9",
          "name": "CohereApi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d8d3a79a-1ac2-42dd-b383-e39bbcbded75",
      "name": "Récupérer question & réponse",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        820,
        -580
      ],
      "parameters": {
        "options": {
          "systemMessage": "=# Overview  \nYou are an AI agent that responds strictly using information from stored document embeddings in a supabase vector store.  \n\n## Context  \n- The agent is designed to provide accurate, document-based answers.  \n- It must avoid using external knowledge or assumptions.  \n\n## Instructions  \n1. Analyze the user's question.  \n2. Retrieve relevant content from the document embeddings using supabase.  \n3. Construct a response only from the matching document chunks.\n## Tools  \n- Vector store containing embedded documents\n- Embeddings Cohere  \n\n## SOP (Standard Operating Procedure)  \n1. Receive user query.  \n2. Search the vector store for relevant document chunks.  \n3. Extract and synthesize an answer using only that content.  \n4. If no matches, issue fallback message.  \n\n## Final Notes  \n- Do not rely on prior training or external facts.  \n- The response must remain strictly grounded in the documents.  "
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "65d51d86-cae3-4cdb-9d95-025962195953",
      "name": "Données du magasin vectoriel Supabase",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        1000,
        -360
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "topK": null,
        "options": {},
        "toolName": "documents_knowledge_base",
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "work with documents data in Supabase vector store",
        "includeDocumentMetadata": false
      },
      "credentials": {
        "supabaseApi": {
          "id": "E3H0gensGX1OYVwU",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "6ef28803-e21f-4733-a6a9-d894b97dbb35",
      "name": "Embellissements avec Cohere",
      "type": "@n8n/n8n-nodes-langchain.embeddingsCohere",
      "position": [
        1020,
        -140
      ],
      "parameters": {},
      "credentials": {
        "cohereApi": {
          "id": "5VhbvbDzLliD5nO9",
          "name": "CohereApi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4796d1f3-ab76-4ed4-86b3-96bca2aae4e9",
      "name": "Mémoire de chat",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        900,
        -320
      ],
      "parameters": {
        "tableName": "chat_memory",
        "contextWindowLength": 3
      },
      "credentials": {
        "postgres": {
          "id": "lf7D6rk7s95k7I12",
          "name": "Postgres account 2"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2ce21a19-e586-4cc6-88ed-b1957b04a06a",
      "name": "Modèle de chat OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        760,
        -340
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "FWzCPYhm2kVkOjE5",
          "name": "OpenAi account 7"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1fe65722-2127-4e4c-8af6-d8c967259653",
  "connections": {
    "4796d1f3-ab76-4ed4-86b3-96bca2aae4e9": {
      "ai_memory": [
        [
          {
            "node": "d8d3a79a-1ac2-42dd-b383-e39bbcbded75",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "31f5d600-1694-4d50-a581-0880f65a7755": {
      "main": [
        [
          {
            "node": "df8e6032-41f2-4f95-8906-7150ce565d8a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "df8e6032-41f2-4f95-8906-7150ce565d8a": {
      "main": [
        [
          {
            "node": "b7541584-131f-4868-b8dd-053ab509ab1b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "697c29c6-6bcd-4748-a874-3c754f9b034e": {
      "ai_embedding": [
        [
          {
            "node": "b7541584-131f-4868-b8dd-053ab509ab1b",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "7b923d0f-c803-4b3c-afd8-ee680793c955": {
      "main": [
        [
          {
            "node": "eeffcae9-2e9c-48f2-ad13-2b75b7218fe2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2ce21a19-e586-4cc6-88ed-b1957b04a06a": {
      "ai_languageModel": [
        [
          {
            "node": "d8d3a79a-1ac2-42dd-b383-e39bbcbded75",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "d48d0d67-cfb6-4058-96e2-4198b40650bc": {
      "ai_document": [
        [
          {
            "node": "b7541584-131f-4868-b8dd-053ab509ab1b",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "6ef28803-e21f-4733-a6a9-d894b97dbb35": {
      "ai_embedding": [
        [
          {
            "node": "65d51d86-cae3-4cdb-9d95-025962195953",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "eeffcae9-2e9c-48f2-ad13-2b75b7218fe2": {
      "main": [
        [
          {
            "node": "31f5d600-1694-4d50-a581-0880f65a7755",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c2c34da8-27e8-4881-a3fd-3b5f6987e0bf": {
      "main": [
        [
          {
            "node": "d8d3a79a-1ac2-42dd-b383-e39bbcbded75",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "65d51d86-cae3-4cdb-9d95-025962195953": {
      "ai_tool": [
        [
          {
            "node": "d8d3a79a-1ac2-42dd-b383-e39bbcbded75",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "32b79786-e8d1-4083-80e9-4d2eada2c46b": {
      "ai_textSplitter": [
        [
          {
            "node": "d48d0d67-cfb6-4058-96e2-4198b40650bc",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Chatbot de support, RAG IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds18
Catégorie2
Types de nœuds13
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
InfyOm Technologies

InfyOm Technologies

@infyom

We are an AI Automation Agency focusing on various AI Automation Services like, workflow automation, shopify automation, chatbot developerment, custom ai agent development and more.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34