尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

本地AI设计工作流实战:Ollama+ComfyUI自动化生成海报

本地AI设计工作流实战:Ollama+ComfyUI自动化生成海报 1. 背景与核心概念1.1 为什么要打造本地 AI 设计工作流做设计素材、电商主图、海报预研或者内容配图时每天都会产生大量重复劳动先想描述、再写提示词、然后找在线工具生成、最后还要下载归档。这个流程如果都用云端 AI 服务会遇到几个很现实的麻烦。第一是费用问题。很多在线 AI 绘图工具按生成次数收费一张图零点几元到几元不等批量试错成本会迅速拉高。第二是数据隐私问题。设计需求、品牌素材、未公开的产品概念图一旦上传到云端就等于把创意资产交给了第三方很多公司和工作室很难接受。第三是流程割裂。提示词在 A 平台写图像在 B 平台生成后处理在 C 软件里手动完成中间根本没有一条能自动跑通的链路。本地运行的 AI 工作流刚好解决这三个问题。软件层面全部采用开源免费方案模型文件下载后本地推理不调用任何付费接口图像生成和提示词优化都在自己的电脑上完成。更重要的是整个流程可以被脚本、可视化工具串起来形成一条从“需求输入”到“文件输出”的自动化流水线。这篇文章就来拆解一套可以落地的最小闭环重点覆盖 Ollama、ComfyUI、Dify、N8N 四个开源组件的组合方式。1.2 什么是 AI 设计工作流“工作流”这个词在不同领域含义不同这里特指把一次完整的 AI 设计任务拆成多个节点节点之间按顺序或条件自动流转。一个典型的设计任务可以拆成下面几个阶段需求接收用户输入一句话例如“一张科技感人工智能主题的海报”。提示词优化由本地大模型把口语化描述改写成 AI 绘图模型能理解的英文提示词。图像生成把提示词交给本地图像生成引擎执行文生图。结果归档生成完成后自动把图片保存到指定目录并按日期或项目命名。可选的后处理例如接入通知、生成对比图、记录日志等。只做其中某一个环节很简单难的是把它们串成一个整体。ComfyUI 适合做图像生成节点Ollama 提供本地大模型能力Dify 擅长编排复杂的 LLM 应用N8N 则能把不同系统通过 Webhook 和条件分支串起来。本地工作流的本质就是选择合适的工具放到合适的位置再用代码或配置让它们协作。1.3 技术选型与各自职责整套工作流涉及四个开源组件它们的定位完全不同。组件定位在本工作流中承担的任务Ollama本地大模型运行器提供提示词改写、需求分析等文本能力ComfyUI节点式 AI 图像生成工具执行 Stable Diffusion 系列模型生成图片Dify开源 LLM 应用开发平台承载复杂提示词模板、Agent、知识库等业务逻辑N8N开源工作流自动化工具做 Webhook 入口、任务调度、文件传输与通知Python脚本语言作为轻量粘合层直接调用 Ollama 与 ComfyUI 的 API之所以这样选型是因为每个工具都满足两个条件开源免费、可以完全本地部署。ComfyUI 负责需要显卡的重活Ollama 负责需要理解语义的文本处理Dify 和 N8N 负责可视化编排。如果只是想快速跑通只用 Ollama 加 ComfyUI 加 Python 就够如果想做到可视化管理和复杂任务编排再把 Dify、N8N 加进来。2. 环境准备与版本说明2.1 硬件建议本地运行 AI 设计工作流硬件瓶颈主要在两个方面显存和内存。ComfyUI 文生图需要把模型加载到显卡中显存越大能跑的模型越大、出图分辨率越高。以 SDXL 模型为例建议显卡显存不低于 8GB能达到 12GB 以上体验更好如果使用 FP8 或量化版本显存需求会低一些。Ollama 运行 7B 级别模型时建议内存不低于 16GB。需要说明的是版本迭代很快具体依赖以你的环境为准。如果你的显卡显存较小可以使用 SD 1.5 系列的轻量模型或者选择 ComfyUI 官方的桌面版。起步阶段不要追求把所有模型都装齐先让最小的链路跑通再逐步升级。2.2 安装 Ollama 并拉取模型Ollama 的安装方式很简单官方提供了 Windows、macOS、Linux 三个平台的安装包。Linux 服务端可以用官方脚本安装Windows 和 macOS 直接下载安装文件即可。# Linux / macOS 安装方式之一 curl -fsSL https://ollama.com/install.sh | sh安装完成后在终端执行# 启动服务Windows 和 macOS 安装后一般已自动启动 ollama serve # 拉取一个适合提示词改写的中文模型 ollama pull qwen2.5:7b # 验证模型是否可用 ollama run qwen2.5:7b 你好拉取完成后Ollama 默认监听127.0.0.1:11434后续 Python 脚本直接通过 HTTP 请求调用即可。需要注意如果你更换了模型例如使用 llama3.2 或 Qwen2.5 的更大参数版本脚本里的模型名称要同步修改。2.3 安装 ComfyUIComfyUI 可以直接从官方 GitHub 仓库克隆到本地然后安装 Python 依赖git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI pip install -r requirements.txt启动 ComfyUIpython main.py --listen 127.0.0.1 --port 8188启动成功后浏览器访问http://127.0.0.1:8188能看到 ComfyUI 的节点式界面。这里的--listen 127.0.0.1表示只允许本机访问如果你的工作流脚本也运行在同一台机器上这个配置安全且够用。2.4 准备模型文件ComfyUI 本身不包含模型需要手动下载。模型文件一般放在ComfyUI/models/checkpoints/目录下。常用的开源模型包括SDXL 系列模型文生图质量较高对中文提示词友好度取决于训练数据。FLUX.1-schnell开源且推理速度较快的模型对硬件要求相对较高。SD 1.5 系列模型显存占用小适合入门和低配置机器。需要提醒的是不同模型的授权协议不同下载前务必阅读模型卡片中的 License 说明确认可以用于你的使用场景。把模型文件放到 checkpoints 目录后重启 ComfyUI 才能在节点里看到新模型。如果你通过软链接把模型目录映射到其他位置也要确保路径正确。2.5 项目目录结构规划一个清晰的目录结构能减少很多维护成本。我建议单独建一个项目目录不要把脚本散落在根目录ai-design-workflow/ ├── comfyui/ # ComfyUI 源码 ├── scripts/ │ ├── prompt_optimizer.py # 提示词优化模块 │ ├── comfy_client.py # ComfyUI API 客户端 │ ├── workflow_builder.py # 工作流 JSON 构建 │ └── run_workflow.py # 主流程入口 ├── outputs/ # 生成的图片输出目录 ├── templates/ # 提示词模板 └── config.yaml # 配置文件后续所有代码均基于这个目录结构编写。如果你把脚本放在其他位置注意修改相对路径。3. 核心原理与关键配置3.1 ComfyUI 的节点式构图原理ComfyUI 和传统绘图软件不同它把 Stable Diffusion 的推理过程拆成了多个节点。每个节点完成一个明确定义的任务例如加载模型、编码正向提示词、编码负向提示词、创建空白画布、采样、解码图像、保存图像。节点之间的连线表示数据传递模型节点输出的模型对象传给采样器文本节点输出的条件向量传给采样器采样器输出的潜空间数据再传给解码器最后经过保存节点落盘。理解这种数据流关系对调用 ComfyUI API 至关重要。因为 API 格式本质上就是节点图的 JSON 表达不像传统函数调用那样有一个统一的“生成图片”入口。你需要在 ComfyUI 图形界面里把节点画好或者直接使用 API 格式的 JSON 结构提交任务。3.2 API 模式的核心数据结构ComfyUI 提供了 HTTP API。在 Web 界面点击右上角的 “Save (API Format)” 可以导出当前节点图的 API JSON这个 JSON 可以直接提交到/prompt接口。下面是一个简化但结构完整的 API 格式示例它包含加载模型、文本编码、创建潜空间图像、采样、解码、保存六个节点{ prompt: { 1: { class_type: CheckpointLoaderSimple, inputs: { ckpt_name: sd_xl_base_1.0.safetensors } }, 2: { class_type: CLIPTextEncode, inputs: { text: a beautiful technology poster, futuristic AI concept, clip: [1, 1] } }, 3: { class_type: CLIPTextEncode, inputs: { text: blurry, low quality, watermark, clip: [1, 1] } }, 4: { class_type: EmptyLatentImage, inputs: { width: 1024, height: 1024, batch_size: 1 } }, 5: { class_type: KSampler, inputs: { seed: 123456, steps: 25, cfg: 7.0, sampler_name: euler, scheduler: normal, denoise: 1.0, model: [1, 0], positive: [2, 0], negative: [3, 0], latent_image: [4, 0] } }, 6: { class_type: VAEDecode, inputs: { samples: [5, 0], vae: [1, 2] } }, 7: { class_type: SaveImage, inputs: { filename_prefix: ai_design_workflow, images: [6, 0] } } } }理解这个 JSON 的关键是[1, 1]这种写法它表示“节点 1 输出的第 1 个插槽数据”。CheckpointLoaderSimple节点输出三个插槽通常下标 0 对应 MODEL1 对应 CLIP2 对应 VAE。KSampler的输入中model从节点 1 取 MODELpositive和negative从节点 2、3 取 CLIP 编码结果latent_image从节点 4 取空白潜空间数据。这种依赖关系是节点图能否正确运行的关键写错一个引用都会导致任务失败。3.3 Ollama 的本地模型接口Ollama 提供了兼容 HTTP 的接口默认端口 11434。最常用的是POST /api/chat入参包含模型名、消息列表和是否流式输出import requests def optimize_prompt(user_request: str, base_url: str http://127.0.0.1:11434, model: str qwen2.5:7b) - str: system_prompt 你是一名资深平面设计师请把用户的设计需求改写成适合AI绘图模型的英文提示词。要求包含主体、场景、风格、光影、构图、画质关键词只输出改写后的提示词不要解释。 resp requests.post(f{base_url}/api/chat, json{ model: model, messages: [ {role: system, content: system_prompt}, {role: user, content: user_request} ], stream: False }) resp.raise_for_status() return resp.json()[message][content].strip()这里的关键是 System Prompt。如果不限定输出格式模型可能答非所问把“技术解析”也写进提示词。通过 System Prompt 明确角色和输出约束能显著提升提示词质量。3.4 关键采样参数的影响ComfyUI 的 KSampler 节点有几个决定出图效果的核心参数理解它们才能调出好图。参数作用参考建议seed随机种子控制初始噪声固定值可复现结果随机值适合探索steps采样步数越大细节越多SDXL 常用 20~30过小容易粗糙cfg提示词引导强度7 左右是常见值过大过小都会异常sampler_name采样器算法euler、dpmpp_2m 等效果差异明显scheduler调度器类型karras、normal、exponentialdenoise重绘幅度文生图时通常为 1图生图时低于 1seed是最值得利用的参数。批量出图时固定一套 prompt 并循环修改 seed可以快速生成多个构图再人工挑选。cfg调得过高会导致图像过饱和、元素堆砌调得过低则提示词约束力不足。4. 完整实战案例一句话生成 AI 海报4.1 场景定义为了让流程可验证这里设计一个最简单又完整的场景在终端输入一句话“生成一张科技感人工智能主题海报”脚本自动把它优化成英文提示词然后调用 ComfyUI 生成一张 1024x1024 的图片最后保存到本地 outputs 目录。这个最小闭环虽然简单但已经具备真实项目的结构后续扩展任何能力都可以在对应的模块上增加代码。4.2 创建配置文件在项目根目录创建config.yaml把可变参数集中管理ollama: base_url: http://127.0.0.1:11434 model: qwen2.5:7b comfy: server: 127.0.0.1 port: 8188 checkpoint: sd_xl_base_1.0.safetensors default_negative: blurry, low quality, watermark, text, logo width: 1024 height: 1024 seed: 42 steps: 25 cfg: 7.0 sampler_name: euler scheduler: normal output_dir: ./outputs配置文件的好处是脚本不用改代码就能调整模型名、出图尺寸、采样参数。尤其当你在不同模型间切换时只改配置文件会方便很多。4.3 编写提示词优化模块文件路径scripts/prompt_optimizer.pyimport requests def optimize_prompt(user_request: str, base_url: str http://127.0.0.1:11434, model: str qwen2.5:7b) - str: system_prompt ( 你是一名资深平面设计师。请把用户的中文设计需求改写成适合AI绘图模型的英文提示词。 要求包含主体、场景、风格、光影、构图、画质关键词。 只输出提示词本身不要解释不要代码块。 ) resp requests.post( f{base_url}/api/chat, json{ model: model, messages: [ {role: system, content: system_prompt}, {role: user, content: user_request}, ], stream: False, }, timeout120, ) resp.raise_for_status() return resp.json()[message][content].strip()这段代码的逻辑很直接构造系统提示词约束模型行为把用户输入拼进用户消息关闭流式输出以便一次性拿到完整结果。超时设置 120 秒是因为本地模型在低配置机器上推理较慢。4.4 编写 ComfyUI API 客户端文件路径scripts/comfy_client.pyimport time import requests class ComfyClient: def __init__(self, server: str 127.0.0.1, port: int 8188): self.base fhttp://{server}:{port} def queue_prompt(self, workflow: dict) - str: resp requests.post(f{self.base}/prompt, json{prompt: workflow}, timeout60) resp.raise_for_status() return resp.json()[prompt_id] def get_history(self, prompt_id: str) - dict: resp requests.get(f{self.base}/history/{prompt_id}, timeout30) resp.raise_for_status() return resp.json() def wait_for_completion(self, prompt_id: str, timeout: int 300, interval: int 2) - dict: start time.time() while time.time() - start timeout: history self.get_history(prompt_id) if prompt_id in history: return history[prompt_id] time.sleep(interval) raise TimeoutError(f任务 {prompt_id} 执行超时) staticmethod def extract_images(history_item: dict) - list: images [] for node_id, node_output in history_item.get(outputs, {}).items(): for img in node_output.get(images, []): images.append({ filename: img[filename], subfolder: img.get(subfolder, ), type: img.get(type, output), }) return imagesqueue_prompt负责提交任务得到任务 IDwait_for_completion轮询历史记录直到任务完成extract_images从执行结果中提取图片元数据。这里的轮询策略比较保守适合本地单机环境不需要引入消息队列。4.5 构建工作流 JSON文件路径scripts/workflow_builder.pydef build_workflow( positive_prompt: str, checkpoint: str, negative_prompt: str blurry, low quality, watermark, text, logo, seed: int 42, steps: int 25, cfg: float 7.0, width: int 1024, height: int 1024, sampler_name: str euler, scheduler: str normal, ) - dict: workflow { 1: { class_type: CheckpointLoaderSimple, inputs: {ckpt_name: checkpoint}, }, 2: { class_type: CLIPTextEncode, inputs: {text: positive_prompt, clip: [1, 1]}, }, 3: { class_type: CLIPTextEncode, inputs: {text: negative_prompt, clip: [1, 1]}, }, 4: { class_type: EmptyLatentImage, inputs: {width: width, height: height, batch_size: 1}, }, 5: { class_type: KSampler, inputs: { seed: seed, steps: steps, cfg: cfg, sampler_name: sampler_name, scheduler: scheduler, denoise: 1.0, model: [1, 0], positive: [2, 0], negative: [3, 0], latent_image: [4, 0], }, }, 6: { class_type: VAEDecode, inputs: {samples: [5, 0], vae: [1, 2]}, }, 7: { class_type: SaveImage, inputs: {filename_prefix: ai_design_workflow, images: [6, 0]}, }, } return {prompt: workflow}这里返回的结构包含了最外层的prompt键所以调用方可以直接传给客户端。如果你在 ComfyUI 界面调整出了新的节点组合建议用官方的 “Save (API Format)” 导出模板再替换其中的文本内容比自己手写更稳妥。4.6 组装主流程文件路径scripts/run_workflow.pyimport os import yaml from prompt_optimizer import optimize_prompt from comfy_client import ComfyClient from workflow_builder import build_workflow def main(): with open(../config.yaml, r, encodingutf-8) as f: config yaml.safe_load(f) user_input input(请输入你的设计需求) print(f需求{user_input}) ollama_cfg config[ollama] positive_prompt optimize_prompt(user_input, ollama_cfg[base_url], ollama_cfg[model]) print(f优化后的提示词{positive_prompt}) comfy_cfg config[comfy] workflow build_workflow( positive_promptpositive_prompt, checkpointcomfy_cfg[checkpoint], negative_promptcomfy_cfg[default_negative], seedcomfy_cfg[seed], stepscomfy_cfg[steps], cfgcomfy_cfg[cfg], widthcomfy_cfg[width], heightcomfy_cfg[height], sampler_namecomfy_cfg[sampler_name], schedulercomfy_cfg[scheduler], ) client ComfyClient(comfy_cfg[server], comfy_cfg[port]) prompt_id client.queue_prompt(workflow) print(f任务已提交{prompt_id}) history_item client.wait_for_completion(prompt_id) images client.extract_images(history_item) output_dir config.get(output_dir, ./outputs) os.makedirs(output_dir, exist_okTrue) for img in images: # 在 demo 场景中图片已通过 SaveImage 保存到 ComfyUI 的 output 目录 # 这里先打印图片信息实际生产可以把它复制到指定目录 print(f生成图片{img[filename]} subfolder{img[subfolder]} type{img[type]}) print(工作流执行完成) if __name__ __main__: main()脚本运行前要确保 ComfyUI 和 Ollama 都在运行。SaveImage节点默认会把图片保存到 ComfyUI 的output目录因此在脚本里只需要打印图片元数据。如果你希望把文件统一复制到项目outputs目录可以通过http://127.0.0.1:8188/view?filenamexxxsubfolderxxxtypeoutput接口下载图片文件。4.7 运行与验证按顺序启动服务# 终端 1启动 Ollama ollama serve # 终端 2启动 ComfyUI cd ComfyUI python main.py --listen 127.0.0.1 --port 8188 # 终端 3运行工作流 cd scripts python run_workflow.py输入需求后预期看到类似输出需求生成一张科技感人工智能主题海报 优化后的提示词futuristic AI poster, glowing circuit board, digital brain, dark blue background, cinematic lighting, high detail, 8k 任务已提交a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx 生成图片ai_design_workflow_00001_.png subfolder typeoutput 工作流执行完成如果看到以上输出说明最小闭环已经跑通。这个闭环虽然功能不多但把“自然语言需求”成功转换成了“本地生成的图片文件”整套工作流的地基已经搭好了。5. 进阶接入 Dify 与 N8N5.1 Dify 承担复杂 LLM 编排当业务变得复杂比如需要建立设计需求知识库、给不同角色设置提示词模板、或者让 AI 在接到需求前先做一轮信息收集直接写 Python 脚本就变得不够直观。这时可以引入 Dify。Dify 是一个开源的 LLMOps 平台支持本地部署启动方式通常是git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d部署完成后在 Dify 中创建一个“工作流”类型的应用把 Ollama 作为模型供应商接入。Dify 的优势在于可视化编排你可以添加“开始”节点接收用户输入添加“LLM”节点配置角色和提示词添加“HTTP 请求”节点调用 ComfyUI 的/prompt接口最后添加“结束”节点返回生成结果。整个过程比维护 Python 代码更直观也方便非开发人员修改提示词。在实际项目中Dify 适合承载提示词版本管理。每改一版提示词Dify 都会生成新的记录可以随时回滚这对团队协作非常有用。5.2 N8N 做任务调度与通知N8N 是开源的工作流自动化工具本质上是一个可视化编排平台。可以用它创建定时触发器例如每天早上自动读取待办需求列表逐条调用 Dify 或 ComfyUI 生成设计稿然后通过邮件或企业微信机器人通知设计师验收。N8N 本地启动也很简单npx n8n在 N8N 界面中可以创建一个包含 Webhook 触发器、HTTP Request 节点和 IF 条件节点的流程。Webhook 接收外部系统传入的设计需求HTTP Request 节点把需求转发给 Dify 或直接调用 ComfyUI APIIF 节点根据返回值判断是否生成成功成功则通知失败则记录日志。5.3 三套体系的职责边界引入 Dify 和 N8N 后整个架构分为三层执行层ComfyUI 负责图像生成Ollama 负责文本推理它们是真正干活的组件。业务层Dify 负责提示词模板、知识库、Agent 等业务逻辑。调度层N8N 负责事件触发、任务分发、通知和错误重试。这三层并不是必须同时存在。个人使用阶段Python 脚本完全够用一旦进入团队协作、多任务定时触发、异常通知等场景Dify 和 N8N 的价值就会体现出来。建议不要一开始就把所有工具全部接入否则排查问题时会非常痛苦。6. 常见问题与排查思路6.1 问题速查表问题现象常见原因解决思路ComfyUI 提交任务后无响应ComfyUI 服务未启动或端口不对检查 8188 端口是否监听浏览器能否访问提示模型文件不存在checkpoint 路径写错或模型未放入目录检查ComfyUI/models/checkpoints/下文件名Ollama 返回 connection refusedOllama 服务未运行执行ollama serve确认 11434 端口生成图片出现很多文字乱码负向提示词没有包含 text/watermark在负向提示词中加入text, watermark, logo出图速度非常慢模型过大、显存不足或使用 CPU 推理降低分辨率换用更小模型确认显卡驱动正常提示词优化结果出现中文或解释System Prompt 约束不够强调“只输出英文提示词不要解释”6.2 ComfyUI 任务提交成功但不出图如果/prompt接口返回了prompt_id但轮询历史记录一直为空最可能的原因是任务已经失败。此时 ComfyUI 的终端输出会打印 Python 异常堆栈先看终端日志。常见原因是节点参数引用错误例如工作流 JSON 中某个节点引用了不存在的输出插槽。排查方法是在 ComfyUI 图形界面手动加载同一个工作流并运行界面会直接给出错误提示。6.3 Ollama 模型首次调用特别慢Ollama 首次运行某个模型时需要把模型加载到内存这个过程可能持续几十秒甚至更久之后再次调用就会变快。如果频繁出现冷启动慢可以通过调整 Ollama 的OLLAMA_KEEP_ALIVE环境变量延长模型驻留时间。脚本层面则要把 HTTP 超时设置得足够长避免因为超时反复重试导致资源堆积。6.4 生成结果风格不稳定同一套提示词不同seed会得到不同构图这是正常现象。如果希望风格相对稳定可以固定seed或者在图生图模式下通过一张参考图约束构图。本地工作流做批量出图时建议每次生成 4 到 8 张候选图再人工挑选效率远高于精调一次参数。7. 最佳实践与工程建议7.1 配置与命名规范所有可变参数尽量抽到配置文件中不要硬编码在代码里。模型文件名、采样参数、端口地址都应有默认值。输出图片的命名建议包含时间戳、任务 ID、seed 三个信息例如poster_20250120_1830_seed42_00001.png这样后续溯源和挑选都很方便。7.2 资源控制与异常处理本地工作流最大的风险是资源耗尽。批量生成时不要一次性把所有任务塞进 ComfyUI建议在脚本层做并发控制例如同时只允许一个生成任务。ComfyUI 本身没有任务队列的概念如果你并发提交多个/prompt请求显存很容易被撑爆。稳妥的做法是在 Python 脚本中维护一个简单的互斥锁或使用单线程串行提交。7.3 提示词工程的沉淀提示词模板应该持续沉淀。建议建一个文案模板仓库把适合不同风格的提示词分门别类保存。例如“科技感海报”的通用结构是主体关键词 场景关键词 风格关键词 光影关键词 画质关键词。把模板变成配置文件可以显著降低每次创作的不确定性。7.4 安全与合规注意事项本地运行并不等于可以无限制生成违规内容。使用开源模型时除了遵守模型 License还要遵守相关法律法规和平台规范。不要在团队生产环境中随意使用来源不明的模型文件避免引入恶意代码或不合规内容。涉及品牌设计素材时注意版权边界。生成内容用于商业发布前建议做人工审核不要直接依赖 AI 输出结果。7.5 如何迁移到更复杂的业务当前这套工作流还有很大的扩展空间。你可以尝试把 Dify 接入企业知识库让 AI 根据品牌手册自动生成符合规范的图片提示词可以用 N8N 监听数据库或表单提交事件实现设计需求的自动派单可以在 ComfyUI 中引入 ControlNet 节点用线稿或骨架图约束生成结果。每新增一个能力建议遵循“先手动跑通再自动化”的原则。8. 总结与下一步这套本地 AI 设计工作流的核心价值不是某一个工具而是一种组合思路用 Ollama 处理文本理解用 ComfyUI 处理图像生成用 Python 或 Dify、N8N 把节点串成流程。它完全免费、完全本地运行没有按张计费的成本压力也没有设计资产上传云端的数据风险。如果你第一次接触这套体系不用急着装齐所有组件。先按照第 4 章的步骤把 Ollama 加 ComfyUI 加 Python 的最小闭环跑通体验一下“输入一句话本地生成一张图”的完整流程。再根据实际工作需求决定是否引入 Dify 做复杂编排或者引入 N8N 做定时任务和通知。你的第一步很简单下载 Ollama克隆 ComfyUI拉一个开源模型然后运行一次python run_workflow.py。跑通了你就拥有了一个完全可以自己掌控的本地 AI 设计工作流。
返回列表