Construire un chatbot de base de connaissances avec les embeddings vectoriels OpenAI, RAG et MongoDB
Ceci est unSupport, AIworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme GoogleDocs, ManualTrigger, Agent, ChatTrigger, LmChatOpenAi, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Construire un chatbot de base de connaissances avec OpenAI, RAG et les embeddings vectoriels MongoDB
- •Clé API OpenAI
- •Chaîne de connexion MongoDB
Nœuds utilisés (15)
Catégorie
{
"meta": {
"instanceId": "074f90e2bb5206c5f405a8aac6551497c72005283a5405fb08207b1b3a78c2b8",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "5cb0a836-f9a1-4f92-9326-cd82a392d0da",
"name": "Agent de Base de Connaissances",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
220,
0
],
"parameters": {
"text": "={{ $json.chatInput }}",
"options": {
"systemMessage": "You are the AI assistant for an internal support team at a technology company specializing in advanced software solutions. Your task is to assist internal users by consulting the official product documentation stored in the company’s knowledge base.\n\nAvailable references:\n\nproductDocs: Step-by-step guides, technical configurations, and official manuals extracted from the product’s documentation.\n\nBehavior rules for answering questions:\nAlways consult the official product documentation first using the productDocs tool.\n\nRespond clearly and directly, explaining how to do what is requested.\n\nDo not filter by category unless explicitly asked by the user.\n\nDetect the language of each incoming message individually and respond in that language. Do not use prior conversation language or history to decide the response language.\n\nNever provide links, even if requested. If a user asks for a link, reply:\n“I cannot provide links. If you need specific information, please let me know and I will help with the details.”\n\nUse a professional, direct, and human tone.\n\nKeep answers between 2 and 4 lines unless the user requests more detail.\n\nDo not invent information that is not in the knowledge base.\n\nIf you give numbered steps or lists, number them sequentially (1, 2, 3...) without skipping or repeating numbers, even if the source content uses different numbering."
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "56e6fb75-6a97-4466-9e7f-70710c2740d7",
"name": "OpenAI Modèle de Chat",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
60,
240
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "cJRah9hGPQ7eX4jd",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "e352c32e-7108-4a0d-b081-b2532d96d092",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
680,
380
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"id": "cJRah9hGPQ7eX4jd",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "74bbfb00-1a00-4131-a291-bce5b79628b4",
"name": "Lors du clic sur \"Exécuter le Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-60,
-420
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f720a4b0-6239-4a0b-bb61-1e43f78f8e40",
"name": "Mémoire Simple",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
320,
220
],
"parameters": {},
"typeVersion": 1.3
},
{
"id": "94561d61-4a01-48b6-b114-dc4d47546ff3",
"name": "MongoDB Recherche Vectorielle",
"type": "@n8n/n8n-nodes-langchain.vectorStoreMongoDBAtlas",
"position": [
560,
220
],
"parameters": {
"mode": "retrieve-as-tool",
"options": {},
"toolName": "productDocs",
"mongoCollection": {
"__rl": true,
"mode": "list",
"value": "n8n-template",
"cachedResultName": "n8n-template"
},
"toolDescription": "retreive documentation",
"vectorIndexName": "data_index"
},
"credentials": {
"mongoDb": {
"id": "7riubYENUDZsmjyK",
"name": "MongoDB account 2"
}
},
"typeVersion": 1.1
},
{
"id": "c473c33d-5681-4f3a-ac36-0d3012e7251f",
"name": "Chargeur de Section de Document",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
740,
-260
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "doc_id",
"value": "={{ $json.documentId }}"
}
]
}
},
"jsonData": "={{ $json.content }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "321222cb-1daf-4be2-a6ca-1a03d24f670f",
"name": "Découpeur de Document",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
860,
-100
],
"parameters": {
"options": {
"splitCode": "markdown"
},
"chunkSize": 3000,
"chunkOverlap": 200
},
"typeVersion": 1
},
{
"id": "716519f5-cec1-4bfe-afbe-614fc23e74b5",
"name": "MongoDB Insertion de Stockage Vectoriel",
"type": "@n8n/n8n-nodes-langchain.vectorStoreMongoDBAtlas",
"position": [
540,
-420
],
"parameters": {
"mode": "insert",
"options": {},
"mongoCollection": {
"__rl": true,
"mode": "list",
"value": "n8n-template",
"cachedResultName": "n8n-template"
},
"vectorIndexName": "data_index"
},
"credentials": {
"mongoDb": {
"id": "7riubYENUDZsmjyK",
"name": "MongoDB account 2"
}
},
"typeVersion": 1.1
},
{
"id": "a49c19fc-f5f5-4381-b6ba-1bfc12b96135",
"name": "OpenAI Générateur d'Embeddings",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
480,
-180
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"id": "cJRah9hGPQ7eX4jd",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "6de724d5-2941-4e72-af8b-302ca2cf2ca0",
"name": "Google Importateur de Documents",
"type": "n8n-nodes-base.googleDocs",
"position": [
200,
-420
],
"parameters": {
"operation": "get",
"documentURL": "https://docs.google.com/document/d/1gvgp71e9edob8WLqFIYCdzC7kUq3pLO37VKb-a-vVW4/edit?tab=t.0"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "FNXMwqMf7vl1WUFj",
"name": "Google Docs account"
}
},
"typeVersion": 2
},
{
"id": "4f30bb21-72f0-4d13-b610-2ec218ad31b1",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-420,
-440
],
"parameters": {
"color": 5,
"content": "Run this workflow manually to import and index Google Docs product documentation into MongoDB with vector embeddings for fast search."
},
"typeVersion": 1
},
{
"id": "25fd33d5-041b-4f01-a46b-1bacabd88376",
"name": "À la réception d'un message de chat",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
40,
0
],
"webhookId": "427ead97-647d-49c7-82d7-e76b40664fd1",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "f1f3fadd-d5e6-45df-b810-1616531dffcb",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-420,
40
],
"parameters": {
"color": 4,
"content": "This workflow uses retrieval-augmented generation (RAG) to answer user questions by searching the MongoDB vector store and generating AI responses with context."
},
"typeVersion": 1
},
{
"id": "39eee95c-b332-4ae4-bde9-aaf0fe5e0546",
"name": "Note Adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-380
],
"parameters": {
"height": 520,
"content": "Search Index Example \n\n{\n \"mappings\": {\n \"dynamic\": false,\n \"fields\": {\n \"_id\": {\n \"type\": \"string\"\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"embedding\": {\n \"type\": \"knnVector\",\n \"dimensions\": 1536,\n \"similarity\": \"cosine\"\n },\n \"source\": {\n \"type\": \"string\"\n },\n \"doc_id\": {\n \"type\": \"string\"\n }\n }\n }\n}\n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"f720a4b0-6239-4a0b-bb61-1e43f78f8e40": {
"ai_memory": [
[
{
"node": "5cb0a836-f9a1-4f92-9326-cd82a392d0da",
"type": "ai_memory",
"index": 0
}
]
]
},
"321222cb-1daf-4be2-a6ca-1a03d24f670f": {
"ai_textSplitter": [
[
{
"node": "c473c33d-5681-4f3a-ac36-0d3012e7251f",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"e352c32e-7108-4a0d-b081-b2532d96d092": {
"ai_embedding": [
[
{
"node": "94561d61-4a01-48b6-b114-dc4d47546ff3",
"type": "ai_embedding",
"index": 0
}
]
]
},
"56e6fb75-6a97-4466-9e7f-70710c2740d7": {
"ai_languageModel": [
[
{
"node": "5cb0a836-f9a1-4f92-9326-cd82a392d0da",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"6de724d5-2941-4e72-af8b-302ca2cf2ca0": {
"main": [
[
{
"node": "716519f5-cec1-4bfe-afbe-614fc23e74b5",
"type": "main",
"index": 0
}
]
]
},
"5cb0a836-f9a1-4f92-9326-cd82a392d0da": {
"main": [
[]
]
},
"94561d61-4a01-48b6-b114-dc4d47546ff3": {
"ai_tool": [
[
{
"node": "5cb0a836-f9a1-4f92-9326-cd82a392d0da",
"type": "ai_tool",
"index": 0
}
]
]
},
"c473c33d-5681-4f3a-ac36-0d3012e7251f": {
"ai_document": [
[
{
"node": "716519f5-cec1-4bfe-afbe-614fc23e74b5",
"type": "ai_document",
"index": 0
}
]
]
},
"25fd33d5-041b-4f01-a46b-1bacabd88376": {
"main": [
[
{
"node": "5cb0a836-f9a1-4f92-9326-cd82a392d0da",
"type": "main",
"index": 0
}
]
]
},
"a49c19fc-f5f5-4381-b6ba-1bfc12b96135": {
"ai_embedding": [
[
{
"node": "716519f5-cec1-4bfe-afbe-614fc23e74b5",
"type": "ai_embedding",
"index": 0
}
]
]
},
"74bbfb00-1a00-4131-a291-bce5b79628b4": {
"main": [
[
{
"node": "6de724d5-2941-4e72-af8b-302ca2cf2ca0",
"type": "main",
"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é ?
Intermédiaire - Support, 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
Thomas
@thomasgptPartager ce workflow