Qdrant Memory
Vector store memory for AI agents — stores conversation history in Qdrant and retrieves semantically relevant past context.
Use Qdrant Memory when:
- The agent needs to recall information from conversations that happened days or weeks ago
- You need semantic search ("find messages where the user talked about billing") rather than just recent messages
- You are building long-running assistants, knowledge workers, or support agents with persistent context
- A sliding message window alone is not enough — the agent forgets important context from earlier
For short conversations or prototyping, Window Memory is simpler and has no external dependencies.
None. Qdrant Memory is a sub-node — it does not accept data from the main workflow. Connect its Memory output handle to an AI Agent's Memory input handle (dashed purple edge).
None — memory is consumed internally by the connected AI Agent and does not emit data to the main workflow.
| Handle | Type | Description |
|---|---|---|
memory | memory | Connect to an AI Agent's Memory input. Only one memory provider can be connected per agent. |
| Setting | Type | Default | Description |
|---|---|---|---|
qdrantUrl | string | http://localhost:6333 | Qdrant server URL (e.g. http://localhost:6333 or https://your-cluster.qdrant.io). Supports {{ }} bindings. |
collectionName | string | tensorify_memory | Qdrant collection name. Auto-created on first use if it does not exist. |
embeddingModel | select | text-embedding-3-small | OpenAI embedding model for vectorizing messages. Options: text-embedding-3-small (1536d, fast), text-embedding-3-large (3072d, accurate), text-embedding-ada-002 (1536d, legacy). |
topK | number | 5 | Number of semantically similar past messages to retrieve. |
recentWindow | number | 4 | Number of most recent messages to always include for immediate context. |
sessionKey | string | "" | Per-user or per-thread scope key. Supports {{ }} bindings, e.g. user:{{ input.body.user_id }}. |
Configure on the Environment Variables page:
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY | Yes | OpenAI API key for generating text embeddings. Create one at platform.openai.com/api-keys. |
QDRANT_API_KEY | No | Qdrant API key. Required when your Qdrant instance uses API key authentication (e.g. Qdrant Cloud). See Qdrant authentication docs. |
Build a support agent with long-term memory:
- Add an API Endpoint trigger with
openai-chatprotocol - Add an AI Agent node with a customer support system prompt
- Add a Qdrant Memory node and connect its
Memoryhandle to the agent'sMemoryhandle - Configure Qdrant Memory:
- Qdrant URL: your Qdrant Cloud cluster URL
- Collection Name:
tensorify_memory - Embedding Model:
text-embedding-3-small - Top K:
5 - Recent Window:
4 - Session Key:
customer:{{ "{{ api_request.body.customer_id }}" }}
- Add
OPENAI_API_KEY(andQDRANT_API_KEYif using Qdrant Cloud) to Environment Variables - Connect the agent's
responseoutput to a Return node
The agent remembers recent messages and recalls semantically relevant past interactions — even if the customer has not contacted you in weeks.
Hybrid retrieval: On each message, Qdrant Memory returns the recentWindow most recent messages plus up to topK semantically similar older messages (deduplicated). New user and assistant messages are embedded and stored in Qdrant after each turn.
import api from @tensorify/api-trigger:1.0.0
import agent from @tensorify/ai-agent:1.0.0
import memory from @tensorify/memory-qdrant:1.0.0
import respond from @tensorify/return:3.0.0
node api @tensorify/api-trigger:1.0.0 {
path = "/v1"
method = "POST"
responseMode = "use-workflow-response"
protocol = "openai-chat"
}
node agent @tensorify/ai-agent:1.0.0 {
provider = "openai"
model = "gpt-4o"
systemPrompt = "You are a helpful customer support agent."
}
node memory @tensorify/memory-qdrant:1.0.0 {
qdrantUrl = "https://your-cluster.qdrant.io"
collectionName = "tensorify_memory"
embeddingModel = "text-embedding-3-small"
topK = 5
recentWindow = 4
sessionKey = "customer:{{ api_request.body.customer_id }}"
}
node respond @tensorify/return:3.0.0 {
returnMode = "simple"
}
api.payload -> agent.message
memory.memory -> agent.memory
agent.response -> respond.input
- Qdrant must be reachable: The plugin connects to Qdrant via HTTP. If the server is unreachable, memory load/save fails and the agent runs without conversation context.
- Embedding costs: Every
load()andsave()call makes OpenAI embedding API requests. Withtext-embedding-3-small, this is very affordable (~$0.02 per million tokens). - Collection auto-creation: The collection is created automatically on first use with vector dimensions matching your chosen embedding model.
- Session key in production: Without a
sessionKey, all users share the same memory space. Always set a session key in production. - Embedding model changes: Switching
embeddingModelafter data is stored requires a new collection — vector dimensions differ between models. - Only one memory provider: An agent accepts a single memory connection. You cannot combine Qdrant Memory and Window Memory on the same agent.
- AI Agent — the agent that uses this memory
- Window Memory — simpler sliding window memory
- Agent Memory Guide — choosing and configuring memory
- Build a RAG System — guide using Qdrant Memory for document Q&A
