{"id":"iGAzT789R7Q1fOOE","meta":{"instanceId":"workflow-db6482e1","versionId":"1.0.0","createdAt":"2025-09-29T07:07:55.036779","updatedAt":"2025-09-29T07:07:55.036810","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Travel Planning Agent with Couchbase Vector Search, Gemini 2.0 Flash and OpenAI","nodes":[{"id":"0f361616-a552-43ed-9754-794780113955","name":"When chat message received","type":"n8n-nodes-base.noOp","position":[380,240],"webhookId":"c22b2240-ff07-44e5-a1aa-63584150a1cb","parameters":{"options":{}},"typeVersion":1,"notes":"This chatTrigger node performs automated tasks as part of the workflow."},{"id":"e8b9815d-0fe5-4e7c-a20b-1602384580cd","name":"Google Gemini Chat Model","type":"n8n-nodes-base.noOp","position":[560,480],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"typeVersion":1,"notes":"This lmChatGoogleGemini node performs automated tasks as part of the workflow."},{"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]({{ $env.WEBHOOK_URL }} in the cloud, or Couchbase Server)\n4. Add [Database credentials]({{ $env.WEBHOOK_URL }} with appropriate permissions for the operations you want to perform\n5. Configure [Allowed IP addresses]({{ $env.WEBHOOK_URL }} 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]({{ $env.WEBHOOK_URL }}\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,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"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,"notes":"This webhook node performs automated tasks as part of the workflow."},{"id":"26d4e62a-42b0-4e09-8585-827e5bcc9fff","name":"Default Data Loader","type":"n8n-nodes-base.noOp","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,"notes":"This documentDefaultDataLoader node performs automated tasks as part of the workflow."},{"id":"63fc308f-4d1c-4d24-9b20-68d7e6c2dbba","name":"Recursive Character Text Splitter","type":"n8n-nodes-base.noOp","position":[1280,1540],"parameters":{"options":{}},"typeVersion":1,"notes":"This textSplitterRecursiveCharacterTextSplitter node performs automated tasks as part of the workflow."},{"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]({{ $env.WEBHOOK_URL }} Be sure to activate the workflow and use the production Webhook URL when running the script."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"b2cf8788-849c-4420-b448-bd49caa4941e","name":"Simple Memory","type":"n8n-nodes-base.noOp","position":[720,480],"parameters":{},"typeVersion":1,"notes":"This memoryBufferWindow node performs automated tasks as part of the workflow."},{"id":"0bf7fef9-f999-42a8-a6a8-ab111fe9a084","name":"AI Travel Agent","type":"n8n-nodes-base.noOp","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,"notes":"This agent node performs automated tasks as part of the workflow."},{"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":"YOUR_CREDENTIAL_HERE","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,"notes":"This vectorStoreCouchbaseSearch node performs automated tasks as part of the workflow."},{"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":"YOUR_CREDENTIAL_HERE","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,"notes":"This vectorStoreCouchbaseSearch node performs automated tasks as part of the workflow."},{"id":"4c0274c3-6647-4f45-b7d4-d63cfe2102ea","name":"Generate OpenAI Embeddings using text-embedding-3-small","type":"n8n-nodes-base.noOp","position":[960,740],"parameters":{"options":{}},"typeVersion":1,"notes":"This embeddingsOpenAi node performs automated tasks as part of the workflow."},{"id":"83f864fa-a298-4738-a102-ca2d283377de","name":"Generate OpenAI Embeddings using text-embedding-3-small1","type":"n8n-nodes-base.noOp","position":[1000,1340],"parameters":{"options":{}},"typeVersion":1,"notes":"This embeddingsOpenAi node performs automated tasks as part of the workflow."}],"active":true,"settings":{"callerPolicy":"workflowsFromSameOwner","executionOrder":"v1","saveManualExecutions":true,"errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"80e40e5a-35a3-4fa4-b90e-ac9d76897bbd","connections":{"Webhook":{"main":[[],[],[],[],[],[],[],[],[]]},"Google Gemini Chat Model":{"main":[[]]},"Generate OpenAI Embeddings using text-embedding-3-small":{"main":[[]]},"Generate OpenAI Embeddings using text-embedding-3-small1":{"main":[[]]}},"description":"Automated workflow: Travel Planning Agent with Couchbase Vector Search, Gemini 2.0 Flash and OpenAI. This workflow integrates 11 different services: webhook, stickyNote, textSplitterRecursiveCharacterTextSplitter, vectorStoreCouchbaseSearch, lmChatGoogleGemini. It contains 18 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Travel Planning Agent with Couchbase Vector Search, Gemini 2.0 Flash and OpenAI. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}