Automatisation de planification de voyages avec n8n : agent virtuel intelligent
Ce workflow n8n est conçu pour automatiser la planification de voyages en utilisant des technologies avancées telles que Couchbase pour la recherche vectorielle, Gemini 2.0 pour le traitement du langage naturel et OpenAI pour les embeddings. Dans un contexte où les agences de voyages cherchent à améliorer l'expérience client tout en réduisant le temps de réponse, ce workflow permet de créer un agent de voyage virtuel capable de comprendre et de répondre aux demandes des utilisateurs en temps réel. Les cas d'usage incluent la gestion des requêtes de voyage, la recommandation d'itinéraires et la fourniture d'informations pertinentes sur les destinations. Le déroulé commence par un déclencheur de type Webhook qui capte les messages de chat des utilisateurs. Ensuite, le modèle de chat Google Gemini traite ces messages pour en extraire des informations pertinentes. Les données sont ensuite chargées à l'aide d'un nœud de chargement de données par défaut, et un diviseur de texte permet de segmenter les informations pour un traitement optimal. Le workflow utilise également un agent d'intelligence artificielle pour générer des réponses personnalisées basées sur les requêtes des utilisateurs. Les documents sont récupérés et insérés dans Couchbase pour assurer une recherche efficace. Enfin, les embeddings OpenAI sont générés pour enrichir les réponses fournies par l'agent. Les bénéfices de ce workflow incluent une réponse rapide et précise aux demandes des clients, une réduction des coûts opérationnels et une amélioration de la satisfaction client. En intégrant ces technologies, les agences de voyages peuvent offrir un service plus efficace et personnalisé, tout en se démarquant dans un marché compétitif. Tags clés : automatisation, Couchbase, OpenAI.
Vue d'ensemble du workflow n8n
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Détail des nœuds du workflow n8n
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "iGAzT789R7Q1fOOE",
"meta": {
"instanceId": "7a1e9dd164c758cbdeb7cf88274e567a937a36ed99d4d22ff24b645841097c48",
"templateId": "3577",
"templateCredsSetupCompleted": true
},
"name": "Travel Planning Agent with Couchbase Vector Search, Gemini 2.0 Flash and OpenAI",
"tags": [],
"nodes": [
{
"id": "0f361616-a552-43ed-9754-794780113955",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
380,
240
],
"webhookId": "c22b2240-ff07-44e5-a1aa-63584150a1cb",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "e8b9815d-0fe5-4e7c-a20b-1602384580cd",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
560,
480
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash"
},
"typeVersion": 1
},
{
"id": "a4b15997-de4d-4c78-b623-e936442134af",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1260,
280
],
"parameters": {
"color": 3,
"width": 800,
"height": 500,
"content": "## AI Travel Agent Powered by Couchbase.\n\n### You will need to:\n1. Setup your Google API Credentials for the Gemini LLM\n2. Setup your OpenAI Credentials for the OpenAI embedding nodes.\n3. Create a Couchbase cluster (using [Couchbase Capella](https://cloud.couchbase.com/) in the cloud, or Couchbase Server)\n4. Add [Database credentials](https://docs.couchbase.com/cloud/clusters/manage-database-users.html#create-database-credentials) with appropriate permissions for the operations you want to perform\n5. Configure [Allowed IP addresses](https://docs.couchbase.com/cloud/clusters/allow-ip-address.html) for your n8n instance. Use `0.0.0.0/0` for easier testing.\n6. Create a bucket, scope, and collection. We recommend the following:\n - Bucket: `travel-agent`\n - Scope: `vectors`\n - Collection: `points-of-interest`\n7. Navigate to the Data Tools, click the Search tab, and click Import Search Index. Upload the following JSON file found [here](https://gist.github.com/ejscribner/6f16343d4b44b1af31e8f344557814b0).\n\n\nOnce all of that is configured you will need to send the loading webhook with some data points (see example).\n\nThis should create vectorized data in `points-of-interest` collection.\n\nOnce you have data points there try to ask the Agent questions about the data points and test the response. Eg. \"Where should I go for a romantic getaway?\""
},
"typeVersion": 1
},
{
"id": "34866f8e-00b0-4706-82d7-491b9531a8b6",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
800,
1000
],
"webhookId": "3ca6fbdd-a157-4e9d-9042-237048da85b6",
"parameters": {
"path": "3ca6fbdd-a157-4e9d-9042-237048da85b6",
"options": {
"rawBody": true
},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "26d4e62a-42b0-4e09-8585-827e5bcc9fff",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1180,
1360
],
"parameters": {
"options": {},
"jsonData": "={{ $json.body.raw_body.point_of_interest.title }} - {{ $json.body.raw_body.point_of_interest.description }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "63fc308f-4d1c-4d24-9b20-68d7e6c2dbba",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1280,
1540
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "84f8c32b-8e0c-457c-aaec-17827042674d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
1060
],
"parameters": {
"width": 720,
"height": 460,
"content": "## CURL Command to Ingest Data.\n\nHere is an example of how you can load data into your webhook once its active and ready to get requests.\n\n```\ncurl -X POST \"webhook url\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"raw_body\": {\n \"point_of_interest\": {\n \"title\": \"Eiffel Tower\",\n \"description\": \"Iconic iron lattice tower located on the Champ de Mars in Paris, France.\"\n }\n }\n }'\n```\n\n(replace webhook url with the URL listed in the webhook node)\n\nA shell script to bulk insert six data points can be found [here](https://gist.github.com/ejscribner/355a46a0a383a4878e65e2230b92c6b5). Be sure to activate the workflow and use the production Webhook URL when running the script."
},
"typeVersion": 1
},
{
"id": "b2cf8788-849c-4420-b448-bd49caa4941e",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
720,
480
],
"parameters": {},
"typeVersion": 1.3
},
{
"id": "0bf7fef9-f999-42a8-a6a8-ab111fe9a084",
"name": "AI Travel Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
600,
240
],
"parameters": {
"options": {
"maxIterations": 10,
"systemMessage": "You are a helpful assistant for a trip planner. You have a vector search capability to locate points of interest, Use it and don't invent much."
}
},
"typeVersion": 1.8
},
{
"id": "3af3c8ce-582b-407c-847a-8063f9ad2e1a",
"name": "Retrieve docs with Couchbase Search Vector",
"type": "n8n-nodes-couchbase.vectorStoreCouchbaseSearch",
"position": [
860,
500
],
"parameters": {
"mode": "retrieve-as-tool",
"topK": 10,
"options": {},
"toolName": "PointofinterestKB",
"embedding": "embedding",
"textFieldKey": "description",
"couchbaseScope": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"couchbaseBucket": {
"__rl": true,
"mode": "list",
"value": ""
},
"toolDescription": "The list of Points of Interest from the database.",
"vectorIndexName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"couchbaseCollection": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
}
},
"typeVersion": 1.1
},
{
"id": "77a4e857-607a-4bbc-a28d-8a715f9415d5",
"name": "Insert docs with Couchbase Search Vector",
"type": "n8n-nodes-couchbase.vectorStoreCouchbaseSearch",
"position": [
1100,
1120
],
"parameters": {
"mode": "insert",
"options": {},
"embedding": "embedding",
"textFieldKey": "description",
"couchbaseScope": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"couchbaseBucket": {
"__rl": true,
"mode": "list",
"value": ""
},
"vectorIndexName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"embeddingBatchSize": 1,
"couchbaseCollection": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
}
},
"typeVersion": 1.1
},
{
"id": "4c0274c3-6647-4f45-b7d4-d63cfe2102ea",
"name": "Generate OpenAI Embeddings using text-embedding-3-small",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
960,
740
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "83f864fa-a298-4738-a102-ca2d283377de",
"name": "Generate OpenAI Embeddings using text-embedding-3-small1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1000,
1340
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
}
],
"active": true,
"pinData": {},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1"
},
"versionId": "80e40e5a-35a3-4fa4-b90e-ac9d76897bbd",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Insert docs with Couchbase Search Vector",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Travel Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Insert docs with Couchbase Search Vector",
"type": "ai_document",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Travel Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Travel Agent",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"Retrieve docs with Couchbase Search Vector": {
"ai_tool": [
[
{
"node": "AI Travel Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Generate OpenAI Embeddings using text-embedding-3-small": {
"ai_embedding": [
[
{
"node": "Retrieve docs with Couchbase Search Vector",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Generate OpenAI Embeddings using text-embedding-3-small1": {
"ai_embedding": [
[
{
"node": "Insert docs with Couchbase Search Vector",
"type": "ai_embedding",
"index": 0
}
]
]
}
}
}Pour qui est ce workflow ?
Ce workflow s'adresse principalement aux agences de voyages et aux entreprises du secteur du tourisme qui souhaitent intégrer des solutions d'intelligence artificielle pour améliorer leur service client. Il est idéal pour les équipes techniques ayant une certaine expérience en automatisation et en intégration d'API.
Problème résolu
Ce workflow résout le problème de la lenteur et de l'inefficacité dans la réponse aux demandes de voyage des clients. En automatisant le processus de planification, il élimine les frustrations liées aux délais d'attente et aux informations incomplètes. Les utilisateurs bénéficient d'un service plus rapide et d'une expérience client améliorée, ce qui peut conduire à une augmentation des réservations et à une fidélisation accrue.
Étapes du workflow
Étape 1 : Le workflow est déclenché par un Webhook qui reçoit un message de chat. Étape 2 : Le modèle de chat Google Gemini traite le message pour en extraire des informations clés. Étape 3 : Les données sont chargées via le nœud de chargement de données par défaut. Étape 4 : Un diviseur de texte segmente les informations pour un traitement optimal. Étape 5 : L'agent d'intelligence artificielle génère des réponses basées sur les requêtes des utilisateurs. Étape 6 : Les documents sont récupérés et insérés dans Couchbase pour une recherche efficace. Étape 7 : Les embeddings OpenAI sont générés pour enrichir les réponses fournies par l'agent.
Guide de personnalisation du workflow n8n
Pour personnaliser ce workflow, vous pouvez modifier le chemin du Webhook pour l'adapter à votre application de chat. Il est également possible de changer les paramètres du modèle Google Gemini pour affiner les réponses générées. Pour Couchbase, assurez-vous que les configurations de la base de données (scope, bucket, collection) correspondent à votre environnement. Vous pouvez également ajuster les paramètres des embeddings OpenAI pour optimiser la pertinence des réponses. Enfin, n'oubliez pas de surveiller les performances du flux pour garantir une expérience utilisateur fluide.