VDS工作流公开版
高级
这是一个DevOps, Multimodal AI领域的自动化工作流,包含 54 个节点。主要使用 If, Code, Wait, Merge, Github 等节点。 使用AI、GitHub和Vercel从文本提示构建和部署MVP
前置要求
- •GitHub Personal Access Token
- •可能需要目标 API 的认证凭证
- •HTTP Webhook 端点(n8n 会自动生成)
- •OpenAI API Key
使用的节点 (54)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "qbuSXPwnq7cyw2tB",
"meta": {
"instanceId": "6bcff5ef8a06e8086902526a05c2a4c7bf5da8101f89e582301ed78094606f40"
},
"name": "VDS工作流公开版",
"tags": [],
"nodes": [
{
"id": "17bf6fd1-2942-4c54-bff7-0ebefb56620e",
"name": "当收到聊天消息时",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
320,
1380
],
"webhookId": "933c4d58-549f-4224-9201-5d2145931584",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "6916ffa4-3330-4c33-b6be-3905dad8c15a",
"name": "聊天代理",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
580,
1280
],
"parameters": {},
"typeVersion": 1.6
},
{
"id": "2b2c6117-daf1-42b6-844f-d2c65af049cb",
"name": "OpenAI 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
540,
1500
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2b5af958-a0d5-4c85-b585-0dd8787e4740",
"name": "窗口缓冲记忆",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
660,
1500
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "3984355a-2f8f-45a2-bf58-9dc55ca976a6",
"name": "响应 Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
980,
1380
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "6bec7f13-7ec8-4f3f-96d5-32b8e4136fff",
"name": "从MVP模板生成",
"type": "n8n-nodes-base.httpRequest",
"position": [
840,
780
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "19dc9ac7-a185-410f-b7be-6ffd7c7fa725",
"name": "创建MVP",
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"position": [
780,
1500
],
"parameters": {},
"typeVersion": 2.1
},
{
"id": "58da369e-a5c1-46d3-9856-14dd154d8d64",
"name": "创建MVP触发器",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
340,
780
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "c9294e36-b140-4a7f-8ed6-79bd829caa7d",
"name": "解析输入",
"type": "n8n-nodes-base.code",
"position": [
560,
780
],
"parameters": {},
"typeVersion": 2
},
{
"id": "8c474366-4b65-4a89-8217-137557dc850d",
"name": "点击“测试工作流”时",
"type": "n8n-nodes-base.manualTrigger",
"position": [
100,
540
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2b67c12c-b62b-445c-9509-c86c0fcaa615",
"name": "测试输入",
"type": "n8n-nodes-base.code",
"position": [
400,
2120
],
"parameters": {},
"typeVersion": 2
},
{
"id": "082c5409-6642-4053-8384-ef06524127f1",
"name": "测试后创建",
"type": "n8n-nodes-base.code",
"position": [
620,
2120
],
"parameters": {},
"typeVersion": 2
},
{
"id": "0bd2d5b2-212e-447d-b47c-ae0946bb6df2",
"name": "TDD代码生成器",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1580,
780
],
"parameters": {},
"typeVersion": 1.8
},
{
"id": "8eb49a95-ea99-4a01-8cd4-ad46487f84dd",
"name": "OpenAI 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1380,
980
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "56b096e8-0063-4ba9-bebb-2cc753c160be",
"name": "结构化输出代码",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2100,
1340
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "87ba4740-4e25-40ea-ac68-304e6df63203",
"name": "获取文件",
"type": "n8n-nodes-base.githubTool",
"position": [
1840,
980
],
"parameters": {},
"typeVersion": 1
},
{
"id": "0210733c-aae2-420a-96cf-d4cb35b801cb",
"name": "变量",
"type": "n8n-nodes-base.code",
"position": [
1280,
780
],
"parameters": {},
"typeVersion": 2
},
{
"id": "5b98d74b-10c8-4731-92a6-1e134591cadb",
"name": "解析输出",
"type": "n8n-nodes-base.code",
"position": [
2000,
780
],
"parameters": {},
"typeVersion": 2
},
{
"id": "33e26542-9fdc-4742-a83e-93389de9f9bb",
"name": "GitHub",
"type": "n8n-nodes-base.github",
"position": [
3140,
780
],
"parameters": {},
"typeVersion": 1
},
{
"id": "509887cc-d4bd-4ee0-8330-1f2dcc4a52e0",
"name": "HTTP请求1",
"type": "n8n-nodes-base.httpRequest",
"position": [
620,
1860
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "c25e3103-2f8b-4964-8cb6-ce83662ceb37",
"name": "获取图像",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"position": [
1580,
1000
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "986e7d56-5deb-4ddc-80fd-91b5fd4236af",
"name": "代码",
"type": "n8n-nodes-base.code",
"position": [
2420,
1860
],
"parameters": {},
"typeVersion": 2
},
{
"id": "5a1ced1b-aba8-45ed-a370-944f1b6a4e0e",
"name": "Vercel部署",
"type": "n8n-nodes-base.httpRequest",
"position": [
3360,
780
],
"parameters": {},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "9ba93ff2-073b-4535-80b5-b7365779e41f",
"name": "返回URL",
"type": "n8n-nodes-base.code",
"position": [
3840,
780
],
"parameters": {},
"typeVersion": 2
},
{
"id": "ca9f90b3-c818-4b7a-9d31-ce3ab7028ff6",
"name": "等待",
"type": "n8n-nodes-base.wait",
"position": [
3580,
780
],
"webhookId": "40915edc-adfa-4ba5-a24b-2e61b029c2d6",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "fb981281-ad51-4263-bb43-7f00376fd534",
"name": "OpenAI聊天模型2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2240,
1000
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "8a50fb84-6483-4324-909a-1bd003f60ec2",
"name": "代码审查器",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2280,
780
],
"parameters": {},
"typeVersion": 1.8
},
{
"id": "2707a5de-a1c2-4e8d-8102-d38c6b38e2b9",
"name": "解析输出1",
"type": "n8n-nodes-base.code",
"position": [
2700,
780
],
"parameters": {},
"typeVersion": 2
},
{
"id": "66c9d7de-7058-45dc-9af1-501e56bd1f68",
"name": "Vercel检查",
"type": "n8n-nodes-base.httpRequest",
"position": [
3360,
1000
],
"parameters": {},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "18522031-4d86-4b21-b0a7-52a4f1a214d8",
"name": "Vercel日志",
"type": "n8n-nodes-base.httpRequest",
"position": [
3840,
1000
],
"parameters": {},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "6590430e-aa50-4267-b65a-2fd8859ea687",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
3400,
1240
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "9d9c2759-d162-4e5a-a828-e6f9a3111573",
"name": "代码2",
"type": "n8n-nodes-base.code",
"position": [
2420,
2040
],
"parameters": {},
"typeVersion": 2
},
{
"id": "7b899d93-4e06-41db-9d61-b233872a86c5",
"name": "错误日志",
"type": "n8n-nodes-base.code",
"position": [
4060,
1000
],
"parameters": {},
"typeVersion": 2
},
{
"id": "c4f8c1ef-ac31-493a-aadf-78bf762c078f",
"name": "OpenAI Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3620,
1460
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "57ff7b19-8239-4b64-93f3-64bdff468aef",
"name": "Vercel修复器",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3580,
1240
],
"parameters": {},
"typeVersion": 1.8
},
{
"id": "e992fd91-2b27-4344-b22e-b5857433a486",
"name": "GitHub提交修复",
"type": "n8n-nodes-base.github",
"position": [
4160,
1240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b8f2d1fa-ef2b-4ad5-b097-b260a3109713",
"name": "等待1",
"type": "n8n-nodes-base.wait",
"position": [
4380,
1480
],
"webhookId": "40915edc-adfa-4ba5-a24b-2e61b029c2d6",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "458ec8ee-a8be-499b-8d63-aa758b3ca31d",
"name": "获取最新部署",
"type": "n8n-nodes-base.httpRequest",
"position": [
4540,
1900
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "063fe4d4-2bb0-4aa9-af56-69badac2a984",
"name": "代码1",
"type": "n8n-nodes-base.code",
"position": [
4760,
1900
],
"parameters": {},
"typeVersion": 2
},
{
"id": "d5e980c7-1898-4fa0-82e1-0dc08fe96c18",
"name": "解析代码修复",
"type": "n8n-nodes-base.code",
"position": [
3940,
1240
],
"parameters": {},
"typeVersion": 2
},
{
"id": "53701dee-5560-418f-8761-10565fcebeff",
"name": "循环代码",
"type": "n8n-nodes-base.code",
"position": [
3140,
1240
],
"parameters": {},
"typeVersion": 2
},
{
"id": "6afc4c8d-cd6e-4f2e-aac3-b4c3cebebd82",
"name": "如果就绪",
"type": "n8n-nodes-base.if",
"position": [
3580,
1000
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "c28b663e-5407-45db-bd25-5dd028c4e9d3",
"name": "Vercel部署1",
"type": "n8n-nodes-base.httpRequest",
"position": [
4600,
1240
],
"parameters": {},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "960f6518-fc99-4ac7-9d8d-a211bae6a45b",
"name": "等待2",
"type": "n8n-nodes-base.wait",
"position": [
4380,
1240
],
"webhookId": "637fbf87-42c7-4dc8-8b48-6f79c61bae03",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "7b33b9af-a8f6-4c35-819c-1b27e7041c6e",
"name": "响应 Webhook1",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
4060,
780
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "cb025143-1948-4a61-a0b4-f4b8301280cf",
"name": "生成图片",
"type": "n8n-nodes-base.httpRequest",
"position": [
1280,
560
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "e6288e78-10d9-40bf-b0be-2606fa775614",
"name": "HTTP 请求",
"type": "n8n-nodes-base.httpRequest",
"position": [
1680,
480
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "dcb17434-2cfb-472d-bac0-4eaab80a57e2",
"name": "GitHub上传文件",
"type": "n8n-nodes-base.github",
"position": [
2120,
460
],
"parameters": {},
"typeVersion": 1
},
{
"id": "dafdb0cb-7773-4e12-9e2c-f296f0e79774",
"name": "如果200",
"type": "n8n-nodes-base.if",
"position": [
1840,
480
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "1400c850-6327-4ab4-a154-a6e0f0927475",
"name": "如果",
"type": "n8n-nodes-base.if",
"position": [
1500,
560
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "353094c8-5f35-48e2-be17-72734bba76c6",
"name": "代码3",
"type": "n8n-nodes-base.code",
"position": [
340,
540
],
"parameters": {},
"typeVersion": 2
},
{
"id": "a28fdd70-aaf3-4059-9e42-a793f27634cd",
"name": "要生成的图像",
"type": "n8n-nodes-base.code",
"position": [
1060,
560
],
"parameters": {},
"typeVersion": 2
},
{
"id": "e80eb593-c08a-4695-9498-ecfaf11b9945",
"name": "便签 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
4460,
440
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "b966ff9c-7b15-40ca-9814-98cec5c42ad1",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-120,
260
],
"parameters": {
"content": ""
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d5f2a157-2e3e-4dc6-89ac-54d6606637bc",
"connections": {
"If ": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Vercel Check",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Vercel Fixer",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Vercel Check",
"type": "main",
"index": 0
}
]
]
},
"Wait2": {
"main": [
[
{
"node": "Vercel Deploy1",
"type": "main",
"index": 0
}
]
]
},
"GitHub": {
"main": [
[
{
"node": "Vercel Deploy",
"type": "main",
"index": 0
}
]
]
},
"If 200": {
"main": [
[
{
"node": "GH Upload File",
"type": "main",
"index": 0
}
]
]
},
"If READY": {
"main": [
[
{
"node": "return URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Vercel Logs",
"type": "main",
"index": 0
}
]
]
},
"get_file": {
"ai_tool": [
[
{
"node": "TDD Code Maker",
"type": "ai_tool",
"index": 0
}
]
]
},
"Loop-Code": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Variables": {
"main": [
[
{
"node": "TDD Code Maker",
"type": "main",
"index": 0
}
]
]
},
"get_image": {
"ai_tool": [
[
{
"node": "TDD Code Maker",
"type": "ai_tool",
"index": 0
}
]
]
},
"Chat Agent": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Error Logs": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"create_mvp": {
"ai_tool": [
[
{
"node": "Chat Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"return URL": {
"main": [
[
{
"node": "Respond to Webhook1",
"type": "main",
"index": 0
}
]
]
},
"test input": {
"main": [
[
{
"node": "test pos-creaetion",
"type": "main",
"index": 0
}
]
]
},
"Parse Input": {
"main": [
[
{
"node": "Generate From MVP Template",
"type": "main",
"index": 0
}
]
]
},
"Vercel Logs": {
"main": [
[
{
"node": "Error Logs",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "If 200",
"type": "main",
"index": 0
}
]
]
},
"Parse Output": {
"main": [
[
{
"node": "Code Reviewer",
"type": "main",
"index": 0
}
]
]
},
"Vercel Check": {
"main": [
[
{
"node": "If READY",
"type": "main",
"index": 0
}
]
]
},
"Vercel Fixer": {
"main": [
[
{
"node": "Parse Code-Fix",
"type": "main",
"index": 0
}
]
]
},
"Code Reviewer": {
"main": [
[
{
"node": "Parse Output1",
"type": "main",
"index": 0
}
]
]
},
"Parse Output1": {
"main": [
[
{
"node": "GitHub",
"type": "main",
"index": 0
},
{
"node": "Loop-Code",
"type": "main",
"index": 0
}
]
]
},
"Vercel Deploy": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Generate Image": {
"main": [
[
{
"node": "If ",
"type": "main",
"index": 0
}
]
]
},
"Parse Code-Fix": {
"main": [
[
{
"node": "GitHub Commit Fix",
"type": "main",
"index": 0
},
{
"node": "Loop-Code",
"type": "main",
"index": 0
}
]
]
},
"TDD Code Maker": {
"main": [
[
{
"node": "Parse Output",
"type": "main",
"index": 0
}
]
]
},
"Vercel Deploy1": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"GitHub Commit Fix": {
"main": [
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Chat Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Images to generate": {
"main": [
[
{
"node": "Generate Image",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "TDD Code Maker",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Code Reviewer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model3": {
"ai_languageModel": [
[
{
"node": "Vercel Fixer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"create_mvp trigger": {
"main": [
[
{
"node": "Parse Input",
"type": "main",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "Chat Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Structured Output Code": {
"ai_outputParser": [
[
{
"node": "TDD Code Maker",
"type": "ai_outputParser",
"index": 0
},
{
"node": "Code Reviewer",
"type": "ai_outputParser",
"index": 0
},
{
"node": "Vercel Fixer",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Fetch Latest Deployment": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"Generate From MVP Template": {
"main": [
[
{
"node": "Variables",
"type": "main",
"index": 0
},
{
"node": "Images to generate",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Chat Agent",
"type": "main",
"index": 0
}
]
]
},
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "Code3",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 开发运维, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
上下文混合RAG AI文案
Google Drive到Supabase上下文向量数据库同步用于RAG应用
If
Set
Code
+25
76 节点Michael Taleb
AI RAG 检索增强
✨🩷自动化社交媒体内容发布工厂 + 系统提示组合
基于动态系统提示和GPT-4o的AI驱动多平台社交媒体内容工厂
If
Set
Code
+20
100 节点Amit Mehta
内容创作
使用 OpenAI、LangChain 和 API 集成的工作流自动化初学者指南
使用 OpenAI、LangChain 和 API 集成的工作流自动化初学者指南
If
Set
Code
+13
33 节点Meelioo
内容创作
批量SEO内容生成与带AI图片的Webflow草稿创建(模板)
使用GPT、Gemini图片和Webflow草稿创建进行批量SEO内容生成
If
Set
Code
+18
54 节点Dahiana
内容创作
1. 播放列表详情设置机器人副本
使用 Suno、GPT-4、Runway 和 Creatomate 创建 AI 生成的 YouTube 音乐播放列表
If
Set
Code
+22
203 节点Joseph
内容创作