让 Comfy Agent 接管工作流之前,先把两件事固定下来:哪些参数从外部进入工作流,哪些结果从工作流离开。自动化最容易出问题的位置通常不是 Agent 本身,而是边界没定义清楚——Agent 改写了一个你没打算授权的采样参数,或者把输出写到另一个目录,事后只能从结果反推原因。下面的检查顺序按“先边界、再权限、后验证”推进,每一步都能用配置、日志或命令行核对,不需要额外工具。
接管前的最小可行做法:先列出工作流的输入节点、参数名、默认值和输出落盘位置,再把参数分成只读、可改、禁止改三类并落成配置,然后用最小工作流跑出改动前基线,让 Comfy Agent 介入后对比输出文件。凡是无法在配置或日志里看到授权依据的参数,建议一律按禁止改处理;接管失败的页面提示和控制台文本要原样保留,便于回溯是哪一步被拦下。
列出工作流输入节点和输出节点
这一步的目标是让工作流边界可枚举。在 Comfy 界面里逐个点开节点,判断哪些节点的值来自工作流外部(提示词、图片路径、尺寸、随机种子、模型名称),哪些节点产出的结果需要离开工作流(图片、蒙版、文本、JSON)。两类节点分开记,不要混在同一张表里。
输入侧记录建议包含四列:节点名称(界面里显示的标题)、参数名(配置里真正的键名)、默认值(当前跑通时的值)、来源(外部文件、外部文本还是外部数值)。示例格式如下:
# inputs.txt —— 输入节点清单
节点名称 参数名 默认值 来源
Load Image image ./in/base.png 外部文件
CLIP Text Encode text a cat, studio 外部文本
Empty Latent Image width 768 外部数值
Empty Latent Image height 768 外部数值
KSampler seed 123456789 外部数值输出侧同样列一份,并确认落盘位置是绝对路径还是相对工作流目录,这两者在接管后容易混淆:
# outputs.txt —— 输出节点清单
节点名称 输出类型 落盘位置 命名规则
Save Image image /data/out/ ComfyUI_%05d.png
Preview Image image 仅界面预览,不落盘 -如果某个参数在界面上可见却没有进清单,说明它还处在“隐式输入”状态,接管时会变成不可控变量。需要结合环境确认后,再决定是把它补进清单,还是把对应节点排除在接管范围外。
标记 Comfy Agent 可读写的参数范围
权限划分按实际界面或配置里能看到的能力来定,看不到的权限项不要凭想象补。分三类:只读(Agent 只能读取当前值用于判断)、可改(允许写入)、禁止改(写入即拦截,避免破坏可复现性)。种子、模型文件名、输出目录通常建议归入禁止改或只读;提示词、尺寸这类在明确范围内的参数可以放进可改。
# agent_scope.txt —— 按实际可见权限填写,不确定的留空并归入禁止改
参数路径 读 写 归属
KSampler.seed yes no 禁止改(影响复现)
CheckpointLoader.ckpt_name yes no 禁止改(换模型等于换工作流)
CLIPTextEncode.text yes yes 可改(需长度上限)
EmptyLatentImage.width yes yes 可改(需枚举允许值)
EmptyLatentImage.height yes yes 可改(需枚举允许值)
SaveImage.filename_prefix yes no 只读(用作对账依据)填表时逐项问三个问题:Agent 是否能读到当前值;写入后是否影响输出对账;写错时能否通过重跑恢复。第三个问题答“不能”的参数,建议直接归入禁止改。可改参数同时写下允许范围,例如尺寸只允许在已经跑通的一组值里选择,而不是给一个连续区间。
权限表在接管前后各核对一次。接管后如果发现某个参数被写入、而表里没有登记,说明范围定义存在漏项,先把它补成禁止改,再继续下一步。
用最小工作流测试 Agent 改动前后输出
用一个节点少、耗时短的最小工作流做基线,而不是直接拿正式工作流试。步骤是:保存当前工作流,跑一次并记录输出文件的校验值;然后让 Comfy Agent 介入同一份工作流,用同一组输入再跑一次,对比两次输出。
# 1. 固化基线
cp workflow.json workflow.baseline.json
sha256sum /data/out/*.png > baseline.sha256
# 2. 让 Comfy Agent 接管后再跑一次
# 3. 对比
sha256sum /data/out/*.png > after-agent.sha256
diff baseline.sha256 after-agent.sha256
diff -r /data/out/ /data/out-baseline/对比时区分三种情况:校验值一致,说明输出可复现,改动没有触及影响结果的参数;校验值不同但没有任何节点报错,需要先排查随机种子和采样相关参数是否被写入;文件缺失或落到另一目录,属于输出边界被改动,应回到权限表收紧写入范围。图片类输出受编码细节影响可能存在非语义差异,可以先看尺寸、节点名称和落盘路径是否一致,再决定是否深究像素差异。
基线工作流文件要留在版本控制或备份目录里,接管出问题时能直接回退到未接管的版本。
在控制台记录接管失败的返回信息
失败时的返回信息是回溯的唯一依据,建议在 Comfy 启动终端和 Agent 侧同时留存。需要记录的至少有三类:拒绝执行(被权限表拦下)、参数越界(值超出允许范围)、节点缺失(工作流里找不到目标节点)。页面弹出的提示和控制台文本往往不完全一样,两边都要留。
# agent_run.log 记录模板
时间 类型 目标 原始信息(原样粘贴) 处理
T+00:01:20 拒绝执行 KSampler.seed write denied: read-only param 保持在禁止改
T+00:02:05 参数越界 EmptyLatentImage.width value 1920 out of allowed set 收紧允许值
T+00:03:41 节点缺失 Upscale Image node not found in workflow 确认节点是否被删除记录时不要改写原始提示文本,也不要只写“失败了”。如果某类失败反复出现,可以在权限表里加注释说明原因,下次接管前先看这张表。控制台文本过长时,保留包含参数名和值的那一行即可,但要保证能对应到具体节点。
把检查项落成通用配置模板
把前面四步固化成一份可复用的检查骨架,字段留空,接管前逐项填写。模板只定义结构和验证动作,不绑定任何具体接口或版本功能,换工作流时按实际界面和配置替换字段值即可。
# preflight_check.template
workflow_file: # 基线工作流文件路径
input_nodes: # 节点名称 + 参数名 + 默认值,逐一列出
output_nodes: # 节点名称 + 落盘位置 + 命名规则
readable_params: # Agent 只读的参数路径
writable_params: # 可改的参数路径,逐项标注允许范围
blocked_params: # 禁止改写的参数路径
baseline_hash: # 改动前输出文件的校验记录
baseline_output_dir: # 改动前输出目录
console_log_path: # 失败信息留存的日志路径
rollback_plan: # 用哪份文件、哪条命令回到未接管状态验证步骤按顺序做,缺一步就不要进入下一步:填充 input_nodes 和 output_nodes 后能对照界面逐项确认;writable_params 每一项都能指出允许范围;基线跑过一次并留下校验记录;接管后重跑一次并保存差异;失败日志能定位到具体节点和参数。模板本身不保证接管安全,它只是把判断依据固定下来,让每次接管都可对比、可回退。