Mindket

Movie recommendation chatbot on Qdrant and OpenAI

Newversion 1 · updated

Overview

An n8n workflow that recommends movies from a chat window. It loads your movie CSV into Qdrant with OpenAI embeddings, and an AI Agent asks for three picks close to what you like and far from what you do not.

Movie recommendation chatbot on Qdrant and OpenAI is an n8n workflow in the Developer category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

At a glance

Runs in
  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file and steps
  • Other items: load a CSV with the same three columns for books, products or songs
  • Another collection name: change it in Qdrant Vector Store and in the two Qdrant addresses

Platform

Connects 2 apps

How it works

Trigger

Chat window

You load the movies once by hand, then it answers whenever you send a message in the n8n chat:

  • A request for a movie, typed in the chat, ideally with what you like and what you do not

Actions

  1. Test workflow downloads your CSV of movies and reads each row
  2. OpenAI (text-embedding-3-small) turns each description into an embedding, and the movies are saved in a Qdrant collection named movies
  3. A chat message goes to an AI Agent (gpt-5.6-terra) with a short window memory
  4. The agent hands a liked and a disliked description to a tool, which embeds both and asks Qdrant for the 3 best matches
  5. The tool fetches the name, year and description of each match, and the agent lists them best first

Result

Three movie recommendations in the n8n chat, each with its year and a line about it, close to what you liked and far from what you did not

Integrations

What you need before you start.

OpenAI

Language model and embeddings

Makes the embeddings for the movies and for each request, and runs the agent on gpt-5.6-terra.

NeedsAn OpenAI API key

Qdrant

Vector database

Stores the embedded descriptions and returns the movies closest to a liked example and furthest from a disliked one.

NeedsA Qdrant address and an API key

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
19 steps, starting when another workflow calls it, by hand or on a chat message
AI
2 steps call an AI model: Qdrant Vector Store and AI Agent
Sign-ins
Signs in to: OpenAI and Qdrant
API keys
No API key is left in the file
Step types
Mindket’s checker reads all 11 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow is a movie recommendation chatbot. One part loads a CSV of movies into a Qdrant collection, with an OpenAI embedding for each description. The other part is a chat window, where an AI Agent turns a request into a liked and a disliked example and calls a tool. The tool asks Qdrant for the three closest movies and returns their names, years and descriptions. Twenty-five nodes do the work, beside two sticky notes.

Who it suits

Developers and data teams who want to see recommendation by example in n8n, and anyone who wants to adapt it to products, articles or other items with a short description. Skip it if you want picks based on viewing history. It compares descriptions only.

Who uses it, and how
IndustryWho uses itHow they use itExample
MediaProduct managersPrototype a recommender before building oneA manager loads a film list and tests whether the picks feel right.
RetailE-commerce teamsSwap movies for products that have short descriptionsA team loads its catalog and asks for gifts like one item but not like another.
EducationData course teachersTeach vector search and recommendation with a small fileA teacher runs the load in class, then tries three requests.
SoftwareDevelopersStudy how an agent calls a tool that is another workflowA developer reads the tool node and reuses the pattern for a different lookup.

You need a little n8n: import a file, add two credentials, set two addresses and prepare a CSV of movies.

Where to use it

Any n8n that can reach OpenAI, your Qdrant and the CSV’s address will run it. The chat opens inside n8n, so the picks stay in your editor.

  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file and steps
  • Other items: load a CSV with the same three columns for books, products or songs
  • Another collection name: change it in Qdrant Vector Store and in the two Qdrant addresses

Setup

Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Qdrant can be a cloud cluster or a server of your own.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own
OpenAIAn API key, for an OpenAI credential
QdrantAn address and an API key, for a Qdrant credential
A movie CSVA file at a web address, with the columns Movie Name, Year of Release and Description
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Add an OpenAI credential and select it in Embeddings OpenAI, OpenAI Chat Model, Embedding Recommendation Request with Open AI and Embedding Anti-Recommendation Request with Open AI.
  3. Add a Qdrant credential and select it in Qdrant Vector Store, Calling Qdrant Recommendation API and Retrieving Recommended Movies Meta Data.
  4. In those two HTTP Request nodes, replace <YOUR_QDRANT_URL> with your Qdrant address, such as https://your-cluster.cloud.qdrant.io:6333.
  5. In Download movies CSV, replace <YOUR_CSV_URL> with the address of your CSV.
  6. Save the workflow, click Test workflow on the manual trigger and wait for it to finish.
  7. Open the chat and ask for a recommendation.

How to use it

Open the chat and say what you want and what you do not, for example a light romantic comedy but nothing gory. The agent hands the tool a liked and a disliked description, then lists three movies, best first, without their scores. It keeps the last few messages as memory.

What to change for a different result
To changeWhere
The CSVThe address in Download movies CSV, and the column names in Default Data Loader
The collection nameQdrant Vector Store and the two Qdrant addresses
How many movies come backlimit in Calling Qdrant Recommendation API, and the system message
The agent’s mannerSystem Message in AI Agent
What the tool is toldDescription and input schema in Call n8n Workflow Tool
The modelModel in OpenAI Chat Model

Example

A product manager types that she wants something like a warm romantic comedy, but not a gory horror film. The agent passes the first phrase as the liked example and the second as the disliked one.

The tool embeds both and asks Qdrant for the three movies that sit closest to the liked example and furthest from the disliked one. The agent replies with three films, their years and a line about each.

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This file holds two flows. The first loads the movies once. The second is a chat whose agent calls a tool, and that tool is the lower group of boxes in this same workflow.

For experts. Call n8n Workflow Tool finds its own workflow with $workflow.id, so no id needs editing, and Execute Workflow Trigger receives the agent’s two strings under query. The Qdrant calls are plain HTTP Request nodes, since the recommend query is not a mode of the Qdrant node.

Where to look closer
NodeWhat it doesWhat to know
Download movies CSVHTTP Request 4.2, with a file responseIt hands the CSV to Extract from File as binary data
Extract from FileExtract From File 1, CSVEach row becomes one item, with the column names as keys
Default Data Loader and Token SplitterOne document per descriptionThe metadata keeps movie_name, movie_release_date and movie_description
Qdrant Vector StoreInsert into the movies collection, with Embeddings OpenAIIt creates the collection when it is missing, sized to the embeddings and with Cosine distance
AI AgentAgent 1.6 with a system message, a window memory and one toolIt runs as a Tools Agent
Call n8n Workflow ToolTool Workflow 1.2 with an input schema of two stringsThe sub-workflow gets them as query.positive_example and query.negative_example
Calling Qdrant Recommendation APIHTTP Request, POST to /points/query with recommendAverage vector strategy, limit 3, and only ids and scores come back
Retrieving Recommended Movies Meta DataHTTP Request, POST to /pointsIt fetches each id’s payload so that Merge1 can join on the id

Good to know

The original needed fixes before it could work for anyone else, and it still needs your own CSV and Qdrant address.

  • Models: OpenAI’s deprecations page, read on 12 November 2026, lists gpt-4o-mini as shutting down on 14 January 2027. Its replacement, gpt-6-luna, supports function calling in Chat Completions only with reasoning effort off, so Mindket’s copy uses gpt-5.6-terra for the agent. The page does not list the embedding model text-embedding-3-small
  • Your own data: the original read a CSV from its author’s own repository and called its author’s own Qdrant cluster. Mindket’s copy asks for <YOUR_CSV_URL> and <YOUR_QDRANT_URL>
  • Collection name: the original loaded a collection named imdb but searched imdb_1000_open_ai, so a fresh setup searched an empty or missing collection. Mindket’s copy uses movies for both
  • Release year: the original read a field named release_year that the loader never wrote, so the year came back empty. Mindket’s copy reads movie_release_date
  • Request bodies: the Qdrant bodies are built with JSON.stringify, so a vector cannot be joined into the text the wrong way, and the id list follows the number of results
  • A dislike is needed: the tool asks for a liked and a disliked description, so a request that names no dislike leaves the agent to make one up
  • Run the load once: loading twice stores every movie again under a new id, and a movie can then appear twice in the picks
  • Memory: the agent’s window memory lives in n8n’s own memory, is cleared after an idle hour and does not suit queue mode
  • Billing: each chat turn uses an agent call and two embeddings, and the load embeds one description per row, all billed by OpenAI
  • Your data: your requests go to OpenAI, and the movie descriptions go to OpenAI and Qdrant
  • Credentials: the JSON holds none, so add the OpenAI and Qdrant credentials yourself

README and files

README

Movie recommendation chatbot on Qdrant and OpenAI

An n8n workflow that is a movie recommendation chatbot. One part loads a CSV of movies into a Qdrant collection, with an OpenAI
embedding for each description. The other part is a chat window. Its AI Agent turns a request into a liked and a disliked example,
then asks a tool for the three closest movies.

What is inside

  • workflow.json: the workflow as n8n exports it, twenty-five working nodes and two sticky notes. It holds no credential.
  • README.md: these notes.

What we changed from the original copy

  • The CSV was read from the author's own repository with a GitHub node. Mindket's copy uses an HTTP Request node, `Download movies
    CSV, with <YOUR_CSV_URL>` for you to fill in.
  • The two Qdrant requests called the author's own cluster. They now start with <YOUR_QDRANT_URL>.
  • The original loaded a collection named imdb but searched imdb_1000_open_ai. Both now use movies.
  • The year of release was read from a field the loader never wrote, so it came back empty. Selecting Fields Relevant for Agent
    now reads movie_release_date.
  • The two embedding requests carried a stray Authorization header written as plain text. It is gone, and the OpenAI credential does
    the signing.
  • Both Qdrant request bodies are built with JSON.stringify, so a vector can never be joined into the text the wrong way.
  • Call n8n Workflow Tool now finds its own workflow with $workflow.id, so there is no id to edit.
  • The agent's model is gpt-5.6-terra in place of gpt-4o-mini. See Good to know.
  • Pinned sample data was removed, and the two sticky notes were rewritten.

Before you start

  • An n8n instance, on n8n Cloud or your own server.
  • An OpenAI API key.
  • A Qdrant address and an API key. A cloud cluster or your own server both work.
  • A movie CSV at a web address, with the columns Movie Name, Year of Release and Description.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Add an OpenAI credential and select it in Embeddings OpenAI, OpenAI Chat Model, `Embedding Recommendation Request with Open
    AI and Embedding Anti-Recommendation Request with Open AI`.
  3. Add a Qdrant credential and select it in Qdrant Vector Store, Calling Qdrant Recommendation API and `Retrieving Recommended
    Movies Meta Data`.
  4. In those two HTTP Request nodes, replace <YOUR_QDRANT_URL> with your Qdrant address, such as
    https://your-cluster.cloud.qdrant.io:6333.
  5. In Download movies CSV, replace <YOUR_CSV_URL> with the address of your CSV.
  6. Save the workflow, click Test workflow on the manual trigger and wait for it to finish. The movies collection is created on
    the first run.
  7. Open the chat and ask for a recommendation.

How a run goes

Loading, from the manual trigger:

  1. Download movies CSV fetches the file and Extract from File turns each row into an item.
  2. Default Data Loader makes one document per description, with the name, year and description kept as metadata.
  3. Embeddings OpenAI turns each document into a vector, and Qdrant Vector Store saves it in the movies collection.

Chatting, from the chat trigger:

  1. When chat message received hands the message to AI Agent, which has a window memory and a system message.
  2. The agent calls Call n8n Workflow Tool with a liked and a disliked description.
  3. In the same workflow, Execute Workflow Trigger receives them and the two embedding requests turn them into vectors.
  4. Calling Qdrant Recommendation API asks for the three best matches, and Retrieving Recommended Movies Meta Data fetches their
    details.
  5. Merge1 joins scores and details by id, Aggregate bundles them, and the agent writes the reply.

Change the look

  • The CSV: the address in Download movies CSV, and the column names in Default Data Loader.
  • The collection name: Qdrant Vector Store and the two Qdrant addresses.
  • How many movies come back: limit in Calling Qdrant Recommendation API, and the system message.
  • The agent's manner: System Message in AI Agent.
  • What the tool is told: Description and input schema in Call n8n Workflow Tool.

Good to know

  • OpenAI's deprecations page, read on 12 November 2026, lists gpt-4o-mini as shutting down on 14 January 2027 with gpt-6-luna
    as the replacement. The model page for gpt-6-luna says Chat Completions supports function calling only with reasoning effort
    off, so the agent uses gpt-5.6-terra. The page does not list the embedding model text-embedding-3-small.
  • A request that names no dislike leaves the agent to make one up, since the tool asks for both.
  • Run the load once. Loading twice stores every movie again under a new id, and a movie can then appear twice in the picks.
  • The agent's window memory lives in n8n's own memory, is cleared after an idle hour and does not suit queue mode.
  • Each chat turn uses an agent call and two embeddings, and the load embeds one description per row.
  • Your requests go to OpenAI, and the movie descriptions go to OpenAI and Qdrant.
Files
NOTICE.md  696 B
README.md  5 KB
workflow.json  18 KB

3 files, 24 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-12

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

Bonsai-27B-GGUF

lmstudio-community · Kit

A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…

New

Runs DeepSeek-V4.1-Flash-1017 as a 2.9 bits-per-weight EXL3 quantization, a 196 GiB copy for people serving large models on their own hardware. Perplexity stay…

New

MusicGen Small

facebook · Kit

Generates short music clips from a text description or an audio prompt, in the small checkpoint of facebook's MusicGen. It suits developers and music hobbyists…

New

Similar in Developer

See all in Developer

Lexnet

alpindale · Kit

Tags every character of C source code for syntax highlighting with a tiny neural network of about 984 weights, run through a small C program. For developers an…

New

FLUX.2 Klein LoRA Studio

prithivMLmods · Kit

Try a set of LoRAs for the FLUX.2 Klein image model in a Gradio app that runs in your browser or on your own computer. Made for people who make or test AI imag…

New

anaksor-ocr

Sokheng · Kit

Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…

New