无脚本自动化:结合NAS、Docker与AI模型的智能工作流搭建指南
这次我们来看一套不怎么需要写代码、但能把电脑、NAS 和通讯平台真正串起来的 AI 工具环境。标题里的「无脚本桌面实拍」意思是整个环境的落地和展示都不依赖手写 Python 脚本、不依赖 crontab 定时任务而是用可视化的工作流把几台设备连成一个闭环。实拍桌面也好写成文字也好背后都是同一套架构。很多人现在的 AI 工具环境是散装的电脑上跑着几个 AI 客户端NAS 只当成网盘用飞书、钉钉、企业微信里的通知靠手动转发文件靠手动上传下载。遇到「群里发一条指令NAS 上的模型自动处理一批文件再把结果推回群里」这种需求第一反应是写脚本。脚本一旦多起来依赖环境、路径、变量全都要维护很快就不想动了。这套环境的思路是三层分工电脑负责重计算和桌面端操作NAS 负责数据存储和 7x24 常驻服务通讯平台负责触发入口和结果通知中间用 n8n、Node-RED 这类无脚本工作流引擎把所有事件串起来。下面按架构设计、环境准备、部署步骤、功能验证、接口调用和排错清单的顺序把整套环境拆开讲清楚。1. 核心能力速览先给一张总表方便快速判断这套环境适不适合自己。能力项说明项目类型本地 AI 工具环境 / 自动化工作流整合方案核心组件电脑桌面端、NAS存储 常驻服务、通讯平台消息触发与通知、可视化自动化引擎无脚本自动化通过 n8n、Node-RED 等拖拽节点完成事件串联不依赖手写脚本本地 AI 能力在 NAS 上通过 Docker 运行 Ollama 等模型服务供电脑和工作流统一调用启动方式NAS 端以 Docker 容器方式部署电脑端按工具分别启动是否支持 API支持模型服务和管理接口均通过 HTTP 调用是否支持批量任务支持工作流可设置循环节点、队列和失败重试推荐硬件NAS 支持 Docker电脑根据模型任务决定是否配 GPU显存占用取决于 NAS 端模型和电脑端推理任务以实际模型和参数为准适合场景个人知识库、文件自动归档、群机器人、监控告警、定时批量处理从这张表能看出这套环境的关键词不是「某个单一软件」而是「把几个成熟工具接起来」。单个工具都是现成的难点在事件怎么流转、数据怎么落盘、异常怎么处理。2. 适用场景与使用边界2.1 这套环境适合谁适合以下四类用户手头有群晖、飞牛fnOS等支持 Docker 的 NAS想让它不只是网盘。电脑上已经用了不少 AI 工具想给它们加一个统一调度入口。经常要在飞书、钉钉、企业微信群里收发文件和处理任务希望机器人代替人工转发。不想写脚本、但愿意在可视化界面里拖节点的普通技术爱好者。2.2 能解决什么问题文件进 NAS 目录后自动触发后续流程例如 OCR、压缩、重命名、推送通知。群里发一条消息机器人调用本地模型返回结果不经过云端 API。监控摄像头录像自动归档异常告警推送到通讯平台。电脑端 RPA 负责操作没有接口的旧软件把结果写到 NAS 共享目录再由工作流继续处理。2.3 不适合什么场景对并发要求很高的生产级任务队列建议还是用专业任务系统。需要复杂条件分支和大量自定义逻辑时无脚本节点反而比代码难维护。没有 Docker 支持的旧款 NAS扩展能力会受限。2.4 使用边界与合规提醒NAS 里存放影视、文档、监控录像时要注意版权和个人信息保护不要传播未授权内容。摄像头接入 EasyNVR 这类服务时视频流默认不要暴露到公网尽量限制在局域网内访问。通讯平台机器人可能接触到群消息采集个人敏感信息前必须获得授权。为 AI 服务提供 API 时要限制访问来源 IP避免被外部扫描到。3. 整体架构设计电脑、NAS、通讯平台各管什么3.1 三层职责划分这套环境可以拆成四个部分组成部分职责典型工具电脑桌面端重计算、GUI 操作、桌面自动化影刀 RPA、ComfyUI、各类 AI 客户端NAS存储、常驻服务、模型推理群晖 / 飞牛 fnOS、Docker、Ollama、rclone通讯平台触发入口、结果通知、人工审批飞书、钉钉、企业微信、Telegram Bot自动化引擎事件串联、数据流转、调度重试n8n、Node-RED、Dify数据流向通常是通讯平台消息或 NAS 目录变化先触发自动化引擎引擎调用 NAS 上的 AI 服务完成处理再通过 Webhook 把结果推回通讯平台最终落盘到 NAS 存储目录。整个过程没有一行调度脚本全是可视化节点。3.2 一个典型的目录监听流程以「NAS 新文件进来 - AI 生成摘要 - 推送到企业微信群」为例NAS 共享目录出现新文件。自动化引擎的文件监听节点捕获事件。引擎调用 Ollama 模型服务读取文件内容并生成摘要。引擎通过群机器人 Webhook 发送摘要。原文件按规则归档到已完成目录。这个流程在 n8n 里就是五个节点节点之间用连线拖出来即可。4. 环境准备与前置条件4.1 NAS 端要求NAS 必须支持 Docker。群晖的 Container Manager、飞牛 fnOS 的 Docker 应用都可以。给 NAS 设置固定 IP或者在路由器里做 DHCP 绑定。避免重启后 IP 变化导致工作流 Webhook 和 API 地址全部失效。预留磁盘空间。模型文件、容器镜像、日志、监控录像都会占空间建议单独建一个 Docker 数据目录。推荐目录规划/volume1/docker/portainer/ # Docker 管理面板数据 /volume1/docker/n8n/ # n8n 工作流数据 /volume1/docker/ollama/ # 模型文件 /volume1/docker/nodered/ # Node-RED 流数据 /volume1/media/input/ # 自动化处理输入目录 /volume1/media/output/ # 自动化处理输出目录飞牛 fnOS 和群晖的路径前缀可能不同实际路径以你的 NAS 存储池为准。4.2 电脑端要求电脑端主要跑桌面操作和重计算任务操作系统建议 Windows 10/11部分 RPA 工具对 Windows 支持最好。如果要在电脑上跑图像生成或大模型推理需要 N 卡并安装对应显卡驱动。没有独显也可以先跑 CPU 推理速度会慢。安装 Docker Desktop 不是必须的NAS 已经承担了容器职责电脑端保持轻量。4.3 网络与端口规划同一局域网内建议把端口固定下来避免容器重启后端口漂移。服务默认端口说明n8n5678工作流引擎 Web 界面Node-RED1880备用流引擎Ollama11434模型服务 APIPortainer9000Docker 管理面板EasyNVR10800摄像头接入服务端口只是常见默认值部署时如果冲突可以在容器映射时改掉。5. NAS 端部署Docker 装自动化与 AI 服务NAS 端全部通过 Docker Compose 管理。这里给的是通用模板镜像名称、路径、端口都要按实际环境替换。5.1 部署 n8n 工作流引擎n8n 是这套环境的调度中枢。创建一个目录n8n写入docker-compose.ymlversion: 3.8 services: n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped ports: - 5678:5678 environment: - N8N_HOST192.168.1.100 - N8N_PORT5678 - N8N_PROTOCOLhttp - GENERIC_TIMEZONEAsia/Shanghai volumes: - /volume1/docker/n8n:/home/node/.n8n注意替换N8N_HOST为你的 NAS 实际 IP。启动命令docker compose up -d启动后浏览器访问http://NAS_IP:5678注册管理员账号即可进入可视化编辑界面。5.2 部署 Ollama 模型服务Ollama 负责提供本地模型推理能力。同样用 Compose 部署version: 3.8 services: ollama: image: ollama/ollama:latest container_name: ollama restart: unless-stopped ports: - 11434:11434 volumes: - /volume1/docker/ollama:/root/.ollama启动后拉取模型。在 NAS 的终端里执行docker exec -it ollama ollama pull qwen2.5:7b模型文件较大拉取时间取决于 NAS 性能和网络条件。拉取完成后可以用一条命令验证服务是否正常curl http://localhost:11434/api/tags返回 JSON 列表即表示服务正常。注意NAS 的 CPU 和内存条件直接决定模型能不能跑建议先从 3B、7B 这类中小规模量化模型开始试确定能接受再往上加。5.3 部署 Portainer可选如果不想在 NAS 命令行里敲 Docker 命令可以先装 Portainerversion: 3.8 services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: unless-stopped ports: - 9000:9000 volumes: - /var/run/docker.sock:/var/run/docker.sock - /volume1/docker/portainer:/dataWeb 界面能直接查看容器状态、日志、CPU 和内存占用排查问题比命令行直观很多。5.4 挂载外部存储rclone 配合 WebDAV如果电脑、NAS、云盘之间的文件需要打通可以用 rclone 把 WebDAV 挂载到本地目录。这种用法在很多 NAS 社区里很常见尤其是群晖、飞牛这类系统。先配置远程存储rclone config配置完成后测试挂载mkdir -p /mnt/webdav rclone mount remote:/ /mnt/webdav --daemon挂载路径可以在 n8n 工作流里直接作为输入目录使用。注意 rclone 挂载占一定内存长时间不用建议卸载避免资源浪费。5.5 可选EasyNVR 接入摄像头监控如果环境里有萤石等品牌摄像头想录像集中存到 NAS可以部署 EasyNVR 容器把 RTSP 流接入后统一管理。这一类服务的部署要点是摄像头和 NAS 必须在同一网段。记得配置录像存储路径到 NAS 大容量目录。视频流和 Web 管理页不要直接暴露到公网。接入监控的唯一目的是本地化管理自己的合法设备不要用于未授权区域采集。6. 无脚本工作流搭建与验证部署完成后进入 n8n 界面开始做功能验证。建议从最小流程开始不要一上来搭复杂分支。6.1 场景一目录监听 AI 摘要 群消息通知目标监听 NAS 输入目录新文件出现后调用 Ollama 生成摘要并推送群通知。n8n 节点编排如下Watch Folder节点监听/volume1/media/input。Execute Command节点读取文件内容调用 Ollama API。HTTP Request节点请求 Ollama 生成摘要。用Function节点把摘要拼成消息文本。HTTP Request节点把消息 POST 到群机器人 Webhook。验证步骤在输入目录放一个文本文件。观察 n8n 执行记录确认四个节点都显示成功。到群里看是否收到摘要消息。查看 NAS 输出目录确认原文件被归档。判断标准文件放进去后30 秒内群里出现摘要且执行记录没有红色报错节点。6.2 场景二通讯平台机器人触发 AI 问答目标在群里 机器人机器人调用 NAS 上的模型返回答案。n8n 节点编排如下Webhook节点接收群机器人转发的消息。Ollama节点或 HTTP Request 节点把消息文本发给本地模型。把模型返回结果作为消息回复到群。验证步骤在群里 机器人发一条问题。看机器人是否在合理时间内回复。回复内容断连时检查 Webhook 地址是否填对。6.3 场景三电脑 RPA 联动 NAS 归档电脑端用 RPA 工具录制操作步骤例如导出某系统报表、截图、重命名文件做完后把文件保存到 NAS 共享目录。NAS 上的 n8n 目录监听节点会自动接手后续处理。这种做法的价值在于老旧桌面软件没有 API但 RPA 可以模拟人工点击RPA 只负责操作电脑不负责业务逻辑业务逻辑全部放在 NAS 工作流里维护边界清晰。6.4 通用验证清单检查项预期结果目录监听节点是否响应新文件出现后自动触发Ollama 调用是否成功返回非空文本无超时Webhook 推送是否到达群里收到对应消息文件是否归档原文件移动到输出目录执行记录是否全绿无失败节点7. 通讯平台接入与 API 调用示例7.1 群机器人 Webhook 接入飞书、钉钉、企业微信都支持在群设置里添加自定义机器人拿到一个 Webhook 地址。以飞书机器人为例发送文本消息的常见格式curl -X POST https://open.feishu.cn/open-apis/bot/v2/hook/你的Webhook地址 \ -H Content-Type: application/json \ -d {msg_type:text,content:{text:NAS 任务已完成}}钉钉和企业微信的 JSON 字段不同但思路一致先去对应开放平台文档确认参数。Webhook 地址本身包含权限泄露后别人可以往你的群里发消息注意保密。7.2 调用 Ollama 模型服务Ollama 提供标准 HTTP 接口可以直接用 curl 测试curl http://192.168.1.100:11434/api/generate -d { model: qwen2.5:7b, prompt: 用三句话总结这段文本, stream: false }返回结果里的response字段就是模型输出。stream: false表示一次性返回完整结果适合工作流调用改成true会流式返回适合对话场景。7.3 Python 调用示例如果后续想从电脑端脚本调用 NAS 上的模型下面是一个通用模板import requests url http://192.168.1.100:11434/api/generate payload { model: qwen2.5:7b, prompt: 给这段文字写一个标题, stream: False } resp requests.post(url, jsonpayload, timeout300) data resp.json() print(data[response])IP、模型名、超时时间按实际环境调整。这个接口本质上是 HTTP任何编程语言都能调用因此可以很方便地接进 n8n 的 HTTP Request 节点也可以接进自己的小工具。7.4 在 n8n 工作流里调用 APIn8n 里不需要写完整程序直接用 HTTP Request 节点Method 选 POST。URL 填 Ollama 地址。Body 填 JSON 参数。响应解析节点从返回值里取response字段。整个过程都是表单化配置这就是无脚本的核心节点连线 参数填写逻辑可视化出问题能顺着连线一步步查。8. 资源占用与性能观察8.1 观察方法NAS 端最直接的观察方式是docker stats这个命令会实时显示每个容器的 CPU、内存、网络占用。Portainer 面板也能看但没有docker stats实时。电脑端如果跑模型用系统自带任务管理器或者在推理时观察显存占用曲线即可。8.2 资源占用特点n8n、Node-RED 这类引擎本身很轻主要消耗在节点执行时的临时数据上。Ollama 是资源大头。加载模型后模型参数要常驻内存模型越大占用越高。量化模型和原版模型的内存占用差距明显NAS 内存不足时优先选择量化版本。摄像头录像写入对磁盘占用大需要单独规划存储空间和保留周期。批量任务并发执行时多个节点同时跑内存占用会叠加建议设置执行并发限制。8.3 降低占用的措施不在 NAS 上跑超过硬件承受能力的模型先从 3B 开始验证。长任务放在凌晨执行避开白天使用高峰。n8n 里设置执行历史保留天数避免执行日志无限增长。监控录像按周覆盖或者用对象存储做冷备。显存和内存的具体数字一定要以你自己设备的实际模型和推理参数为准不同设备差异很大。9. 常见问题与排查方法问题现象可能原因排查方式解决方案容器启动后页面打不开端口被占用或容器未正常运行查看 docker ps 和容器日志换端口重启或检查端口映射NAS 重启后容器没自启Compose 里没设置 restart 策略检查 restart 字段改为restart: unless-stoppedOllama 拉取模型失败网络问题或磁盘空间不足查看磁盘剩余空间和下载日志扩容目录或换一个模型模型推理速度很慢NAS CPU/内存不够用 docker stats 看占用换小模型或改到电脑端推理群里收不到 Webhook 消息Webhook 地址错误或内容格式不对用 curl 单独测试 Webhook对照开放平台文档修正消息格式目录监听不触发路径映射错误或权限不足检查容器内路径和共享目录权限重新映射 volume赋予读写权限批量任务卡住某个节点超时或 API 无响应打开执行详情定位红色节点增大超时时间加失败重试节点输出内容不稳定模型参数或提示词设置问题检查提示词和 temperature 参数固定提示词模板降低随机性rclone 挂载掉线网络波动或内存不足查看 rclone 日志加--vfs-cache-mode full或设置自动重挂排查问题的核心方法是看两处容器日志和 n8n 的执行详情。容器日志解决服务本身是否正常执行详情解决工作流哪一步断了。10. 最佳实践与使用建议10.1 从最小闭环开始第一次搭建不要想着把所有服务一次配齐。先做一个小闭环NAS 放一个目录n8n 监听这个目录发现文件就推送一条消息到群里。这个闭环跑通了再逐步加 Ollama、加批量处理、加 RPA。最小闭环验证的是基础设施是否可靠后面所有复杂流程都建立在它上面。10.2 目录和文件命名规范输入目录、输出目录、临时目录分开建文件命名加上日期前缀。批量任务处理完毕就把原始文件归档到独立目录避免工作流重复处理同一批文件。建议输出结果统一用 JSON 或 Markdown 格式方便后续接知识库。10.3 给批量任务加日志和重试n8n 的每个节点都能单独设置重试次数。批量处理一定要开重试网络抖动和模型超时是常态。另外给每个任务生成一个任务 ID用这个 ID 命名输出文件出了问题能直接定位到对应输入文件。10.4 安全边界通讯平台机器人的 Webhook 不要泄露。Ollama API 默认监听所有网卡建议在 Compose 里限制绑定局域网 IP。NAS 的 SSH、Docker 管理面板不要暴露公网。摄像头视频流仅限内网访问。涉及他人肖像、声音、版权素材的功能必须确认授权后再使用。10.5 下一步可以扩展的方向这套环境跑顺之后可以继续接入中间件比如给 NAS 加一个向量数据库做成个人知识库电脑端的下载目录接入自动整理流程通讯平台机器人增加多轮对话能力把常用目录用 rclone 挂成 WebDAV 让其他设备直接访问。每一步的验证方式都类似触发一个事件看工作流是否按预期流转结果是否落盘通知是否到达。先把最小闭环跑通再一步步加节点这套环境的扩展空间比想象中大。