物联网中的 Node-RED(9·终):AI 协作与多工程拆分方案 · 协作边界、对比、FAQ 与检查清单
本篇是《AI + Node-RED 协作开发与多工程拆分统一管理方案》拆分后的第 5 篇(共 5 篇,终篇)。
- (上)背景、核心概念与总体架构
- (中)第一阶段:Flow 拆分与 AI 协作
- (下壹)第二阶段:多工程拆分
- (下贰)第二阶段:统一面板升级、风险清单与实施计划
- (终)协作边界、与传统方式对比、FAQ 与检查清单 ← 本篇
原文标题:AI + Node-RED 协作开发与多工程拆分统一管理方案
六、AI 协作边界(铁律重申)
- 拆分与脚本实施由用户执行或用户确认后 AI 出脚本;AI 不直接跑破坏性命令(删 / 移文件需用户确认)。
- AI 改节点只落在
projects/<key>/src/tabs/*.yaml(或单实例src/tabs/*.yaml),绝不碰flows.json。 - 文档产出可由 AI 负责,程序改动 / 部署由用户做。
七、与传统方式对比
| 维度 | 传统方式(直接改 flows.json) | 本方案(拆分 + 多工程) |
|---|---|---|
| AI 读取文件大小 | ~400KB / 10000 行 | ~30KB / 200-400 行(单 Tab) |
| Token 消耗 | 极高 | 低 |
| AI 修改范围 | 需要精确定位行号 | 按节点 id 定位 |
| Git diff 可读性 | 差(一个文件所有变更混在一起) | 好(每个 Tab 独立跟踪) |
| 冲突解决 | 手动合并 10000 行 JSON | 各自文件,无冲突 |
| 部署方式 | 替换文件 + 重启 | sync_flows.js 热重载 |
| 回滚 | git checkout flows.json + 重启 |
git checkout src/ + sync_flows.js |
| 多业务隔离 | 单实例,互扰 | 多工程独立端口 / 独立运行时 |
八、FAQ
Q1: 为什么不用现成的 flow-splitter 插件,而选择自研脚本?
社区插件(如 node-red-contrib-flow-splitter)往往对 Node-RED 版本有硬要求,版本不兼容时会报 config.forEach is not a function 之类错误。自研脚本零外部依赖(仅 js-yaml),百来行搞定,完全可控、可读、可改。
Q2: sync_flows.js 会导致数据丢失吗?
不会。它只通过 Node-RED Admin API 注入 flows 到运行时内存,不修改 flows.json 文件。Node-RED 自身持久化机制仍正常工作——下次 Deploy 时会写回 flows.json。
Q3: UI 编辑和 AI 编辑如何协调?
推荐闭环:
- UI 改了东西 → Deploy →
_reverse_sync.js(或面板「反向同步」)→ YAML 更新; - AI 改了 YAML →
sync_flows.js(或面板「热部署」)→ Node-RED 更新; - 避免两边同时改同一个 Tab 造成冲突。
Q4: 为什么 POST /flows 不能发 {flows: [...]}?
Node-RED Admin API v1 会自动将 POST body 包装为 {flows: req.body}。如果发送 {flows: [...]},会变成 {flows: {flows: [...]}}(double-nesting),导致 config.forEach is not a function 错误。正确做法是直接发送扁平数组 [...]。
Q5: 如果遇到 YAML 解析错误怎么办?
sync_flows.js 会跳过解析失败的 YAML 文件并打印错误信息。使用 --dry 模式可以提前检查。
Q6: 多工程下反向同步会不会把别的工程覆盖掉?
不会——前提是已把 _reverse_sync.js 改造为按工程过滤(见 5.6 / R5)。它只从 port 对应实例拉取该工程 tab 下的节点回写 projects/<key>/src/tabs/,不会触碰其他工程。
Q7: 端口怎么选才不冲突?
拆分前用 netstat -ano | findstr <端口>(Windows)/ lsof -i:<端口>(Linux/macOS)确认目标段空闲;主实例保留原端口,工程端口用一个连续空闲段递增分配,并写入 _registry.json 单一事实来源。
九、实施检查清单
第一阶段(单实例)
第二阶段(多工程)
十、参考链接
- Node-RED Admin API 文档
- js-yaml 文档
- 项目导引文档(可选,记录「工程 = 业务域分组」说明)
结语:本手册的核心不是某几行脚本,而是「YAML 是人与 AI 的单一事实来源,
flows.json只是运行时;多工程只是把这套逻辑按业务域复制成独立实例,再用一个面板统一指挥」。拿走这套理念,替换掉所有<占位>,即可在你的项目里完整复刻。

浙公网安备 33010602011771号