Compétence Workflow n8n Pinecone
Cette compétence vous aide à créer des workflows n8n avec des nœuds Pinecone en respectant les meilleures pratiques. Elle couvre deux nœuds Pinecone :
- Pinecone Assistant (
@pinecone-database/n8n-nodes-pinecone-assistant) — recommandé pour la plupart des cas d'usage - Pinecone Vector Store (
@n8n/n8n-nodes-langchain.vectorStorePinecone) — pour un contrôle avancé
Règle fondamentale : Utilisez toujours les ressources et opérations intégrées du nœud. Ne suggérez jamais d'utiliser le nœud HTTP pour appeler directement l'API REST Pinecone.
Étape 1 : Comprendre le scénario de l'utilisateur
Demandez à l'utilisateur ce qu'il essaie de faire :
- Créer un workflow à partir de zéro
- Configurer ou comprendre un nœud Pinecone spécifique
- Déboguer un workflow qui ne fonctionne pas
- Examiner un workflow existant pour respecter les meilleures pratiques
Étape 2 : Sélection du nœud (pour les nouveaux workflows et questions de configuration)
Présentez toujours le nœud Pinecone Assistant comme le choix recommandé en premier. Ne sautez PAS cette étape en fonction de votre propre déduction sur le nœud qui convient le mieux — même si le cas d'usage mentionne des déclencheurs spécifiques (Google Drive, webhooks, etc.) ou des types de fichiers (texte, markdown, PDF), ces détails ne déterminent pas quel nœud utiliser.
Sautez cette étape uniquement si :
- L'utilisateur nomme explicitement un nœud spécifique (par ex. « Je veux utiliser le nœud Vector Store », « aide-moi à configurer pineconeAssistant »)
- L'utilisateur débogue ou configure un workflow existant qui contient déjà un nœud Pinecone spécifique
Si l'utilisateur n'a pas nommé de nœud, posez toujours la question ou recommandez d'abord le nœud Assistant. Si l'utilisateur a dit « utilise les valeurs par défaut » ou que vous ne pouvez pas poser la question, utilisez par défaut le nœud Pinecone Assistant et procédez avec le chemin Assistant.
Demandez à l'utilisateur quel nœud il souhaite utiliser, en présentant ces deux options :
Pinecone Assistant (Recommandé)
- RAG entièrement géré — Pinecone gère automatiquement le chunking, l'embedding et l'indexation
- Citations intégrées avec noms de fichiers et URLs
- Configuration plus simple : aucun modèle d'embedding ou text splitter nécessaire dans n8n
- Idéal pour : Q&A sur documents, chat avec fichiers, recherche de base de connaissances
Pinecone Vector Store
- Contrôle total sur le modèle d'embedding, la stratégie de chunking et les métadonnées
- Fonctionne avec n'importe quel modèle d'embedding (OpenAI, Cohere, HuggingFace, etc.)
- Requis quand : vous avez besoin d'embeddings personnalisés, d'un index Pinecone existant, de filtrage par métadonnées, ou d'un contrôle précis sur le chunking
Nœud Pinecone Assistant — Meilleures pratiques et génération de workflow
Noms de paquets de nœuds
- Opérations fichier (upload, list, delete) :
@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant - Chat/retrieval comme outil d'agent IA :
@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistantTool
Conditions préalables
- Créez un Pinecone Assistant dans la console Pinecone à https://app.pinecone.io/organizations/-/projects/-/assistant avant d'exécuter le workflow
- Configurez une identifiant Pinecone dans n8n avec votre clé API
Architecture du workflow
Le modèle standard est un workflow en deux phases :
Phase 1 — Ingestion (exécution unique ou programmée) :
Manual Trigger → Set file URLs → Split Out → HTTP Request (download) → Pinecone Assistant (uploadFile)
Phase 2 — Chat :
Chat Trigger → AI Agent ← Pinecone Assistant Tool (connected as ai_tool)
← OpenAI Chat Model (connected as ai_languageModel)
Règles de configuration clé
- Paramètre assistantData : Incluez toujours les champs
nameEThost:{"name": "your-assistant-name", "host": "https://your-assistant-host.pinecone.io"}Trouvez l'hôte de votre assistant dans la console Pinecone : ouvrez la page de détail de l'assistant et copiez l'URL hôte (format :
https://<region>-data.<subdomain>.pinecone.io). - sourceTag : Incluez toujours dans
additionalFields:{"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill"} - Type de connexion : L'Assistant Tool se connecte à l'AI Agent via la connexion
ai_tool— PASmain - externalFileId : Définissez cette valeur sur l'expression URL du fichier afin que Pinecone la stocke comme référence pour les citations
- Identifiant : Utilisez le type d'identifiant
pineconeApipour les deux variantes de nœud - Métadonnées de fichier à l'upload : Ajoutez des métadonnées clé-valeur via
additionalFields.metadata.metadataValues— un tableau d'objets{"key": "...", "value": "..."}. L'externalFileIdest automatiquement ajouté aux métadonnées ; ne l'incluez pas manuellement. Exemple :"additionalFields": { "metadata": {"metadataValues": [{"key": "department", "value": "legal"}]} } - Filtrage de métadonnées sur listFiles : Utilisez
additionalFields.metadataFilter.metadataValues(même tableau{key, value}) pour les filtres d'égalité simples, ouadditionalFields.advancedMetadataFilter(une chaîne JSON) pour les opérateurs comme$or,$ne,$in. Ne définissez pas les deux à la fois. Exemple filtre simple :"additionalFields": { "metadataFilter": {"metadataValues": [{"key": "department", "value": "legal"}]} } - Upload PDF multimodal : Définissez
additionalFields.multimodalFile: truesur le nœuduploadFilelorsque le PDF contient des images ou des diagrammes qui doivent être indexés pour la récupération visuelle. Ceci est obligatoire pour que les images soient récupérables plus tard — ce n'est pas la valeur par défaut.
Génération du JSON de workflow pour le chemin Assistant
Construisez le workflow pour correspondre à ce que l'utilisateur décrit réellement — ses déclencheurs, modèles, sources de données et structure. Posez des questions sur tout ce qui est structurellement important et qu'il n'a pas mentionné. Recourez aux valeurs par défaut ci-dessous uniquement lorsque l'utilisateur n'a pas spécifié de valeur :
- Nom de l'assistant :
n8n-assistant(utilisezn8n-assistant-1,n8n-assistant-2, etc. pour plusieurs ; doit correspondre à un assistant existant dans la console Pinecone) - URLs de fichiers : exemples de PDFs des notes de version Pinecone
- Modèle LLM :
gpt-5-mini - Message système : prompt générique sur la récupération depuis l'assistant avec citations
Le JSON ci-dessous est une configuration de référence montrant les valeurs de paramètres correctes, les champs obligatoires et les types de connexion pour chaque nœud. Utilisez-le comme guide pour configurer les nœuds — pas comme un modèle à copier tel quel. Placeholders à remplacer :
[ASSISTANT_NAME]— nom de l'assistant[ASSISTANT_HOST]— URL hôte de l'assistant depuis la console Pinecone (ex.https://your-assistant-host.pinecone.io)[USER_FILE_URLS_ARRAY]— tableau JSON de chaînes URL de fichiers, ex.["https://example.com/doc.pdf"][USER_MODEL]— nom du modèle LLM, ex.gpt-5-mini[USER_TOPIC]— description courte de ce que l'assistant connaît, pour le message système
{
"nodes": [
{
"parameters": {
"options": {
"systemMessage": "You are a helpful assistant. Use the Pinecone Assistant Tool to retrieve data about [USER_TOPIC]. Include the file name and file url in citations wherever referenced in output."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [2208, 784],
"id": "e4c65881-120c-4a7c-854b-138611c8dfa3",
"name": "AI Agent"
},
{
"parameters": {
"model": {"__rl": true, "mode": "list", "value": "[USER_MODEL]"},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [2144, 1008],
"id": "b3ea858d-b62d-4022-8241-8872e403839a",
"name": "OpenAI Chat Model"
},
{
"parameters": {
"content": "## 1. Upload files to Pinecone Assistant",
"height": 384,
"width": 1104,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"position": [1616, 288],
"typeVersion": 1,
"id": "9cfcdb71-2986-47a3-8f03-250fcab1048d",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## 2. Chat with your docs",
"height": 512,
"width": 1104,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"position": [1616, 688],
"typeVersion": 1,
"id": "d7f2f4b8-2e45-4902-8949-202b8b2c699b",
"name": "Sticky Note2"
},
{
"parameters": {"options": {}},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1.3,
"position": [1840, 784],
"id": "4d2a6aa1-ca4d-4165-a635-7ef53084636b",
"name": "Chat input",
"webhookId": "4672d1f8-d2bb-4059-8761-7aa5792814c0"
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [1760, 432],
"id": "3e9529b4-d0ae-4ea8-9d27-c96e7cbd6ad9",
"name": "When clicking 'Execute workflow'"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "d0e724df-685f-4661-b2ec-3cdd3c2ba0f1",
"name": "urls",
"value": "[USER_FILE_URLS_ARRAY]",
"type": "array"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [1920, 432],
"id": "6b409421-2270-497e-a7fd-b382d192314c",
"name": "Set file urls"
},
{
"parameters": {"fieldToSplitOut": "urls", "options": {}},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [2080, 432],
"id": "e73f6f2c-4d20-48cb-b132-551ff9c3dd61",
"name": "Split to list"
},
{
"parameters": {
"url": "={{ $json.urls }}",
"options": {"response": {"response": {"responseFormat": "file"}}}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [2240, 432],
"id": "a58f8e1c-943b-4a24-8746-477ed9912ad4",
"name": "Download file"
},
{
"parameters": {
"resource": "file",
"operation": "uploadFile",
"assistantData": "{\"name\":\"[ASSISTANT_NAME]\",\"host\":\"https://[ASSISTANT_HOST]\"}",
"externalFileId": "={{ $('Split to list').item.json.urls }}",
"additionalFields": {"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill"}
},
"type": "@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant",
"typeVersion": 1.2,
"position": [2416, 432],
"id": "196122df-d2b2-43e4-9f8d-710aedb595a6",
"name": "Upload file to Assistant"
},
{
"parameters": {
"assistantData": "{\"name\":\"[ASSISTANT_NAME]\",\"host\":\"https://[ASSISTANT_HOST]\"}",
"additionalFields": {"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill"}
},
"type": "@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistantTool",
"typeVersion": 1.2,
"position": [2368, 992],
"id": "c3ba53e9-511d-47e7-b7fb-38bb093d279f",
"name": "Get context from Assistant"
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [[{"node": "AI Agent", "type": "ai_languageModel", "index": 0}]]
},
"Chat input": {
"main": [[{"node": "AI Agent", "type": "main", "index": 0}]]
},
"When clicking 'Execute workflow'": {
"main": [[{"node": "Set file urls", "type": "main", "index": 0}]]
},
"Set file urls": {
"main": [[{"node": "Split to list", "type": "main", "index": 0}]]
},
"Split to list": {
"main": [[{"node": "Download file", "type": "main", "index": 0}]]
},
"Download file": {
"main": [[{"node": "Upload file to Assistant", "type": "main", "index": 0}]]
},
"Get context from Assistant": {
"ai_tool": [[{"node": "AI Agent", "type": "ai_tool", "index": 0}]]
}
},
"pinData": {},
"meta": {"templateCredsSetupCompleted": false}
}
Autres opérations Pinecone Assistant
Upload File vs Update File — choisir la bonne opération
| Scénario | Opération à utiliser |
|---|---|
| Le fichier est garanti nouveau (jamais ingéré auparavant) | uploadFile |
| Le fichier peut déjà exister dans l'assistant (réingestion, actualisation programmée) | updateFile |
updateFile est idempotent : il trouve tous les fichiers correspondant à externalFileId, les supprime, puis charge la nouvelle version. Si aucun fichier avec cet ID n'existe, il fonctionne exactement comme uploadFile. Utilisez updateFile chaque fois qu'un workflow peut s'exécuter plus d'une fois sur les mêmes fichiers source.
Les paramètres de updateFile sont identiques à uploadFile : assistantData, externalFileId, inputDataFieldName et tous les additionalFields incluant metadata, multimodalFile et sourceTag.
{
"parameters": {
"resource": "file",
"operation": "updateFile",
"assistantData": "{\"name\":\"[ASSISTANT_NAME]\",\"host\":\"https://[ASSISTANT_HOST]\"}",
"externalFileId": "={{ $('Split to list').item.json.urls }}",
"additionalFields": {"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill"}
},
"type": "@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant",
"typeVersion": 1.2
}
List Files
Utilisez resource: "file", operation: "listFiles" pour récupérer les fichiers, optionnellement filtrés par métadonnées.
{
"parameters": {
"resource": "file",
"operation": "listFiles",
"assistantData": "{\"name\":\"[ASSISTANT_NAME]\",\"host\":\"https://[ASSISTANT_HOST]\"}",
"additionalFields": {
"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill",
"metadataFilter": {
"metadataValues": [{"key": "department", "value": "legal"}]
}
}
},
"type": "@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant",
"typeVersion": 1.2
}
Pour les filtres complexes, utilisez advancedMetadataFilter (une chaîne JSON) au lieu de metadataFilter — jamais les deux :
"additionalFields": {
"advancedMetadataFilter": "{\"department\": {\"$in\": [\"legal\", \"finance\"]}}"
}
Get Context Snippets
Utilisez resource: "contextSnippet", operation: "getContextSnippets" pour récupérer directement des morceaux de texte ou d'image pertinents — utile quand vous avez besoin du contexte récupéré brut sous forme de données de workflow plutôt que d'une réponse de chat.
{
"parameters": {
"resource": "contextSnippet",
"operation": "getContextSnippets",
"assistantData": "{\"name\":\"[ASSISTANT_NAME]\",\"host\":\"https://[ASSISTANT_HOST]\"}",
"query": "={{ $json.chatInput }}",
"additionalFields": {
"sourceTag": "n8n:n8n_nodes_pinecone_assistant:pinecone_n8n_skill",
"includeMultimodalContext": true,
"includeBinaryContent": true,
"topK": 16,
"snippetSize": 2048
}
},
"type": "@pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant",
"typeVersion": 1.2
}
Les mêmes options metadataFilter / advancedMetadataFilter fonctionnent sur getContextSnippets pour limiter la récupération aux fichiers correspondant à des métadonnées spécifiques. Le drapeau includeBinaryContent s'applique uniquement lorsque includeMultimodalContext est true.
Nœud Pinecone Vector Store — Meilleures pratiques et génération de workflow
Nom du paquet de nœud
@n8n/n8n-nodes-langchain.vectorStorePinecone
Conditions préalables
- Créez un index Pinecone dans la console Pinecone à https://app.pinecone.io/organizations/-/projects/-/indexes avec le bon nom et les bonnes dimensions avant d'exécuter le workflow
- Configurez un identifiant Pinecone dans n8n avec votre clé API
- Configurez un identifiant OpenAI dans n8n
Architecture du workflow
Workflow en deux phases avec deux instances de nœud vectorStorePinecone séparées :
Phase 1 — Ingestion (exécution unique ou programmée) :
Manual Trigger → Set file URLs → Split Out → HTTP Request (download)
→ Pinecone Vector Store (insert mode)
↑ Default Data Loader ← Recursive Character Text Splitter
↑ Embeddings OpenAI
Phase 2 — Chat :
Chat Trigger → AI Agent ← Pinecone Vector Store (retrieve-as-tool mode)
↑ Embeddings OpenAI (same model as insert)
← OpenAI Chat Model
Règles de configuration clé
- Deux instances de nœud : Utilisez un
vectorStorePineconeen modeinsertpour l'ingestion et un séparé en moderetrieve-as-toolpour le chat - Cohérence du modèle d'embedding : Le MÊME modèle d'embedding et les MÊMES dimensions DOIVENT être utilisés dans les nœuds insert et retrieve-as-tool — ils partagent un unique nœud Embeddings OpenAI via la connexion
ai_embedding - Nœuds compagnons requis pour le nœud insert :
@n8n/n8n-nodes-langchain.embeddingsOpenAi— définissez les dimensions pour correspondre à votre index (1536 pour text-embedding-3-small)@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter— se connecte au chargeur de données@n8n/n8n-nodes-langchain.documentDefaultDataLoader— définissezdataType: binaryettextSplittingMode: custom
- toolDescription : Écrivez une description claire et spécifique sur le nœud retrieve-as-tool — l'AI Agent l'utilise pour décider quand l'interroger
- topK : Utilisez 20 comme valeur par défaut ; augmentez pour une meilleure capture, diminuez pour réduire l'utilisation de tokens
- Métadonnées pour les citations : Dans le Default Data Loader, ajoutez
external_file_urlcomme champ de métadonnées défini à={{ $json.urls }}afin que l'AI Agent puisse citer les sources - Identifiant : Utilisez le type d'identifiant
pineconeApi
Conseils de chunking
- 3 000 caractères / 500 chevauche : Bon défaut pour les longs documents (articles, rapports, documentation)
- 500–1 000 caractères / 100–200 chevauche : Meilleur pour la récupération style Q&A ou le contenu court et dense
- Référence : https://www.pinecone.io/learn/chunking-strategies/
Instructions de configuration d'index
Lors de la génération d'un workflow, dites toujours à l'utilisateur de :
- Aller à https://app.pinecone.io/organizations/-/projects/-/indexes et créer un index
- Définir le nom pour correspondre à la valeur
pineconeIndexdans le workflow - Sélectionner le modèle d'embedding correspondant au nœud Embeddings de n8n (text-embedding-3-small → 1536 dimensions)
Génération du JSON de workflow pour le chemin Vector Store
Construisez le workflow pour correspondre à ce que l'utilisateur décrit réellement — ses déclencheurs, modèle d'embedding, stratégie de chunking, sources de données et structure. Posez des questions sur tout ce qui est structurellement important et qu'il n'a pas mentionné. Recourez aux valeurs par défaut ci-dessous uniquement lorsque l'utilisateur n'a pas spécifié de valeur :
- Nom d'index :
n8n-index(utilisezn8n-index-1,n8n-index-2, etc. pour plusieurs ; doit correspondre à un index Pinecone existant) - URLs de fichiers : exemples de PDFs des notes de version Pinecone
- Modèle LLM :
gpt-5-mini - Modèle d'embedding :
text-embedding-3-small(1536 dimensions) - Taille de chunk : 3 000 caractères / 500 chevauche
- Message système / description d'outil : prompt générique sur la récupération depuis l'index avec citations
Le JSON ci-dessous est une configuration de référence montrant les valeurs de paramètres correctes, les champs obligatoires et les types de connexion pour chaque nœud. Utilisez-le comme guide pour configurer les nœuds — pas comme un modèle à copier tel quel. Placeholders à remplacer :
[INDEX_NAME]— nom d'index[USER_FILE_URLS_ARRAY]— tableau JSON de chaînes URL de fichiers, ex.["https://example.com/doc.pdf"][USER_MODEL]— nom du modèle LLM, ex.gpt-5-mini[USER_TOPIC]— description courte des données, pour le message système de l'AI Agent[USER_TOOL_DESCRIPTION]— description des données contenues dans le vector store, pour le nœud outil
{
"nodes": [
{
"parameters": {
"mode": "insert",
"pineconeIndex": {
"__rl": true,
"value": "[INDEX_NAME]",
"mode": "list",
"cachedResultName": "[INDEX_NAME]"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1.3,
"position": [224, 0],
"id": "163c0a37-427c-4da7-a194-203ac216c88e",
"name": "Pinecone Vector Store"
},
{
"parameters": {
"options": {"dimensions": 1536}
},
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"typeVersion": 1.2,
"position": [336, 608],
"id": "a034bcb9-d813-4fd0-a68a-426c1f2b2aba",
"name": "Embeddings OpenAI"
},
{
"parameters": {"options": {}},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1.3,
"position": [-512, 896],
"id": "56182cf7-2bda-4513-a2f9-18fb70c718ec",
"name": "When chat message received",
"webhookId": "30328376-a9e3-4f11-b1eb-2bbaadbea688"
},
{
"parameters": {
"options": {
"systemMessage": "You are a helpful assistant. Only use the Pinecone Vector Store Tool to retrieve data about [USER_TOPIC]. Include the file name and file url in citations wherever referenced in output."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.2,
"position": [-336, 896],
"id": "36bb8361-edfd-47ff-aaf1-48f3c31fb1f7",
"name": "AI Agent"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "[USER_MODEL]",
"mode": "list",
"cachedResultName": "[USER_MODEL]"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [-336, 1200],
"id": "22d00f25-44eb-40c1-8dae-b757e4b66690",
"name": "OpenAI Chat Model"
},
{
"parameters": {
"mode": "retrieve-as-tool",
"toolDescription": "[USER_TOOL_DESCRIPTION]",
"pineconeIndex": {
"__rl": true,
"value": "[INDEX_NAME]",
"mode": "list",
"cachedResultName": "[INDEX_NAME]"
},
"topK": 20,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1.3,
"position": [-16, 1104],
"id": "15c599b7-93bb-44b7-b95c-190200de2a20",
"name": "Pinecone Vector Store Tool"
},
{
"parameters": {
"content": "## 1. Process new files, embed, and upsert to Pinecone index",
"height": 576,
"width": 1744,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"position": [-608, -80],
"typeVersion": 1,
"id": "18f22d77-fb10-4fa7-b942-2fafd7ca30c3",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## 2. Chat with your docs",
"height": 640,
"width": 1744,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"position": [-608, 784],
"typeVersion": 1,
"id": "7b7be380-821c-4012-8f1a-1606527d2544",
"name": "Sticky Note1"
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [-512, 0],
"id": "a0a3b917-765b-445e-9866-d3fc651ef6a8",
"name": "When clicking 'Execute workflow'"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "d0e724df-685f-4661-b2ec-3cdd3c2ba0f1",
"name": "urls",
"value": "[USER_FILE_URLS_ARRAY]",
"type": "array"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [-352, 0],
"id": "651439de-5525-4d0a-b055-1d722e81c0aa",
"name": "Set file urls"
},
{
"parameters": {"fieldToSplitOut": "urls", "options": {}},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [-192, 0],
"id": "8878265e-9e6f-4d9a-b533-53100205eb38",
"name": "Split to list"
},
{
"parameters": {
"chunkSize": 3000,
"chunkOverlap": 500,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"typeVersion": 1,
"position": [416, 352],
"id": "347ba65b-9fad-4b92-a90f-6690df8e2a7e",
"name": "Recursive Character Text Splitter"
},
{
"parameters": {
"url": "={{ $json.urls }}",
"options": {"response": {"response": {"responseFormat": "file"}}}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [-32, 0],
"id": "edf963af-18ee-4605-9b1e-49118c56b52d",
"name": "Download file"
},
{
"parameters": {
"dataType": "binary",
"textSplittingMode": "custom",
"options": {
"metadata": {
"metadataValues": [
{"name": "external_file_url", "value": "={{ $json.urls }}"}
]
}
}
},
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"typeVersion": 1.1,
"position": [336, 192],
"id": "e9b99301-3af1-4d19-ab78-3fd0e8946fd1",
"name": "Default data loader"
}
],
"connections": {
"Embeddings OpenAI": {
"ai_embedding": [[
{"node": "Pinecone Vector Store", "type": "ai_embedding", "index": 0},
{"node": "Pinecone Vector Store Tool", "type": "ai_embedding", "index": 0}
]]
},
"When chat message received": {
"main": [[{"node": "AI Agent", "type": "main", "index": 0}]]
},
"OpenAI Chat Model": {
"ai_languageModel": [[{"node": "AI Agent", "type": "ai_languageModel", "index": 0}]]
},
"Pinecone Vector Store Tool": {
"ai_tool": [[{"node": "AI Agent", "type": "ai_tool", "index": 0}]]
},
"When clicking 'Execute workflow'": {
"main": [[{"node": "Set file urls", "type": "main", "index": 0}]]
},
"Set file urls": {
"main": [[{"node": "Split to list", "type": "main", "index": 0}]]
},
"Split to list": {
"main": [[{"node": "Download file", "type": "main", "index": 0}]]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [[{"node": "Default data loader", "type": "ai_textSplitter", "index": 0}]]
},
"Download file": {
"main": [[{"node": "Pinecone Vector Store", "type": "main", "index": 0}]]
},
"Default data loader": {
"ai_document": [[{"node": "Pinecone Vector Store", "type": "ai_document", "index": 0}]]
}
},
"pinData": {},
"meta": {"templateCredsSetupCompleted": false}
}
Conseils de débogage
Lorsqu'un utilisateur signale un workflow défaillant, demandez quel nœud est en défaut et quelle erreur il voit, puis référencez ces problèmes courants :
| Erreur / Symptôme | Cause | Correction |
|---|---|---|
| « Assistant not found » | assistantData.name ne correspond pas à un assistant existant |
Créez l'assistant dans la console Pinecone d'abord, puis appariez le nom exactement |
| « Invalid credentials » | Clé API Pinecone non définie ou mauvais identifiant sur le nœud | Resélectionnez l'identifiant pineconeApi sur chaque nœud Pinecone |
| « Dimension mismatch » | Les dimensions du modèle d'embedding ne correspondent pas à l'index | L'index et le nœud d'embeddings doivent utiliser les mêmes dimensions (ex. 1536 pour text-embedding-3-small) |
| L'outil n'est jamais appelé par l'agent | toolDescription est vague |
Rendez la description spécifique : quelles données dans le magasin, quelles questions elle peut répondre |
| Aucun résultat renvoyé | L'ingestion n'a pas exécuté, ou topK trop bas | Exécutez la Phase 1 d'abord ; essayez d'augmenter topK à 20+ |
| Nœud HTTP appelant l'API Pinecone | Mauvais modèle | Remplacez par @pinecone-database/n8n-nodes-pinecone-assistant.pineconeAssistant ou @n8n/n8n-nodes-langchain.vectorStorePinecone |
Liste de contrôle d'examen des meilleures pratiques
Lors de l'examen d'un workflow existant :
- Pas de nœud HTTP appelant les endpoints Pinecone — remplacez tout par le nœud Pinecone approprié
- Vector Store : même nœud Embeddings connecté aux deux instances insert et retrieve-as-tool
- Assistant :
assistantDatainclutnameEThost;sourceTagest présent dansadditionalFields - toolDescription est spécifique et descriptif (pas générique comme « a vector store »)
- Métadonnées Vector Store :
external_file_urlstocké dans les métadonnées du Default Data Loader pour les citations source - Métadonnées de fichier Assistant : fichiers uploadés avec des métadonnées clé-valeur significatives quand le filtrage sera nécessaire plus tard
- Filtre de métadonnées :
listFilesetgetContextSnippetsutilisent un filtre de métadonnées (pas les deux champs de filtre à la fois) quand on limite à un sous-ensemble de fichiers - Upload multimodal :
multimodalFile: trueest défini suruploadFilequand les PDFs contiennent des images ou diagrammes — ceci est obligatoire pour indexer le contenu visuel et ce n'est PAS la valeur par défaut - Récupération multimodale :
includeMultimodalContext: trueetincludeBinaryContent: truesurgetContextSnippetsquand le workflow a besoin de morceaux d'image aux côtés du texte - Taille de chunk appropriée au type de contenu (voir conseils de chunking ci-dessus)
- L'index existe avec les bonnes dimensions avant l'exécution du workflow