RAG sur l'historique des courriels

Avancé

Ceci est unInternal Wiki, AI RAGworkflow d'automatisation du domainecontenant 23 nœuds.Utilise principalement des nœuds comme Code, Gmail, GmailTrigger, ManualTrigger, SplitInBatches. Créer une base de connaissances d'e-mails avec Gmail, OpenAI et la base de données vectorielle Qdrant

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Clé API OpenAI
  • Informations de connexion au serveur Qdrant
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": "7QhxjMbqHv5tk9wM",
  "meta": {
    "instanceId": "b50483b2122f6dc268662b45507d575d939570ea8e1e086601ebb3b6273c1cfd",
    "templateCredsSetupCompleted": true
  },
  "name": "Email History RAG",
  "tags": [
    {
      "id": "PNmVCFjr9sq0xind",
      "name": "RAG",
      "createdAt": "2025-07-12T09:30:51.202Z",
      "updatedAt": "2025-07-12T09:30:51.202Z"
    }
  ],
  "nodes": [
    {
      "id": "dec780ab-9e05-4305-ba52-8a92dfc266e7",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -7040,
        800
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "K8T7HIhpd7gMJG20",
          "name": "OpenAi account - Remap"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "13f21017-5470-4e0e-8d13-aea6d98c4918",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -7440,
        448
      ],
      "parameters": {
        "width": 1162,
        "height": 796,
        "content": "# RAG AI Agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b6615316-94c0-4091-b6e3-8cdf64cb0902",
      "name": "Lors du clic sur 'Tester le workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -6048,
        1472
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "349336cd-9373-4553-aa13-9cf6a427a0c6",
      "name": "Agent RAG",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -6944,
        576
      ],
      "parameters": {
        "options": {
          "systemMessage": "=You are a helpful assistant that will get data from RAG and send a good response to user.\n\nToday date is this if user ask for dated or latest data: {{ $now }}\n\nSo add date when send query to vector database because I am already setting the date field in embedding."
        }
      },
      "typeVersion": 1.7
    },
    {
      "id": "82da160a-a572-4cdf-a260-f7a0c51a30fa",
      "name": "Gmail Trigger1",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -6064,
        672
      ],
      "parameters": {
        "filters": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "ufYEel3Kf0MiIlZB",
          "name": "Gmail account - chzainali6363@gmail.com"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "954a8ea4-9e00-43b9-9fe2-6d717b6dccd7",
      "name": "Obtenir les données d'email1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -5840,
        672
      ],
      "webhookId": "[REDACTED_WEBHOOK_ID]",
      "parameters": {
        "simple": false,
        "options": {},
        "messageId": "={{ $json.id }}",
        "operation": "get"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "ufYEel3Kf0MiIlZB",
          "name": "Gmail account - chzainali6363@gmail.com"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "16acb16b-8d56-425a-b484-fa4ffc3f5616",
      "name": "Embeddings OpenAI5",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -5680,
        912
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "K8T7HIhpd7gMJG20",
          "name": "OpenAi account - Remap"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "73a26bce-0df2-4755-8175-8a0e367f7418",
      "name": "Enhanced Default Data Loader3",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -5424,
        880
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "=data_source",
                "value": "=gmail"
              },
              {
                "name": "=created_at",
                "value": "={{ $json.date }}"
              }
            ]
          }
        },
        "jsonData": "=Email details:\nDate: {{ $json.headers.date }}\n\nFrom Email: {{ $json.from.value[0].address }}\nFrom Name:  {{ $json.from.value[0].name }}\n\nTo Email: {{ $json.to.value[0].address }}\n\nEmail Subject:\n{{ $json.subject }}\n\nEmail body:\n{{ $json.text }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "262344fa-8b26-4665-b0ff-e1354e6d84eb",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -6128,
        448
      ],
      "parameters": {
        "color": 4,
        "width": 1200,
        "height": 788,
        "content": "# Watch Trigger (Email) - New Email\n## Get new Email -> Extract the text -> Add to Vector Store"
      },
      "typeVersion": 1
    },
    {
      "id": "c70f74e1-75ab-4ce3-9c84-f92ff1d7a762",
      "name": "Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        -5344,
        1056
      ],
      "parameters": {
        "separator": "Email details:"
      },
      "typeVersion": 1
    },
    {
      "id": "f01ccf0e-caf4-44f1-a385-a6eb2b063551",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -5616,
        1472
      ],
      "parameters": {
        "jsCode": "const emails = $input.all().map((item) => item.json);\n\nconst extractedData = emails.map((email) => {\n  // Remove line breaks and excessive spaces from body\n  const cleanBody = email.text\n    ?.replace(/(\\r\\n|\\n|\\r)/gm, ' ')  // Replace newlines with space\n    ?.replace(/\\s+/g, ' ')           // Collapse multiple spaces\n    ?.trim();                        // Remove leading/trailing space\n\n  return {\n    to: email.to?.value?.[0]?.address || '',\n    from: email.from?.value?.[0]?.address || '',\n    fromName: email.from?.value?.[0]?.name || '',\n    date: email.date || '',\n    subject: email.subject || '',\n    body: cleanBody || '',\n    emailId: email.id || '',\n  };\n});\n\nreturn extractedData;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "69d042bf-b75a-414e-a2e2-a62632e6aef2",
      "name": "Embeddings OpenAI11",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -5280,
        1712
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "5200b258-2c96-4d38-9c92-b5353ada6957",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -5104,
        1696
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "created_at",
                "value": "={{ $json.date }}"
              },
              {
                "name": "data_source",
                "value": "gmail"
              }
            ]
          }
        },
        "jsonData": "=Email details:\nDate: {{ $json.date }}\n\nFrom Email: {{ $json.from }}\nFrom Name:  {{ $json.fromName }}\n\nTo Email: {{ $json.to }}\n\nEmail Subject:\n{{ $json.subject }}\n\nEmail body:\n{{ $json.body }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "cd126bb7-60a6-450b-b31c-cfd9517e9441",
      "name": "Note adhésive11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -6128,
        1328
      ],
      "parameters": {
        "width": 1596,
        "height": 740,
        "content": "# Get All Emails -> Store embedding in vector db\n"
      },
      "typeVersion": 1
    },
    {
      "id": "19fe59c6-6576-453a-8098-97e47c72c033",
      "name": "Emails par lot",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -5424,
        1472
      ],
      "parameters": {
        "options": {},
        "batchSize": 50
      },
      "typeVersion": 3
    },
    {
      "id": "512bb68a-94d7-4e0f-ab51-265f19d670bd",
      "name": "Character Text Splitter1",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        -5024,
        1888
      ],
      "parameters": {
        "separator": "Email details:"
      },
      "typeVersion": 1
    },
    {
      "id": "051c026e-0fd7-4182-a388-0ccd6e0c085e",
      "name": "Embeddings OpenAI3",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -6784,
        1072
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "K8T7HIhpd7gMJG20",
          "name": "OpenAi account - Remap"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "d7481948-2972-42e9-b2ef-900c55bc6465",
      "name": "Qdrant Email Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        -6736,
        896
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolName": "emails_vector_search",
        "toolDescription": "=Call this tool to perform a vector embeddings search in my e-mail database. For time-specific queries:\n1. ALWAYS include the time frame in your query (e.g., \"interviews scheduled after April 27, 2025\" or \"interviews for next week April 28-May 4, 2025\")\n2. For future events, explicitly mention \"future\" or \"upcoming\" in your query",
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "emails_history",
          "cachedResultName": "emails_history"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "7cecd74a-bde6-4fcf-8622-81620c63b20f",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        -5568,
        672
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "emails_history",
          "cachedResultName": "emails_history"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "1e6d26d8-60e3-4128-82b4-a5e61d83cff1",
      "name": "Qdrant Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        -5104,
        1456
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "emails_history",
          "cachedResultName": "emails_history"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "8b9845c3-a9e6-47a1-ae0e-8e66a15b5812",
      "name": "Lors de la réception d'un message chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -7248,
        576
      ],
      "webhookId": "61ffbc2d-0469-49ab-8541-694f021112e6",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "2c320869-b169-4961-a8fd-5403c7a1366e",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -6864,
        800
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "6735edda-91ff-4872-8c13-bec68a8af925",
      "name": "Obtenir plusieurs messages",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -5824,
        1472
      ],
      "webhookId": "778c704a-a717-45e1-adc7-f15a6426c415",
      "parameters": {
        "simple": false,
        "filters": {},
        "options": {},
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "ufYEel3Kf0MiIlZB",
          "name": "Gmail account - chzainali6363@gmail.com"
        }
      },
      "typeVersion": 2.1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a81f41c7-8a71-483c-82bb-ff45081649cf",
  "connections": {
    "f01ccf0e-caf4-44f1-a385-a6eb2b063551": {
      "main": [
        [
          {
            "node": "19fe59c6-6576-453a-8098-97e47c72c033",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "349336cd-9373-4553-aa13-9cf6a427a0c6": {
      "main": [
        []
      ]
    },
    "19fe59c6-6576-453a-8098-97e47c72c033": {
      "main": [
        [],
        [
          {
            "node": "1e6d26d8-60e3-4128-82b4-a5e61d83cff1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2c320869-b169-4961-a8fd-5403c7a1366e": {
      "ai_memory": [
        [
          {
            "node": "349336cd-9373-4553-aa13-9cf6a427a0c6",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "954a8ea4-9e00-43b9-9fe2-6d717b6dccd7": {
      "main": [
        [
          {
            "node": "7cecd74a-bde6-4fcf-8622-81620c63b20f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "82da160a-a572-4cdf-a260-f7a0c51a30fa": {
      "main": [
        [
          {
            "node": "954a8ea4-9e00-43b9-9fe2-6d717b6dccd7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6735edda-91ff-4872-8c13-bec68a8af925": {
      "main": [
        [
          {
            "node": "f01ccf0e-caf4-44f1-a385-a6eb2b063551",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dec780ab-9e05-4305-ba52-8a92dfc266e7": {
      "ai_languageModel": [
        [
          {
            "node": "349336cd-9373-4553-aa13-9cf6a427a0c6",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "051c026e-0fd7-4182-a388-0ccd6e0c085e": {
      "ai_embedding": [
        [
          {
            "node": "d7481948-2972-42e9-b2ef-900c55bc6465",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "16acb16b-8d56-425a-b484-fa4ffc3f5616": {
      "ai_embedding": [
        [
          {
            "node": "7cecd74a-bde6-4fcf-8622-81620c63b20f",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "5200b258-2c96-4d38-9c92-b5353ada6957": {
      "ai_document": [
        [
          {
            "node": "1e6d26d8-60e3-4128-82b4-a5e61d83cff1",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "69d042bf-b75a-414e-a2e2-a62632e6aef2": {
      "ai_embedding": [
        [
          {
            "node": "1e6d26d8-60e3-4128-82b4-a5e61d83cff1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "1e6d26d8-60e3-4128-82b4-a5e61d83cff1": {
      "main": [
        [
          {
            "node": "19fe59c6-6576-453a-8098-97e47c72c033",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c70f74e1-75ab-4ce3-9c84-f92ff1d7a762": {
      "ai_textSplitter": [
        [
          {
            "node": "73a26bce-0df2-4755-8175-8a0e367f7418",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "512bb68a-94d7-4e0f-ab51-265f19d670bd": {
      "ai_textSplitter": [
        [
          {
            "node": "5200b258-2c96-4d38-9c92-b5353ada6957",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "d7481948-2972-42e9-b2ef-900c55bc6465": {
      "ai_tool": [
        [
          {
            "node": "349336cd-9373-4553-aa13-9cf6a427a0c6",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "8b9845c3-a9e6-47a1-ae0e-8e66a15b5812": {
      "main": [
        [
          {
            "node": "349336cd-9373-4553-aa13-9cf6a427a0c6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "73a26bce-0df2-4755-8175-8a0e367f7418": {
      "ai_document": [
        [
          {
            "node": "7cecd74a-bde6-4fcf-8622-81620c63b20f",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "b6615316-94c0-4091-b6e3-8cdf64cb0902": {
      "main": [
        [
          {
            "node": "6735edda-91ff-4872-8c13-bec68a8af925",
            "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œuds23
Catégorie2
Types de nœuds14
Description de la difficulté

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

Auteur
Zain Ali

Zain Ali

@zain104

Software Engineer with over 3+ years of experience in full-stack development.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34