RAG Re-ranking

Avancé

Ceci est unInternal Wiki, AI RAGworkflow d'automatisation du domainecontenant 26 nœuds.Utilise principalement des nœuds comme Code, GoogleDrive, ManualTrigger, Agent, ExtractFromFile. Utiliser Supabase, OpenAI et le réorganiseur Cohere pour répondre aux questions à partir de documents

Prérequis
  • Informations d'identification Google Drive API
  • Clé API OpenAI
  • 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": "p8bHqYEvjtOrvz3q",
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": true
  },
  "name": "RAG Reranking",
  "tags": [],
  "nodes": [
    {
      "id": "d690d954-6291-4355-9b51-42fe9ab2791a",
      "name": "Télécharger le fichier",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -100,
        -320
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "list",
          "value": "16ahWlNwBvd53xFHA4UUh6EbkFd8ogxBv",
          "cachedResultUrl": "https://drive.google.com/file/d/16ahWlNwBvd53xFHA4UUh6EbkFd8ogxBv/view?usp=drivesdk",
          "cachedResultName": "Rules_of_Golf_Simplified.pdf"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "V2ewjiHO0o6xhQ2R",
          "name": "nateherk88@gmail.com"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "ad9a4d3c-ace1-428c-8957-edb456bf864f",
      "name": "Chargeur de données par défaut",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        460,
        -180
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "ruleNumber",
                "value": "={{ $json.ruleNumber }}"
              }
            ]
          }
        },
        "jsonData": "={{ $('Code').item.json.fullText }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f6d44c38-8cb4-43ad-8130-7ab8cd142c9a",
      "name": "Extraire du fichier",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        40,
        -320
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "dfc604ab-b7bd-4a08-b65d-f8fe2c3b5c13",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        180,
        -320
      ],
      "parameters": {
        "jsCode": "// n8n Code Node - Split Golf Rules\n// This code takes the input text and splits it into separate items for each rule\n\n// Get the input text from the first item\nconst inputText = $input.first().json.text;\n\n// Split the text by \"Rule\" pattern, keeping the \"Rule\" text with each section\nconst ruleSections = inputText.split(/(?=Rule \\d+)/);\n\n// Remove the first empty element (everything before the first \"Rule\")\nconst cleanedSections = ruleSections.filter(section => section.trim().startsWith('Rule'));\n\n// Create output items - one for each rule\nconst outputItems = cleanedSections.map((ruleText, index) => {\n  // Extract rule number from the text\n  const ruleMatch = ruleText.match(/Rule (\\d+)/);\n  const ruleNumber = ruleMatch ? ruleMatch[1] : (index + 1).toString();\n  \n  // Extract rule title (everything between \"Rule X –\" and the first numbered item)\n  const titleMatch = ruleText.match(/Rule \\d+ – (.+?)(?=\\n1\\.|\\n\\d+\\.)/);\n  const ruleTitle = titleMatch ? titleMatch[1].trim() : 'Unknown Rule';\n  \n  return {\n    json: {\n      ruleNumber: ruleNumber,\n      ruleTitle: ruleTitle,\n      fullText: ruleText.trim(),\n      originalIndex: index\n    }\n  };\n});\n\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "cc659be4-709e-4d59-a386-d7cc60166293",
      "name": "À la réception d'un message de chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -280,
        -1180
      ],
      "webhookId": "79772045-628b-4cf6-b2ec-cecceca9fe24",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "9f02235d-8c3f-4309-bd14-d4c6bcdfab11",
      "name": "GPT 4.1-mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -100,
        -1040
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "fpo6OUh9TcHg29jk",
          "name": "OpenRouter account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dad869f9-4c1d-44a4-b523-31f007efccc7",
      "name": "Réordonnanceur Cohere",
      "type": "@n8n/n8n-nodes-langchain.rerankerCohere",
      "position": [
        520,
        -1040
      ],
      "parameters": {},
      "credentials": {
        "cohereApi": {
          "id": "vCsqiDhFNdSGhDKu",
          "name": "CohereApi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "24cbdd3d-afee-46d2-83ef-888d432b4874",
      "name": "Téléverser vers Supabase",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        320,
        -320
      ],
      "parameters": {
        "mode": "insert",
        "options": {
          "queryName": "match_documents"
        },
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "credentials": {
        "supabaseApi": {
          "id": "r1eLu64ie9Tz6yOK",
          "name": "Demo 2.22.25"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f80184cb-fc7e-40d7-bf2d-a723350c9f0f",
      "name": "Magasin de vecteurs Supabase",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        360,
        -1180
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "topK": 20,
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "useReranker": true,
        "toolDescription": "Use this tool to search the database"
      },
      "credentials": {
        "supabaseApi": {
          "id": "r1eLu64ie9Tz6yOK",
          "name": "Demo 2.22.25"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "de08fce1-3db6-4452-a30a-27294328bdb9",
      "name": "GPT 4.1-mini1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        220,
        -600
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "fpo6OUh9TcHg29jk",
          "name": "OpenRouter account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2fbb1dbc-aeb3-4f5d-b1b1-f8947bec45e4",
      "name": "Réordonnanceur Cohere1",
      "type": "@n8n/n8n-nodes-langchain.rerankerCohere",
      "position": [
        780,
        -620
      ],
      "parameters": {},
      "credentials": {
        "cohereApi": {
          "id": "vCsqiDhFNdSGhDKu",
          "name": "CohereApi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "64140fce-9e7c-4cd2-a5ba-2bfb4c8bdaad",
      "name": "Embeddings OpenAI2",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        620,
        -620
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "WnxUhaEPMn5hIsEp",
          "name": "Demo 4/2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fe882466-73db-4141-8c70-baff299b4e1c",
      "name": "Magasin de vecteurs Supabase1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        620,
        -760
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "topK": 20,
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "ruleNumber",
                "value": "={{ $('Metadata Agent').item.json.output }}"
              }
            ]
          }
        },
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "useReranker": true,
        "toolDescription": "Use this tool to search the database"
      },
      "credentials": {
        "supabaseApi": {
          "id": "r1eLu64ie9Tz6yOK",
          "name": "Demo 2.22.25"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "12e4fe9d-d97d-4252-a235-66017fadad66",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -460
      ],
      "parameters": {
        "color": 2,
        "width": 1000,
        "height": 440,
        "content": "# Vectorize Document w/ Metadata\n(this code node is set up for the golf rules PDF specifically)"
      },
      "typeVersion": 1
    },
    {
      "id": "406521ff-0f01-4688-a352-62ae49d71ff6",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -1280
      ],
      "parameters": {
        "color": 4,
        "width": 620,
        "height": 380,
        "content": "# RAG Agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "11f6a7fd-b540-43d9-ad55-86c2874e8ddd",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        -1280
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 380,
        "content": "## Vector Store w/ Reranker\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d295d851-b64b-41c9-9289-f7c5c640b704",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        300,
        -180
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "WnxUhaEPMn5hIsEp",
          "name": "Demo 4/2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5b11e4ea-c497-4d18-8dfe-3dcdcadde1e6",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        360,
        -1040
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "WnxUhaEPMn5hIsEp",
          "name": "Demo 4/2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "62282da2-0dc5-4758-8182-13a7bf1afff9",
      "name": "Agent de métadonnées",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -220,
        -760
      ],
      "parameters": {
        "options": {
          "systemMessage": "=# Overview\nYour job is to understand the rule number that the human is requesting and output only the number.\n\n## Example\nInput - what's rule number 27?\nOutput - 27"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9fbd11cd-195d-4bbe-aa81-718c063d1133",
      "name": "Agent RAG",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -80,
        -1180
      ],
      "parameters": {
        "options": {
          "systemMessage": "=# Overview\nYou are an AI agent who is an expert at the rules of golf. You will receive a question from the human, and you must use your tool called \"Supabase Vector Store\" in order to retrieve information from the database to make sure you are answering the question accurately. "
        }
      },
      "typeVersion": 2
    },
    {
      "id": "150a92c9-fdb4-45e0-a838-45364dd6140b",
      "name": "Agent RAG 2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        200,
        -760
      ],
      "parameters": {
        "text": "={{ $('When chat message received').item.json.chatInput }}",
        "options": {
          "systemMessage": "=# Overview\nYou are an AI agent who is an expert at the rules of golf. You will receive a question from the human, and you must use your tool called \"Supabase Vector Store\" in order to retrieve information from the database to make sure you are answering the question accurately. "
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "e149b963-2f39-472b-962a-12bdd270e63b",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        120,
        -880
      ],
      "parameters": {
        "color": 4,
        "width": 440,
        "height": 400,
        "content": "# RAG Agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ede1b0d8-d402-4fa5-abe0-8ee4169be45b",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        -880
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 400,
        "content": "## Vector Store w/ Reranker & Metadata\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c56cce9d-2d8c-4942-94fa-a8d62e062842",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -880
      ],
      "parameters": {
        "color": 6,
        "width": 440,
        "height": 400,
        "content": "# Metadata Agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7e6dd534-9f8a-42c2-bac0-0bb0e4fa99e6",
      "name": "Déclencheur manuel",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -240,
        -320
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "85ee82ce-f0b2-49f0-852e-9b888b9235a9",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -1280
      ],
      "parameters": {
        "width": 700,
        "height": 800,
        "content": "# 🛠️ Setup Guide  \n**Author:** [Nate Herk](https://www.youtube.com/@nateherk)\n\nFollow the steps below to get your Retrieval-Augmented Generation (RAG) workflow up and running:\n\n### ✅ Step 1: Connect Your [Supabase](https://supabase.com/) Vector Store  \nEnsure your Supabase instance is ready and accessible. This will store your embedded documents with metadata.\nHere is a [video tutorial](https://youtu.be/JjBofKJnYIU) on setting that up.\n\n### ✅ Step 2: Connect Your [OpenAI](https://platform.openai.com/account/api-keys) Embeddings  \nUse the `text-embedding-3-small` or similar model for embedding your documents. Make sure your API key is active.\n\n### ✅ Step 3: Connect Your [OpenAI API Key](https://platform.openai.com/account/api-keys)  \nThis powers your embedding generation model. Add it via the HTTP Request node or a credential.\n\n### ✅ Step 4: Add Your [OpenRouter](https://openrouter.ai/) API Key  \nUse this for your main RAG agent—add your key via HTTP request or credential node.\n\n### ✅ Step 5: Connect a [Cohere](https://dashboard.cohere.com/api-keys) Re-Ranker  \nThe re-ranker improves answer quality. Add your API key for better relevance ranking on retrieved documents.\n\n### ✅ Step 6: Vectorize Documents with Metadata  \nEnsure your data ingestion process tags documents with meaningful metadata before vectorization. This helps with structured retrieval.\n\n### 💬 Final Step: Start Chatting  \nPrompt your agent and test the RAG flow end-to-end—watch it pull context-rich answers from your vector store.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "80eccd78-53ac-4cca-aedd-63ddf77ff7af",
  "connections": {
    "dfc604ab-b7bd-4a08-b65d-f8fe2c3b5c13": {
      "main": [
        [
          {
            "node": "24cbdd3d-afee-46d2-83ef-888d432b4874",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f02235d-8c3f-4309-bd14-d4c6bcdfab11": {
      "ai_languageModel": [
        [
          {
            "node": "9fbd11cd-195d-4bbe-aa81-718c063d1133",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "d690d954-6291-4355-9b51-42fe9ab2791a": {
      "main": [
        [
          {
            "node": "f6d44c38-8cb4-43ad-8130-7ab8cd142c9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "de08fce1-3db6-4452-a30a-27294328bdb9": {
      "ai_languageModel": [
        [
          {
            "node": "150a92c9-fdb4-45e0-a838-45364dd6140b",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "62282da2-0dc5-4758-8182-13a7bf1afff9",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "7e6dd534-9f8a-42c2-bac0-0bb0e4fa99e6": {
      "main": [
        [
          {
            "node": "d690d954-6291-4355-9b51-42fe9ab2791a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "62282da2-0dc5-4758-8182-13a7bf1afff9": {
      "main": [
        [
          {
            "node": "150a92c9-fdb4-45e0-a838-45364dd6140b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dad869f9-4c1d-44a4-b523-31f007efccc7": {
      "ai_reranker": [
        [
          {
            "node": "f80184cb-fc7e-40d7-bf2d-a723350c9f0f",
            "type": "ai_reranker",
            "index": 0
          }
        ]
      ]
    },
    "2fbb1dbc-aeb3-4f5d-b1b1-f8947bec45e4": {
      "ai_reranker": [
        [
          {
            "node": "fe882466-73db-4141-8c70-baff299b4e1c",
            "type": "ai_reranker",
            "index": 0
          }
        ]
      ]
    },
    "5b11e4ea-c497-4d18-8dfe-3dcdcadde1e6": {
      "ai_embedding": [
        [
          {
            "node": "f80184cb-fc7e-40d7-bf2d-a723350c9f0f",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "f6d44c38-8cb4-43ad-8130-7ab8cd142c9a": {
      "main": [
        [
          {
            "node": "dfc604ab-b7bd-4a08-b65d-f8fe2c3b5c13",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d295d851-b64b-41c9-9289-f7c5c640b704": {
      "ai_embedding": [
        [
          {
            "node": "24cbdd3d-afee-46d2-83ef-888d432b4874",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "64140fce-9e7c-4cd2-a5ba-2bfb4c8bdaad": {
      "ai_embedding": [
        [
          {
            "node": "fe882466-73db-4141-8c70-baff299b4e1c",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "ad9a4d3c-ace1-428c-8957-edb456bf864f": {
      "ai_document": [
        [
          {
            "node": "24cbdd3d-afee-46d2-83ef-888d432b4874",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "f80184cb-fc7e-40d7-bf2d-a723350c9f0f": {
      "ai_tool": [
        [
          {
            "node": "9fbd11cd-195d-4bbe-aa81-718c063d1133",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "fe882466-73db-4141-8c70-baff299b4e1c": {
      "ai_tool": [
        [
          {
            "node": "150a92c9-fdb4-45e0-a838-45364dd6140b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "cc659be4-709e-4d59-a386-d7cc60166293": {
      "main": [
        [
          {
            "node": "9fbd11cd-195d-4bbe-aa81-718c063d1133",
            "type": "main",
            "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é - Wiki interne, 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œuds26
Catégorie2
Types de nœuds12
Description de la difficulté

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

Auteur
Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34