Automatisation n8n : recommandations de films avec OpenAI
Ce workflow n8n a pour objectif de créer un chatbot capable de recommander des films en utilisant les capacités d'OpenAI et de Qdrant. Dans un contexte où les utilisateurs cherchent des recommandations personnalisées, ce système permet d'extraire des données pertinentes et de générer des suggestions adaptées. Les entreprises de divertissement, les plateformes de streaming ou même les développeurs d'applications peuvent tirer parti de cette automatisation n8n pour améliorer l'expérience utilisateur.
- Étape 1 : le workflow est déclenché manuellement par l'utilisateur.
- Étape 2 : il interroge GitHub pour récupérer des fichiers nécessaires à l'extraction des données.
- Étape 3 : les données sont ensuite traitées et transformées en embeddings via OpenAI.
- Étape 4 : le chatbot reçoit des messages et utilise un modèle de langage pour répondre aux requêtes.
- Étape 5 : les recommandations sont générées en interrogeant l'API de Qdrant, qui stocke les vecteurs des films. Enfin, les résultats sont filtrés et présentés à l'utilisateur. En intégrant ce workflow, les entreprises peuvent offrir des recommandations de films pertinentes, augmentant ainsi l'engagement des utilisateurs et améliorant leur satisfaction.
Workflow n8n OpenAI, recommandations, chatbot, Qdrant : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n OpenAI, recommandations, chatbot, Qdrant : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "a58HZKwcOy7lmz56",
"meta": {
"instanceId": "178ef8a5109fc76c716d40bcadb720c455319f7b7a3fd5a39e4f336a091f524a",
"templateCredsSetupCompleted": true
},
"name": "Building RAG Chatbot for Movie Recommendations with Qdrant and Open AI",
"tags": [],
"nodes": [
{
"id": "06a34e3b-519a-4b48-afd0-4f2b51d2105d",
"name": "When clicking ‘Test workflow’",
"type": "n8n-nodes-base.manualTrigger",
"position": [
4980,
740
],
"parameters": {},
"typeVersion": 1
},
{
"id": "9213003d-433f-41ab-838b-be93860261b2",
"name": "GitHub",
"type": "n8n-nodes-base.github",
"position": [
5200,
740
],
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "mrscoopers"
},
"filePath": "Top_1000_IMDB_movies.csv",
"resource": "file",
"operation": "get",
"repository": {
"__rl": true,
"mode": "list",
"value": "n8n_demo",
"cachedResultUrl": "https://github.com/mrscoopers/n8n_demo",
"cachedResultName": "n8n_demo"
},
"additionalParameters": {}
},
"credentials": {
"githubApi": {
"id": "VbfC0mqEq24vPIwq",
"name": "GitHub n8n demo"
}
},
"typeVersion": 1
},
{
"id": "9850d1a9-3a6f-44c0-9f9d-4d20fda0b602",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
5360,
740
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "7704f993-b1c9-477a-8b5a-77dc2cb68161",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
5560,
940
],
"parameters": {
"model": "text-embedding-3-small",
"options": {}
},
"credentials": {
"openAiApi": {
"id": "deYJUwkgL1Euu613",
"name": "OpenAi account 2"
}
},
"typeVersion": 1
},
{
"id": "bc6dd8e5-0186-4bf9-9c60-2eab6d9b6520",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
5700,
960
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "movie_name",
"value": "={{ $('Extract from File').item.json['Movie Name'] }}"
},
{
"name": "movie_release_date",
"value": "={{ $('Extract from File').item.json['Year of Release'] }}"
},
{
"name": "movie_description",
"value": "={{ $('Extract from File').item.json.Description }}"
}
]
}
},
"jsonData": "={{ $('Extract from File').item.json.Description }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "f87ea014-fe79-444b-88ea-0c4773872b0a",
"name": "Token Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter",
"position": [
5700,
1140
],
"parameters": {},
"typeVersion": 1
},
{
"id": "d8d28cec-c8e8-4350-9e98-cdbc6da54988",
"name": "Qdrant Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
5600,
740
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "imdb"
}
},
"credentials": {
"qdrantApi": {
"id": "Zin08PA0RdXVUKK7",
"name": "QdrantApi n8n demo"
}
},
"typeVersion": 1
},
{
"id": "f86e03dc-12ea-4929-9035-4ec3cf46e300",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
4920,
1140
],
"webhookId": "71bfe0f8-227e-466b-9d07-69fd9fe4a27b",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "ead23ef6-2b6b-428d-b412-b3394bff8248",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
5040,
1340
],
"parameters": {
"model": "gpt-4o-mini",
"options": {}
},
"credentials": {
"openAiApi": {
"id": "deYJUwkgL1Euu613",
"name": "OpenAi account 2"
}
},
"typeVersion": 1
},
{
"id": "7ab936e1-aac8-43bc-a497-f2d02c2c19e5",
"name": "Call n8n Workflow Tool",
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"position": [
5320,
1340
],
"parameters": {
"name": "movie_recommender",
"schemaType": "manual",
"workflowId": {
"__rl": true,
"mode": "id",
"value": "a58HZKwcOy7lmz56"
},
"description": "Call this tool to get a list of recommended movies from a vector database. ",
"inputSchema": "{\n\"type\": \"object\",\n\"properties\": {\n\t\"positive_example\": {\n \"type\": \"string\",\n \"description\": \"A string with a movie description matching the user's positive recommendation request\"\n },\n \"negative_example\": {\n \"type\": \"string\",\n \"description\": \"A string with a movie description matching the user's negative anti-recommendation reuqest\"\n }\n}\n}",
"specifyInputSchema": true
},
"typeVersion": 1.2
},
{
"id": "ce55f334-698b-45b1-9e12-0eaa473187d4",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
5160,
1340
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "41c1ee11-3117-4765-98fc-e56cc6fc8fb2",
"name": "Execute Workflow Trigger",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
5640,
1600
],
"parameters": {},
"typeVersion": 1
},
{
"id": "db8d6ab6-8cd2-4a8c-993d-f1b7d7fdcffd",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
6540,
1500
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3
},
{
"id": "c7bc5e04-22b1-40db-ba74-1ab234e51375",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
7260,
1480
],
"parameters": {
"options": {},
"fieldToSplitOut": "result"
},
"typeVersion": 1
},
{
"id": "a2002d2e-362a-49eb-a42d-7b665ddd67a0",
"name": "Split Out1",
"type": "n8n-nodes-base.splitOut",
"position": [
7140,
1260
],
"parameters": {
"options": {},
"fieldToSplitOut": "result.points"
},
"typeVersion": 1
},
{
"id": "f69a87f1-bfb9-4337-9350-28d2416c1580",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"position": [
7520,
1400
],
"parameters": {
"mode": "combine",
"options": {},
"fieldsToMatchString": "id"
},
"typeVersion": 3
},
{
"id": "b2f2529e-e260-4d72-88ef-09b804226004",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
7960,
1400
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "response"
},
"typeVersion": 1
},
{
"id": "bedea10f-b4de-4f0e-9d60-cc8117a2b328",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
5140,
1140
],
"parameters": {
"options": {
"systemMessage": "You are a Movie Recommender Tool using a Vector Database under the hood. Provide top-3 movie recommendations returned by the database, ordered by their recommendation score, but not showing the score to the user."
}
},
"typeVersion": 1.6
},
{
"id": "e04276b5-7d69-437b-bf4f-9717808cc8f6",
"name": "Embedding Recommendation Request with Open AI",
"type": "n8n-nodes-base.httpRequest",
"position": [
5900,
1460
],
"parameters": {
"url": "https://api.openai.com/v1/embeddings",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "input",
"value": "={{ $json.query.positive_example }}"
},
{
"name": "model",
"value": "text-embedding-3-small"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer $OPENAI_API_KEY"
}
]
},
"nodeCredentialType": "openAiApi"
},
"credentials": {
"openAiApi": {
"id": "deYJUwkgL1Euu613",
"name": "OpenAi account 2"
}
},
"typeVersion": 4.2
},
{
"id": "68e99f06-82f5-432c-8b31-8a1ae34981a6",
"name": "Embedding Anti-Recommendation Request with Open AI",
"type": "n8n-nodes-base.httpRequest",
"position": [
5920,
1660
],
"parameters": {
"url": "https://api.openai.com/v1/embeddings",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "input",
"value": "={{ $json.query.negative_example }}"
},
{
"name": "model",
"value": "text-embedding-3-small"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer $OPENAI_API_KEY"
}
]
},
"nodeCredentialType": "openAiApi"
},
"credentials": {
"openAiApi": {
"id": "deYJUwkgL1Euu613",
"name": "OpenAi account 2"
}
},
"typeVersion": 4.2
},
{
"id": "ecb1d7e1-b389-48e8-a34a-176bfc923641",
"name": "Extracting Embedding",
"type": "n8n-nodes-base.set",
"position": [
6180,
1460
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "01a28c9d-aeb1-48bb-8a73-f8bddbd73460",
"name": "positive_example",
"type": "array",
"value": "={{ $json.data[0].embedding }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4ed11142-a734-435f-9f7a-f59e2d423076",
"name": "Extracting Embedding1",
"type": "n8n-nodes-base.set",
"position": [
6180,
1660
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "01a28c9d-aeb1-48bb-8a73-f8bddbd73460",
"name": "negative_example",
"type": "array",
"value": "={{ $json.data[0].embedding }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ce3aa9bc-a5b1-4529-bff5-e0dba43b99f3",
"name": "Calling Qdrant Recommendation API",
"type": "n8n-nodes-base.httpRequest",
"position": [
6840,
1500
],
"parameters": {
"url": "https://edcc6735-2ffb-484f-b735-3467043828fe.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/imdb_1000_open_ai/points/query",
"method": "POST",
"options": {},
"jsonBody": "={\n \"query\": {\n \"recommend\": {\n \"positive\": [[{{ $json.positive_example }}]],\n \"negative\": [[{{ $json.negative_example }}]],\n \"strategy\": \"average_vector\"\n }\n },\n \"limit\":3\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "qdrantApi"
},
"credentials": {
"qdrantApi": {
"id": "Zin08PA0RdXVUKK7",
"name": "QdrantApi n8n demo"
}
},
"typeVersion": 4.2
},
{
"id": "9b8a6bdb-16fe-4edc-86d0-136fe059a777",
"name": "Retrieving Recommended Movies Meta Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
7060,
1460
],
"parameters": {
"url": "https://edcc6735-2ffb-484f-b735-3467043828fe.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/imdb_1000_open_ai/points",
"method": "POST",
"options": {},
"jsonBody": "={\n \"ids\": [\"{{ $json.result.points[0].id }}\", \"{{ $json.result.points[1].id }}\", \"{{ $json.result.points[2].id }}\"],\n \"with_payload\":true\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "qdrantApi"
},
"credentials": {
"qdrantApi": {
"id": "Zin08PA0RdXVUKK7",
"name": "QdrantApi n8n demo"
}
},
"typeVersion": 4.2
},
{
"id": "28cdcad5-3dca-48a1-b626-19eef657114c",
"name": "Selecting Fields Relevant for Agent",
"type": "n8n-nodes-base.set",
"position": [
7740,
1400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b4b520a5-d0e2-4dcb-af9d-0b7748fd44d6",
"name": "movie_recommendation_score",
"type": "number",
"value": "={{ $json.score }}"
},
{
"id": "c9f0982e-bd4e-484b-9eab-7e69e333f706",
"name": "movie_description",
"type": "string",
"value": "={{ $json.payload.content }}"
},
{
"id": "7c7baf11-89cd-4695-9f37-13eca7e01163",
"name": "movie_name",
"type": "string",
"value": "={{ $json.payload.metadata.movie_name }}"
},
{
"id": "1d1d269e-43c7-47b0-859b-268adf2dbc21",
"name": "movie_release_year",
"type": "string",
"value": "={{ $json.payload.metadata.release_year }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "56e73f01-5557-460a-9a63-01357a1b456f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
5560,
1780
],
"parameters": {
"content": "Tool, calling Qdrant's recommendation API based on user's request, transformed by AI agent"
},
"typeVersion": 1
},
{
"id": "cce5250e-0285-4fd0-857f-4b117151cd8b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
4680,
720
],
"parameters": {
"content": "Uploading data (movies and their descriptions) to Qdrant Vector Store\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {
"Execute Workflow Trigger": [
{
"json": {
"query": {
"negative_example": "horror bloody movie",
"positive_example": "romantic comedy"
}
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "40d3669b-d333-435f-99fc-db623deda2cb",
"connections": {
"Merge": {
"main": [
[
{
"node": "Calling Qdrant Recommendation API",
"type": "main",
"index": 0
}
]
]
},
"GitHub": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Selecting Fields Relevant for Agent",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Split Out1": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Token Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Qdrant Vector Store",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Extracting Embedding": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Extracting Embedding1": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Call n8n Workflow Tool": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Execute Workflow Trigger": {
"main": [
[
{
"node": "Embedding Recommendation Request with Open AI",
"type": "main",
"index": 0
},
{
"node": "Embedding Anti-Recommendation Request with Open AI",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Calling Qdrant Recommendation API": {
"main": [
[
{
"node": "Retrieving Recommended Movies Meta Data",
"type": "main",
"index": 0
},
{
"node": "Split Out1",
"type": "main",
"index": 0
}
]
]
},
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "GitHub",
"type": "main",
"index": 0
}
]
]
},
"Selecting Fields Relevant for Agent": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Retrieving Recommended Movies Meta Data": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Embedding Recommendation Request with Open AI": {
"main": [
[
{
"node": "Extracting Embedding",
"type": "main",
"index": 0
}
]
]
},
"Embedding Anti-Recommendation Request with Open AI": {
"main": [
[
{
"node": "Extracting Embedding1",
"type": "main",
"index": 0
}
]
]
}
}
}Workflow n8n OpenAI, recommandations, chatbot, Qdrant : pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises du secteur du divertissement, aux développeurs d'applications et aux équipes marketing cherchant à améliorer l'interaction avec leurs utilisateurs. Un niveau technique intermédiaire est recommandé pour une mise en œuvre efficace.
Workflow n8n OpenAI, recommandations, chatbot, Qdrant : problème résolu
Ce workflow résout le problème de la recherche de recommandations de films en automatisant le processus d'extraction et de suggestion, ce qui élimine les frustrations liées à la recherche manuelle. Grâce à cette automatisation n8n, les utilisateurs obtiennent des suggestions personnalisées rapidement, ce qui améliore leur expérience et augmente le temps passé sur la plateforme. En réduisant les délais de réponse et en offrant des recommandations précises, les entreprises peuvent également augmenter leur taux de rétention.
Workflow n8n OpenAI, recommandations, chatbot, Qdrant : étapes du workflow
Étape 1 : le workflow est déclenché manuellement.
- Étape 1 : il interroge GitHub pour récupérer les fichiers nécessaires.
- Étape 2 : les données sont extraites et transformées en embeddings via OpenAI.
- Étape 3 : le chatbot reçoit un message et utilise un modèle de langage pour générer une réponse.
- Étape 4 : les recommandations sont obtenues en interrogeant l'API de Qdrant.
- Étape 5 : les résultats sont filtrés et présentés à l'utilisateur.
Workflow n8n OpenAI, recommandations, chatbot, Qdrant : guide de personnalisation
Pour personnaliser ce workflow, vous pouvez modifier l'URL de l'API de Qdrant ou ajuster les paramètres du modèle OpenAI selon vos besoins. Pensez à adapter les chemins d'accès aux fichiers sur GitHub pour qu'ils correspondent à votre structure. Vous pouvez également ajouter d'autres intégrations ou modifier les noeuds pour inclure des services supplémentaires, comme des notifications par email ou des mises à jour sur des plateformes de messagerie. Assurez-vous de sécuriser les clés API et de monitorer les performances du flux pour garantir son bon fonctionnement.