看到 Comfy Agent 的对话里写着「把 KSampler 的 steps 改成 30」,切回 ComfyUI 界面发现 KSampler 上的数字确实变成了 30——这时候最容易下的结论是「Agent 改了参数」,但这个判断往往站不住。Comfy Agent 和 ComfyUI 都能让一个数值发生变化:Agent 可能是发出了建议、也可能是替你把值写进了工作流;ComfyUI 侧可能是有人手动改了,也可能是某个节点的输入被连线覆盖、或者节点在运行时按自己的逻辑重算了。要分清责任,先别急着看结果图,先把「参数名、建议值、实际执行值」三条线各记一遍。
判断谁改了参数,靠的是参数基线而不是界面截图:先在 ComfyUI 工作流里记录节点名与参数名及当前值,再从 Comfy Agent 对话里摘出被建议的参数与建议值,最后用「保持原参数运行一次、只改建议项再运行一次」的两次对照定位变化来源。若第二次运行参数未变,说明 Agent 只停留在调度建议层;若变了,还要确认这次改动是 Agent 写入、人工写入还是节点覆盖,可用参数快照与控制台文本留下记录。适用边界是能读取工作流配置与运行日志的环境,具体行为需结合你的部署方式确认。
在 ComfyUI 工作流里标出节点参数名
这一步的目的不是「看界面上写的是多少」,而是建立一份可以反复比对的参数基线。ComfyUI 界面上的数值有两类来源:一类是节点自带的 widget 默认值,另一类是被上游节点连线覆盖的输入。后者的界面显示值可能只是残留的默认值,真正进入计算的是连线上游的输出。所以记录时必须同时写清楚「这个参数能不能手动改」,凡是输入端口已被连线的,通常不能靠改数字生效。
建议至少记录四列,节点名和参数名用工作流里的原始命名,别用「那个采样器」这种指代:
| 节点名 | 参数名 | 当前值 | 是否可手动修改 |
|---|---|---|---|
| KSampler | steps | 20 | 是 |
| KSampler | cfg | 8 | 是 |
| CLIPTextEncode | text | (一段提示词) | 否,由上游文本节点连线输入 |
| EmptyLatentImage | batch_size | 1 | 是 |
如果条件允许,直接导出工作流 JSON 作为基线更稳,因为 JSON 里写的是被保存下来的参数结构,而不是界面渲染出来的数字。导出后不要改动它,留作对照件。
记录 Comfy Agent 对话里建议改动的参数
Agent 的对话内容需要分两类看待:一类是「建议」,一类是「已执行动作」。判断标准很朴素——对话里有没有回传执行结果,比如返回了节点标识、执行状态、队列信息或输出图片。只说了「建议把 cfg 调到 7」而没有后续执行痕迹的,通常属于调度建议层,它本身没有改动工作流。
| 对话中的参数名 | 建议值 | 是否附带执行结果 |
|---|---|---|
| KSampler.steps | 30 | 未附带,仅文字建议 |
| KSampler.cfg | 7 | 未附带 |
| EmptyLatentImage.batch_size | 2 | 附带一次执行返回 |
摘录时保留 Agent 原始措辞里的参数名,不要自行翻译成你以为的节点名。如果你不确定「batch_size」指的是哪个节点上的参数,就先按原文记下,再去第 1 步的基线表里找对应项。找不到对应项的,通常说明这条建议落不到当前工作流,先放一边。
用两次运行对照谁真正改了参数
这是把「建议」和「实际变化」分开的关键动作。做法是控制变量:
- 第一次运行:完全保持原参数,不改任何数值,记录运行前的参数快照和运行后的参数快照。两次快照应当一致;如果不一致,说明有节点在运行期间自行改写了参数,这一点要单独记下来。
- 第二次运行:只改 Comfy Agent 建议里提到的那些参数,其他一律不动,同样记录运行前后的快照。
- 把两次的运行前快照做差异比对,差异项就是你真正想找的「被改动的参数」。
| 参数项 | 第一次运行前 | 第一次运行后 | 第二次运行前 | 第二次运行后 |
|---|---|---|---|---|
| KSampler.steps | 20 | 20 | 30 | 30 |
| KSampler.cfg | 8 | 8 | 7 | 7 |
| EmptyLatentImage.batch_size | 1 | 1 | 2 | 2 |
读表方式:如果第二次运行前该参数已经是你手动改成的建议值,那这只证明你改了,不证明 Agent 改了。要区分这一点,可以在第二次运行前不手动改、只让 Agent 触发一次执行,再看快照是否变化。若快照没变,说明 Agent 在当前配置下只是调度层,没有写参数的权限;若变了,还要排查是否有别的节点覆盖了它。这个结论跟你的部署方式、是否有人工确认环节有关,需要结合环境确认。
把调度职责和执行职责写成检查表
下面这张表用来快速判断责任边界,判断不清时按「谁产生计算、谁产生数值」来分:
| 动作 | Comfy Agent 侧 | ComfyUI 侧 |
|---|---|---|
| 给出参数建议 | 是,通常以文字或结构化建议出现 | 不参与 |
| 人工确认 | 可能提供确认入口 | 不参与 |
| 触发一次执行 | 可能负责提交任务 | 执行队列消费任务 |
| 写入节点参数 | 取决于是否接入了写参数能力,需按配置确认 | 工作流本身持有参数值 |
| 节点计算与输出 | 不参与 | 是,节点负责计算、生成输出 |
排查时按顺序问三个问题:这条建议有没有对应的执行返回?参数值是在运行前就变了,还是运行中变的?变的这个参数是不是被连线覆盖的输入?三个问题答完,责任归属基本就清楚了。
给出不依赖代码的验证记录方式
不会写脚本也能完成上面的对照,只要保证记录可复现。建议每次运行前做三件事:
- 截图:工作流画布上相关节点的参数区域,截到节点名和数值,别只截局部数字。
- 参数快照:把参数表按固定格式抄一份文本,或者导出工作流 JSON 存档,文件名带上运行次序,例如 run1_before.json、run1_after.json。
- 控制台文本:把 ComfyUI 控制台里这次运行输出的那几行复制下来,包括提交任务和完成提示;如果 Agent 侧有返回文本,一并留存。
快照文本可以用一个固定的小结构,字段别随意增删,方便两次直接比对:
{
"run": "run1_before",
"nodes": [
{"node": "KSampler", "param": "steps", "value": 20, "manual": true},
{"node": "KSampler", "param": "cfg", "value": 8, "manual": true},
{"node": "EmptyLatentImage", "param": "batch_size", "value": 1, "manual": true}
]
}
这个结构只是记录格式示例,字段名和层级可以按你的习惯替换,重点是每次都用同一套字段。等到两次运行的快照放在一起,哪一项变了、是运行前变的还是运行中变的,一眼就能看出来,也就不必再靠回忆 Agent 说了什么来判断是谁改的参数。