Workflow n8n

Automatisation n8n : pipeline d'embedding avec Qdrant

Ce workflow n8n a pour objectif de créer un pipeline d'embedding utilisant la base de données vectorielle Qdrant. Il est particulièrement utile pour les entreprises qui souhaitent intégrer des modèles d'IA dans leurs processus de gestion de données. Par exemple, ce workflow peut être utilisé pour améliorer la recherche de documents ou pour enrichir des systèmes de recommandation. Le processus débute par un déclencheur manuel, permettant à l'utilisateur de tester le workflow à la demande. Ensuite, les fichiers sont listés via un nœud FTP, suivis d'un téléchargement des éléments nécessaires. Les données sont ensuite chargées par le nœud 'Default Data Loader', qui prépare les documents pour l'embedding. Un séparateur est utilisé dans le nœud 'Character Text Splitter' pour segmenter le texte en morceaux appropriés. Les embeddings sont ensuite générés à l'aide du nœud 'Embeddings OpenAI', qui utilise les modèles d'OpenAI pour transformer le texte en vecteurs. Enfin, les résultats sont stockés dans la base de données Qdrant via le nœud 'Qdrant Vector Store'. Ce workflow permet non seulement d'automatiser le traitement des données, mais aussi d'améliorer l'efficacité des recherches et des recommandations, offrant ainsi une valeur ajoutée significative aux entreprises qui l'adoptent. Tags clés : automatisation, n8n, Qdrant.

Catégorie: Manual · Tags: automatisation, n8n, Qdrant, IA, embedding0

Vue d'ensemble du workflow n8n

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Détail des nœuds du workflow n8n

  • Qdrant Vector Store

    Ce noeud interagit avec le magasin de vecteurs Qdrant pour stocker ou récupérer des données vectorielles.

  • When clicking ‘Test workflow’

    Ce noeud déclenche manuellement l'exécution du workflow lorsque l'utilisateur clique sur 'Test workflow'.

  • Embeddings OpenAI

    Ce noeud génère des embeddings à partir de données textuelles en utilisant l'API OpenAI.

  • Default Data Loader

    Ce noeud charge des documents par défaut en fonction des options et du type de données spécifiés.

  • Character Text Splitter

    Ce noeud divise le texte en caractères selon le séparateur défini.

  • Sticky Note

    Ce noeud crée une note autocollante avec des paramètres de couleur, de largeur, de hauteur et de contenu.

  • Sticky Note1

    Ce noeud crée une note autocollante avec des paramètres de couleur, de hauteur et de contenu.

  • Sticky Note2

    Ce noeud crée une note autocollante avec des paramètres de couleur, de largeur, de hauteur et de contenu.

  • Sticky Note3

    Ce noeud crée une note autocollante avec des paramètres de couleur, de largeur, de hauteur et de contenu.

  • List all the files

    Ce noeud liste tous les fichiers dans un chemin spécifié sur un serveur FTP.

  • Loop over one item

    Ce noeud permet de traiter les éléments un par un en les divisant en lots.

  • Downloading item

    Ce noeud télécharge un élément spécifique à partir d'un chemin sur un serveur FTP.

  • Sticky Note4

    Ce noeud crée une note autocollante avec des paramètres de largeur, de hauteur et de contenu.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "YoUP55V241b9F2ze",
  "meta": {
    "instanceId": "35ec7a1e5284dd5dab4dac454bbb30405138d2784c99e56ef8887a4fa9cd1977",
    "templateCredsSetupCompleted": true
  },
  "name": "Qdrant Vector Database Embedding Pipeline",
  "tags": [],
  "nodes": [
    {
      "id": "934ffad4-c93e-40c1-b4fd-1c09b518a9c3",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        460,
        -460
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "sv_lang_data",
          "cachedResultName": "sv_lang_data"
        },
        "embeddingBatchSize": 100
      },
      "credentials": {
        "qdrantApi": {
          "id": "vUb9tbEnXzu7uNUb",
          "name": "QdrantApi svenska"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "4127d85d-45c9-4536-a15d-08af9dfdcfa8",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -960,
        -460
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "abb61b81-72e0-468e-855b-72402db828fc",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        400,
        -240
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "kftHaZgVKiB9BmKU",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e9ae24be-6da9-4c04-b891-7e450f505e02",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        780,
        -180
      ],
      "parameters": {
        "options": {},
        "dataType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "9aff896d-4edb-494c-b84f-ede4e47db1e3",
      "name": "Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        800,
        20
      ],
      "parameters": {
        "separator": "\"chunk_id\""
      },
      "typeVersion": 1
    },
    {
      "id": "a083a47e-a835-4323-86a8-a2eaed226aaa",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -760,
        -680
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 200,
        "content": "### Fetch JSON File List\n**Node:** FTP (all files)\n**Operation:** List\n**Path:** <file path>\n\nRecursively lists all .json files prepared for embedding."
      },
      "typeVersion": 1
    },
    {
      "id": "072ae9dc-c1cd-4ceb-954a-6b6b1b984e29",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        -660
      ],
      "parameters": {
        "color": 5,
        "height": 180,
        "content": "### Iterate Over Files\n**Node:** Loop Over Items\n\nBatches each file path individually for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "08d852f2-f1de-42ce-b882-1dc1343ed967",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -700
      ],
      "parameters": {
        "color": 4,
        "width": 420,
        "height": 220,
        "content": "### Download Each File\n**Node:** FTP (1 file download)\n\nDownloads the current file in binary form using:\n```\nPath = file_path/{{ $json.name }}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "905c3d74-2817-4aa3-865d-51e972cbbb5a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        -80
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 400,
        "content": "### Parse JSON Document (Default Data Loader)\n**Node:** Default Data Loader\n**Loader Type**: binary\n- Converts JSON structure into a document format compatible with embedding.\n\n\n### Split into Smaller Chunks\n**Node:** Character Text Splitter\n**Split by:** \"chunk_id\" or custom logic based on chunk formatting\n\nOptional node if chunk size normalization is required before embedding."
      },
      "typeVersion": 1
    },
    {
      "id": "9fb8e5be-3ee1-42b4-a858-40bc6afcf457",
      "name": "List all the files",
      "type": "n8n-nodes-base.ftp",
      "position": [
        -700,
        -460
      ],
      "parameters": {
        "path": "Oracle/AI/embedding/svenska",
        "operation": "list"
      },
      "credentials": {
        "ftp": {
          "id": "JufoKeNjsIgbCBWe",
          "name": "FTP account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6f8d0390-5851-44ca-9712-0ae51f9a22ef",
      "name": "Loop over one item",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -400,
        -460
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1c89a4a9-ec68-4c48-b7bc-74f5b30d8ac2",
      "name": "Downloading item",
      "type": "n8n-nodes-base.ftp",
      "position": [
        -40,
        -440
      ],
      "parameters": {
        "path": "=Oracle/AI/embedding/svenska/{{ $json.name }}",
        "binaryPropertyName": "binary.data"
      },
      "credentials": {
        "ftp": {
          "id": "JufoKeNjsIgbCBWe",
          "name": "FTP account"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "01ca4ee3-5f1c-4977-a7f9-88e46db580ad",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        -960
      ],
      "parameters": {
        "width": 480,
        "height": 460,
        "content": "### Store in Vector DB\n**Node:** Qdrant Vector Store\n**Batch Size:** 100\n\n**Collection:** <collection_name>\nSends cleaned text chunks to OpenAI to get embeddings (1536 dim for text-embedding-ada-002)\n\n#### collection settings in Qdrant cluster\n```\nPUT /collections/{collection_name}\n{\n    \"vectors\": {\n      \"size\": 1536,\n      \"distance\": \"Cosine\"\n    }\n}\n```\nEmbed Chunks\n**Node:** Embeddings OpenAI\nPushes the embedded chunks (with metadata) into Qdrant for semantic retrieval."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c71fca63-26e9-4795-9a00-942dab6d07ce",
  "connections": {
    "Downloading item": {
      "main": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "List all the files": {
      "main": [
        [
          {
            "node": "Loop over one item",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop over one item": {
      "main": [
        [],
        [
          {
            "node": "Downloading item",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store": {
      "main": [
        [
          {
            "node": "List all the files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "List all the files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Pour qui est ce workflow ?

Ce workflow s'adresse aux entreprises technologiques et aux équipes de développement qui cherchent à intégrer des solutions d'IA dans leurs systèmes. Il est adapté aux professionnels ayant une connaissance intermédiaire des outils d'automatisation et des bases de données vectorielles.

Problème résolu

Ce workflow résout le problème de la gestion et de l'analyse de grandes quantités de données textuelles. En automatisant le processus d'embedding, il réduit le temps nécessaire pour préparer les données pour l'IA, éliminant ainsi les erreurs humaines et les pertes de temps. Les utilisateurs peuvent s'attendre à une amélioration significative de la qualité des résultats de recherche et des recommandations, ce qui se traduit par une meilleure satisfaction client et une efficacité opérationnelle accrue.

Étapes du workflow

Étape 1 : Le workflow est déclenché manuellement. Étape 2 : Les fichiers sont listés à l'aide du nœud FTP. Étape 3 : Les éléments sont téléchargés pour traitement. Étape 4 : Les données sont chargées via le nœud 'Default Data Loader'. Étape 5 : Le texte est segmenté en morceaux grâce au 'Character Text Splitter'. Étape 6 : Les embeddings sont générés avec le nœud 'Embeddings OpenAI'. Étape 7 : Les résultats sont stockés dans la base de données Qdrant.

Guide de personnalisation du workflow n8n

Pour personnaliser ce workflow, commencez par ajuster les paramètres du nœud 'Qdrant Vector Store', notamment la collection Qdrant et la taille du lot d'embeddings. Modifiez également les options dans le nœud 'Default Data Loader' pour spécifier le type de données à traiter. Si nécessaire, vous pouvez changer le séparateur dans le 'Character Text Splitter' pour mieux adapter le texte à vos besoins. Pensez à sécuriser le flux en ajoutant des vérifications d'erreur et en monitorant les performances des nœuds, surtout lors de l'utilisation de l'API OpenAI.