Construire un assistant local IA pour les compétitions Kaggle avec Qdrant RAG et Ollama
Ceci est unEngineering, AIworkflow d'automatisation du domainecontenant 23 nœuds.Utilise principalement des nœuds comme Set, Merge, Switch, Markdown, ReadWriteFile, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Construire un assistant local pour les concours Kaggle d'IA avec Qdrant RAG et Ollama
- •Informations de connexion au serveur Qdrant
Nœuds utilisés (23)
Catégorie
{
"meta": {
"instanceId": "13a0050774c7f2acc1474b06f046215039c01087a78215e5a78461e6efc6cb1a",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "70b42807-a6c6-4159-b278-e77311727798",
"name": "Déclencheur de Fichier Local",
"type": "n8n-nodes-base.localFileTrigger",
"position": [
-3060,
-40
],
"parameters": {
"path": "C:\\\\ipynb\\\\loadme",
"events": [
"add"
],
"options": {
"usePolling": true,
"followSymlinks": true,
"awaitWriteFinish": true
},
"triggerOn": "folder"
},
"typeVersion": 1
},
{
"id": "893f1157-6c00-4b8e-b726-462ab371fadf",
"name": "Chargeur de Données par Défaut",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
-1500,
300
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "9a9bfcee-1966-415c-a59f-552e1f35aae9",
"name": "Séparateur de Texte Caractère Récursif",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
-1360,
440
],
"parameters": {
"options": {},
"chunkSize": 40,
"chunkOverlap": 10
},
"typeVersion": 1
},
{
"id": "a7c971a5-39ac-4715-9e1b-a56af9713b06",
"name": "Paramètres",
"type": "n8n-nodes-base.set",
"position": [
-3040,
180
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "6b7d26f9-3a38-417e-85d0-4e9d42476465",
"name": "path",
"type": "string",
"value": "=C:\\\\ipynb\\\\loadme\\\\"
},
{
"id": "bb4471c7-d894-4739-99a6-4be247794ffa",
"name": "filename",
"type": "string",
"value": "={{ $json.path.split('\\\\').last() }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "6384792b-de76-4e43-b26e-12c2d15c2dd2",
"name": "Fusion",
"type": "n8n-nodes-base.merge",
"position": [
-1740,
260
],
"parameters": {},
"typeVersion": 2.1
},
{
"id": "db4de019-755e-4b91-ac70-f30825f14033",
"name": "Obtenir le Type de Fichier",
"type": "n8n-nodes-base.switch",
"position": [
-2620,
80
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "html",
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "75188d2f-4bea-44ea-a579-9b9a1bd1ea93",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.fileType }}",
"rightValue": "html"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3
},
{
"id": "4c56a14c-6c56-4cc1-b7fb-a09caa3d646d",
"name": "Importer un Fichier",
"type": "n8n-nodes-base.readWriteFile",
"position": [
-2840,
80
],
"parameters": {
"options": {},
"fileSelector": "={{ $json.path }}{{ $json.filename }}"
},
"typeVersion": 1
},
{
"id": "c14a711f-29ab-475f-aeff-3a070c797537",
"name": "Extraire du TEXTE",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-2440,
80
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "22ff782e-c612-4928-9033-111cf516d07e",
"name": "Chaîne de Synthétisation",
"type": "@n8n/n8n-nodes-langchain.chainSummarization",
"position": [
-2040,
-20
],
"parameters": {
"options": {
"summarizationMethodAndPrompts": {
"values": {
"summarizationMethod": "refine"
}
}
},
"chunkSize": 4000
},
"typeVersion": 2
},
{
"id": "70fa17a5-3ec9-4a81-86bc-503581505ea1",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3100,
-180
],
"parameters": {
"color": 7,
"width": 995,
"height": 554,
"content": "## Step 1. Watch Folder and Import New Documents\n[Read more about Local File Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.localfiletrigger)\n\nWith n8n's local file trigger, we're able to trigger the workflow when files are created in our target folder. We still have to import them however as the trigger will only give the file's path. The \"Extract From\" node is used to get at the file's contents."
},
"typeVersion": 1
},
{
"id": "a51cc8ac-e310-4825-adc6-fc57c68c09aa",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2060,
-200
],
"parameters": {
"color": 7,
"width": 824,
"height": 770,
"content": "## Step 2. Summarise and Vectorise Document Contents\n[Learn more about using the Qdrant VectorStore](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreqdrant)\n\nCapturing the document into our vector store is intended for a technique we'll use later known as Retrieval Augumented Generation or \"RAG\" for short. For our scenario, this allows our LLM to retrieve context more efficiently which produces better respsonses."
},
"typeVersion": 1
},
{
"id": "6d59dc6a-692a-4752-a811-8b3033898fa4",
"name": "Magasin de Vecteurs Qdrant",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
-1600,
60
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "test_rag"
}
},
"credentials": {
"qdrantApi": {
"id": "wqHGuxoW5RJJYSIl",
"name": "QdrantApi account"
}
},
"typeVersion": 1
},
{
"id": "f75f45cd-4aed-48a2-bb09-5db20b00a029",
"name": "Markdown",
"type": "n8n-nodes-base.markdown",
"position": [
-2260,
80
],
"parameters": {
"html": "={{ $json.data }}",
"options": {}
},
"typeVersion": 1
},
{
"id": "34fdd670-f568-4351-81c7-79fde68b8192",
"name": "Embeddings Ollama",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
-1560,
420
],
"parameters": {
"model": "mxbai-embed-large:latest"
},
"credentials": {
"ollamaApi": {
"id": "jBqODDnXWJw9rGcS",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "4c4f71db-e496-4528-b0e5-dc5ffb27a2e8",
"name": "Syntétiseur Ollama",
"type": "@n8n/n8n-nodes-langchain.lmOllama",
"position": [
-1900,
140
],
"parameters": {
"model": "ALIENTELLIGENCE/contentsummarizer:latest",
"options": {}
},
"credentials": {
"ollamaApi": {
"id": "jBqODDnXWJw9rGcS",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "0a2954cc-bec6-4750-ae75-6362761e41b6",
"name": "À la réception d'un message de chat",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-3020,
540
],
"webhookId": "9dd3e051-58a3-4c46-bd41-58c001f009f9",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "1ebe053c-0e26-44c6-b543-756ad551b99d",
"name": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-2840,
540
],
"parameters": {
"options": {
"systemMessage": "This is a helpful and exacting data science LLM model and master Kaggle python programmer.\n\nIf Kaggle contest requirements are given from the chat input; first deeply research the problem.\n\nAccess the tool: \"previous_entry\" when preparing your background research.\n\nThen Ask any needed questions to clarify and understand the requirements necessary to build a program to address the challenge.\n\nReview your proposed program for errors and bugs.\n\nThen present the program.\n\nIf errors are returned; then iteratively debug with the chat user."
}
},
"typeVersion": 1.7
},
{
"id": "e042ec84-3bb6-466f-9957-0509a181d61b",
"name": "Outil de Magasin de Vecteurs",
"type": "@n8n/n8n-nodes-langchain.toolVectorStore",
"position": [
-2580,
740
],
"parameters": {
"name": "previous_entry",
"description": "={{ $('When chat message received').item.json.chatInput }}"
},
"typeVersion": 1
},
{
"id": "fbae9bc0-6ea4-4a26-ad76-eb84bc5d06c2",
"name": "Mémoire Tampon Fenêtrée",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-2760,
780
],
"parameters": {
"contextWindowLength": 15
},
"typeVersion": 1.3
},
{
"id": "2f567628-fd1d-406b-aec7-46684bd6f5e6",
"name": "Magasin de Vecteurs Qdrant2",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
-2680,
920
],
"parameters": {
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "test_rag",
"cachedResultName": "test_rag"
}
},
"credentials": {
"qdrantApi": {
"id": "wqHGuxoW5RJJYSIl",
"name": "QdrantApi account"
}
},
"typeVersion": 1
},
{
"id": "3aea837f-7676-45da-b6b1-fb2f6c5f8cd9",
"name": "Modèle de Chat Ollama3",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-2900,
760
],
"parameters": {
"model": "qwen3:8b",
"options": {}
},
"credentials": {
"ollamaApi": {
"id": "jBqODDnXWJw9rGcS",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "a9298132-e5b9-44a2-9928-a1adf7cf9fc4",
"name": "Embeddings Ollama2",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
-2660,
1080
],
"parameters": {
"model": "mxbai-embed-large:latest"
},
"credentials": {
"ollamaApi": {
"id": "jBqODDnXWJw9rGcS",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "a1c71691-8e41-4633-a1ab-4991833fb7c6",
"name": "Modèle de Chat Ollama4",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-2360,
900
],
"parameters": {
"model": "qwen3:8b",
"options": {}
},
"credentials": {
"ollamaApi": {
"id": "jBqODDnXWJw9rGcS",
"name": "Ollama account"
}
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"6384792b-de76-4e43-b26e-12c2d15c2dd2": {
"main": [
[
{
"node": "6d59dc6a-692a-4752-a811-8b3033898fa4",
"type": "main",
"index": 0
}
]
]
},
"f75f45cd-4aed-48a2-bb09-5db20b00a029": {
"main": [
[
{
"node": "22ff782e-c612-4928-9033-111cf516d07e",
"type": "main",
"index": 0
},
{
"node": "6384792b-de76-4e43-b26e-12c2d15c2dd2",
"type": "main",
"index": 1
}
]
]
},
"a7c971a5-39ac-4715-9e1b-a56af9713b06": {
"main": [
[
{
"node": "4c56a14c-6c56-4cc1-b7fb-a09caa3d646d",
"type": "main",
"index": 0
}
]
]
},
"4c56a14c-6c56-4cc1-b7fb-a09caa3d646d": {
"main": [
[
{
"node": "db4de019-755e-4b91-ac70-f30825f14033",
"type": "main",
"index": 0
}
]
]
},
"db4de019-755e-4b91-ac70-f30825f14033": {
"main": [
[
{
"node": "c14a711f-29ab-475f-aeff-3a070c797537",
"type": "main",
"index": 0
}
]
]
},
"34fdd670-f568-4351-81c7-79fde68b8192": {
"ai_embedding": [
[
{
"node": "6d59dc6a-692a-4752-a811-8b3033898fa4",
"type": "ai_embedding",
"index": 0
}
]
]
},
"c14a711f-29ab-475f-aeff-3a070c797537": {
"main": [
[
{
"node": "f75f45cd-4aed-48a2-bb09-5db20b00a029",
"type": "main",
"index": 0
}
]
]
},
"4c4f71db-e496-4528-b0e5-dc5ffb27a2e8": {
"ai_languageModel": [
[
{
"node": "22ff782e-c612-4928-9033-111cf516d07e",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"e042ec84-3bb6-466f-9957-0509a181d61b": {
"ai_tool": [
[
{
"node": "1ebe053c-0e26-44c6-b543-756ad551b99d",
"type": "ai_tool",
"index": 0
}
]
]
},
"a9298132-e5b9-44a2-9928-a1adf7cf9fc4": {
"ai_embedding": [
[
{
"node": "2f567628-fd1d-406b-aec7-46684bd6f5e6",
"type": "ai_embedding",
"index": 0
}
]
]
},
"70b42807-a6c6-4159-b278-e77311727798": {
"main": [
[
{
"node": "a7c971a5-39ac-4715-9e1b-a56af9713b06",
"type": "main",
"index": 0
}
]
]
},
"3aea837f-7676-45da-b6b1-fb2f6c5f8cd9": {
"ai_languageModel": [
[
{
"node": "1ebe053c-0e26-44c6-b543-756ad551b99d",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"a1c71691-8e41-4633-a1ab-4991833fb7c6": {
"ai_languageModel": [
[
{
"node": "e042ec84-3bb6-466f-9957-0509a181d61b",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"893f1157-6c00-4b8e-b726-462ab371fadf": {
"ai_document": [
[
{
"node": "6d59dc6a-692a-4752-a811-8b3033898fa4",
"type": "ai_document",
"index": 0
}
]
]
},
"6d59dc6a-692a-4752-a811-8b3033898fa4": {
"main": [
[]
]
},
"22ff782e-c612-4928-9033-111cf516d07e": {
"main": [
[
{
"node": "6384792b-de76-4e43-b26e-12c2d15c2dd2",
"type": "main",
"index": 0
}
]
]
},
"2f567628-fd1d-406b-aec7-46684bd6f5e6": {
"ai_vectorStore": [
[
{
"node": "e042ec84-3bb6-466f-9957-0509a181d61b",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"fbae9bc0-6ea4-4a26-ad76-eb84bc5d06c2": {
"ai_memory": [
[
{
"node": "1ebe053c-0e26-44c6-b543-756ad551b99d",
"type": "ai_memory",
"index": 0
}
]
]
},
"0a2954cc-bec6-4750-ae75-6362761e41b6": {
"main": [
[
{
"node": "1ebe053c-0e26-44c6-b543-756ad551b99d",
"type": "main",
"index": 0
}
]
]
},
"9a9bfcee-1966-415c-a59f-552e1f35aae9": {
"ai_textSplitter": [
[
{
"node": "893f1157-6c00-4b8e-b726-462ab371fadf",
"type": "ai_textSplitter",
"index": 0
}
]
]
}
}
}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é - Ingénierie, Intelligence Artificielle
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.
Workflows recommandés
Partager ce workflow