Automatisation Google Drive avec n8n : chargement de données vectorielles
Ce workflow n8n a pour objectif de charger des données vectorielles depuis Google Drive vers une base de données PGVector. Il s'adresse aux entreprises qui souhaitent automatiser le traitement de documents et l'extraction de données pour améliorer leur gestion de l'information. En utilisant des outils comme Google Drive, OpenAI et PostgreSQL, ce processus permet de transformer des fichiers en données exploitables, facilitant ainsi l'analyse et la recherche d'informations. Étape 1 : le workflow commence par un déclencheur manuel, permettant à l'utilisateur de lancer le processus à tout moment. Étape 2 : il utilise le nœud 'Search Folder' pour localiser le fichier souhaité dans Google Drive. Étape 3 : une fois le fichier trouvé, le nœud 'Download File' le télécharge pour traitement. Étape 4 : le nœud 'Extract from PDF', 'Extract from Text' ou 'Extract from JSON' est ensuite utilisé pour extraire les données pertinentes du fichier. Étape 5 : les données sont ensuite divisées en morceaux gérables grâce au 'Recursive Character Text Splitter'. Étape 6 : ces morceaux sont ensuite transformés en embeddings via le nœud 'Embeddings OpenAI'. Enfin, Étape 7 : les données vectorisées sont stockées dans la base de données PGVector à l'aide du nœud 'Postgres PGVector Store'. Ce workflow offre une solution efficace pour automatiser la gestion des données, réduisant ainsi le temps et les efforts nécessaires pour traiter manuellement des fichiers, tout en minimisant les erreurs humaines. Tags clés : automatisation, Google Drive, n8n.
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
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "WceMkVib0VLlF1BZ",
"meta": {
"instanceId": "ecc960f484e18b0e09045fd93acf0d47f4cfff25cc212ea348a08ac3aae81850",
"templateCredsSetupCompleted": true
},
"name": "Vector DB Loader from Google Drive",
"tags": [
{
"id": "6rb8rVhKZj4t0Kne",
"name": "Current",
"createdAt": "2025-02-04T18:13:17.427Z",
"updatedAt": "2025-02-04T18:13:17.427Z"
}
],
"nodes": [
{
"id": "6652e41a-d14a-4e17-9dcd-34df114d219a",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1240,
1100
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "8ae38b72-52fd-46bc-ab47-50bebe5ac4ee",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1320,
1300
],
"parameters": {
"options": {},
"chunkOverlap": 50
},
"typeVersion": 1
},
{
"id": "57ce64af-88d4-4dc4-8c8e-01717c1bd47d",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1120,
1100
],
"parameters": {
"model": "text-embedding-3-small",
"options": {}
},
"credentials": {
"openAiApi": {
"id": "fzLcLisovaZjIqma",
"name": "AlexK OpenAi account"
}
},
"typeVersion": 1
},
{
"id": "e6bed8bc-f629-41fd-aa6e-9158b1cbc323",
"name": "Postgres PGVector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStorePGVector",
"position": [
1140,
880
],
"parameters": {
"mode": "insert",
"options": {
"collection": {
"values": {
"useCollection": true,
"collectionName": "n8n_wfs"
}
}
},
"tableName": "n8n_vectors_wfs"
},
"credentials": {
"postgres": {
"id": "UkNm7VVkmuXOwMVa",
"name": "KBB Postgres account"
}
},
"typeVersion": 1.1
},
{
"id": "96fbc1f3-920d-44c9-9314-742efa3a698a",
"name": "When clicking ‘Test workflow’",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-280,
740
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4cd7a934-04cc-47b5-a771-db554680ba77",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
160,
740
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "778593d8-fe1c-4eb9-865a-e6ce9ed5f900",
"name": "Move File",
"type": "n8n-nodes-base.googleDrive",
"position": [
1500,
880
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Loop Over Items').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Re6vg-PZxBoUU6sTRDbGs-77bAJ40u8F",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Re6vg-PZxBoUU6sTRDbGs-77bAJ40u8F",
"cachedResultName": "vectorized"
},
"operation": "move"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "kxXwhBLKOmB8CkBW",
"name": "AlexK Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "3a6584f5-ed86-4900-9177-40ffe82d0ad3",
"name": "Download File",
"type": "n8n-nodes-base.googleDrive",
"position": [
380,
680
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "kxXwhBLKOmB8CkBW",
"name": "AlexK Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "e1931ab6-4391-46c3-9d7d-22cbfbf90327",
"name": "Search Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
-60,
740
],
"parameters": {
"filter": {
"folderId": {
"__rl": true,
"mode": "list",
"value": "1mBHrP8UzUnfn3dj_3QS1r0XhQQyVPAGX",
"cachedResultUrl": "https://drive.google.com/drive/folders/1mBHrP8UzUnfn3dj_3QS1r0XhQQyVPAGX",
"cachedResultName": "n8n Workflow JSON Files"
},
"whatToSearch": "files"
},
"options": {},
"resource": "fileFolder",
"returnAll": true
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "kxXwhBLKOmB8CkBW",
"name": "AlexK Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "95134ab4-806f-4c47-96a6-e261b3176ebf",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-280,
940
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 3
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0fe604ed-e886-4aa3-856f-c46fb79ce0de",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1700,
960
],
"parameters": {
"color": 7,
"width": 380,
"height": 240,
"content": "## Creative Commons License\n*License*: **Creative Commons Attribution-ShareAlike 4.0 International** (CC BY-SA 4.0)\n\n*Author*: **AlexK1919**\nYou are free to use, adapt, and share this workflow—even commercially—under the terms of this license.\n\nFull license details: https://creativecommons.org/licenses/by-sa/4.0/"
},
"typeVersion": 1
},
{
"id": "f8055452-b487-46c7-92fe-14b3c88d193f",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
560,
680
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "pdf",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7b4e792b-ab6d-4b9b-88a1-d8e51bea6853",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{$binary[\"data\"].mimeType}}",
"rightValue": "application/pdf"
}
]
},
"renameOutput": true
},
{
"outputKey": "text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "09b7d7c5-5353-4719-b4e2-072e4da39948",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$binary[\"data\"].mimeType}}",
"rightValue": "text/plain"
}
]
},
"renameOutput": true
},
{
"outputKey": "json",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d2763a45-a592-47c8-868f-59dfcd17a71c",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$binary[\"data\"].mimeType}}",
"rightValue": "application/json"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "c704f48e-a1f5-4539-bde2-545862d21bc6",
"name": "Extract from PDF",
"type": "n8n-nodes-base.extractFromFile",
"position": [
780,
480
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "63b3a751-5726-4821-8379-72af15226584",
"name": "Extract from Text",
"type": "n8n-nodes-base.extractFromFile",
"position": [
780,
680
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "44a5980a-17aa-4a09-8040-a7d9804c7998",
"name": "Extract from JSON",
"type": "n8n-nodes-base.extractFromFile",
"position": [
780,
880
],
"parameters": {
"options": {},
"operation": "fromJson"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"timezone": "America/Los_Angeles",
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "lYgdNzdEapw2W8gK",
"executionOrder": "v1"
},
"versionId": "4f54c70a-b18b-4e4c-8959-ace70dd41218",
"connections": {
"Switch": {
"main": [
[
{
"node": "Extract from PDF",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract from Text",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract from JSON",
"type": "main",
"index": 0
}
]
]
},
"Move File": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Download File": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Search Folder": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Download File",
"type": "main",
"index": 0
}
]
]
},
"Extract from PDF": {
"main": [
[
{
"node": "Postgres PGVector Store",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Search Folder",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Postgres PGVector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Extract from JSON": {
"main": [
[
{
"node": "Postgres PGVector Store",
"type": "main",
"index": 0
}
]
]
},
"Extract from Text": {
"main": [
[
{
"node": "Postgres PGVector Store",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Postgres PGVector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Postgres PGVector Store": {
"main": [
[
{
"node": "Move File",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "Search Folder",
"type": "main",
"index": 0
}
]
]
}
}
}Pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises de taille moyenne à grande qui utilisent Google Drive pour stocker des documents. Il est particulièrement utile pour les équipes de données, les analystes et les développeurs souhaitant automatiser le traitement des fichiers et l'extraction d'informations. Un niveau technique intermédiaire est recommandé pour la personnalisation.
Problème résolu
Ce workflow résout le problème de la gestion manuelle des données en automatisant le processus d'extraction et de chargement de fichiers depuis Google Drive vers une base de données. Il élimine les frustrations liées à la recherche et au traitement manuel des documents, réduisant ainsi les risques d'erreurs et le temps passé sur ces tâches. Grâce à cette automatisation, les utilisateurs peuvent se concentrer sur des tâches à plus forte valeur ajoutée, tout en garantissant que les données sont rapidement et efficacement intégrées dans leur système.
Étapes du workflow
Étape 1 : le workflow est déclenché manuellement par l'utilisateur. Étape 2 : le nœud 'Search Folder' localise le fichier dans Google Drive. Étape 3 : le fichier est téléchargé via le nœud 'Download File'. Étape 4 : les données sont extraites du fichier à l'aide des nœuds 'Extract from PDF', 'Extract from Text' ou 'Extract from JSON'. Étape 5 : les données extraites sont divisées en morceaux avec le 'Recursive Character Text Splitter'. Étape 6 : ces morceaux sont transformés en embeddings grâce au nœud 'Embeddings OpenAI'. Étape 7 : enfin, les données vectorisées sont stockées dans la base de données PGVector via le nœud 'Postgres PGVector Store'.
Guide de personnalisation du workflow n8n
Pour personnaliser ce workflow, commencez par modifier le nœud 'Search Folder' pour cibler le bon dossier dans Google Drive. Ensuite, ajustez le nœud 'Download File' pour spécifier le fichier à télécharger. Les nœuds d'extraction doivent être configurés selon le format de votre fichier (PDF, texte ou JSON). Vous pouvez également personnaliser les paramètres du 'Recursive Character Text Splitter' pour définir la taille des morceaux de texte. Enfin, assurez-vous que les paramètres du nœud 'Postgres PGVector Store' correspondent à votre base de données, notamment le nom de la table et les options de mode.