This skill enables AI agents to design, build, and troubleshoot production-grade Qdrant ingestion and retrieval pipelines in n8n. It covers the full lifecycle: source data extraction → chunking → metadata enrichment → vector embedding → Qdrant upsert → retrieval (dense, sparse, hybrid) → RAG response generation.
Always read the supporting docs in /docs/ before building workflows:
docs/NODE-REFERENCE.md — Every Qdrant node, mode, and parameter explaineddocs/INGESTION-PIPELINE.md — Step-by-step ingestion architecturedocs/RAG-RETRIEVAL.md — Dense, sparse, and hybrid retrieval patternsdocs/CHUNKING-METADATA.md — Chunking strategies and metadata schema designdocs/examples/ — Annotated workflow JSON examplesn8n has two separate Qdrant integration systems — knowing which to use is critical:
n8n-nodes-qdrant)#n8n-nodes-qdrant (community node, install via n8n Settings → Community Nodes)QdrantQdrant Vector Store ( @n8n/n8n-nodes-langchain.vectorStoreQdrant)insert (ingest documents), retrieve (similarity search), retrieve-as-tool (AI agent tool)Rule of thumb: Use LangChain Vector Store for LangChain-native agent/RAG flows. Use the Official Qdrant Node for direct API control, hybrid search, payload operations, and production ingestion pipelines.
GoalUse This NodeMode/OperationIngest documents via LangChain chainLangChain Vector StoreinsertAI Agent retrieves from Qdrant as toolLangChain Vector Storeretrieve-as-toolRun hybrid (dense+sparse) searchOfficial Qdrant NodeSearch → Query PointsCreate/manage collectionsOfficial Qdrant NodeCollection → Create CollectionUpsert raw points with custom payloadsOfficial Qdrant NodePoint → Upsert PointsDelete points by filter (e.g. file_id)Official Qdrant NodePoint → Delete PointsScroll all points for audit/exportOfficial Qdrant NodePoint → Scroll PointsBatch ingest large datasetsOfficial Qdrant NodePoint → Batch Update Points
text
[Trigger]
│
▼
[Source Node] ──────────────────────────────────────────────
(Slack, Fireflies, Google Drive, HTTP, DB, etc.) │
│ │
▼ │
[Split in Batches] ←── Loop for large datasets │
│ │
▼ │
[Extract/Normalize] │
(Set node: build content string + raw metadata) │
│ │
▼ │
[AI: Extract Metadata] │
(Information Extractor or LLM Chain) │
Produces: themes, keywords, entities, summary, tags │
│ │
▼ │
[Text Splitter] │
(Token Splitter or Recursive Character Splitter) │
chunkSize: 512–2000 tokens, overlap: 10–15% │
│ │
▼ │
[Embeddings Node] │
(OpenAI text-embedding-3-large or similar) │
│ │
▼ │
[Qdrant Vector Store — insert mode] OR │
[Official Qdrant Node — Upsert Points] │
│ │
▼ │
[Wait Node] ←── Rate limiting / backpressure │
│ │
└─────────────────── back to Split in Batches ───────────┘
See docs/INGESTION-PIPELINE.md for full node-by-node configuration.
text
[Chat Trigger / Webhook]
│
▼
[AI Agent Node]
│
├── [LLM: Gemini / GPT-4o / Claude]
├── [Memory: Window Buffer Memory]
└── [Tool: Qdrant Vector Store — retrieve-as-tool]
│
└── [Embeddings Node]
For hybrid search (dense + sparse), use the Official Qdrant Node → Query Points with a prefetch array combining dense and sparse queries + RRF fusion. See docs/RAG-RETRIEVAL.md.
qdrantApiURL (e.g. https://your-cluster.cloud.qdrant.io) + API KeyqdrantApi (same credential, shared)http://qdrant:6333/QDRANT_API_KEY=your_key in docker-compose environmentUse consistent naming across workflows:
ElementConventionExampleCollection name{org}-{source}-{content-type}``acme-slack-messagesMetadata key for source IDsource_id``"source_id": "C01234-1709123456"Metadata key for document IDdoc_id``"doc_id": "file_abc123"Metadata key for chunk indexchunk_index``"chunk_index": 3Metadata key for timestampcreated_atISO 8601 stringMetadata key for source typesource_type``"slack", "fireflies", "gdrive"Metadata key for channel/foldersource_context``"#engineering"
file_id or doc_id in metadata — enables targeted deletion without full collection wipeonError: continueRegularOutput on the Qdrant Vector Store node — prevents single-item failures from crashing the whole batchretryOnFail: true on the Qdrant node for production ingestionSplit in Batches with a Wait node for large datasets — prevents API rate limit errors and memory exhaustion