能不能只改中间那一步,先看两个条件:Voyager 里该步骤在界面或历史记录中是否有独立条目,以及该步骤的输入是引用了具体文件,还是直接继承上一步的输出。两条都成立,替换输入再单独执行这一步即可;只要有一条不成立,就建议从最近的检查点往后重来,而不是整条流程从头跑一遍。判断依据是页面行为和日志,不是猜测。
适用场景:生成流程跑到一半发现某个中间步骤的素材选错。处理方向:先在任务详情或历史列表确认该步骤有无独立的步骤记录、独立状态与重试入口;再查看步骤详情的输入字段,判断输入是具体文件引用还是上一步结果的隐式传递。前者替换输入后只重跑该步,后者从上游或最近检查点往后重来。验证方式:用修改时间和校验值比对重跑前后的产物。边界:界面不暴露步骤粒度、或产物目录无法按步骤区分时,不建议冒险局部替换。
先确认中间步骤在界面上是否有独立记录
打开当前任务的详情面板,按顺序找三样东西:步骤列表里每一项是否有独立的序号或步骤名;每个步骤是否有自己的状态(等待、执行中、成功、失败)和耗时;该行右侧或展开后是否有重试、重新执行一类的入口。有独立记录,才谈得上局部替换,因为重跑的对象是一个可被单独寻址的步骤,而不是整条任务。
找不到独立记录时,按下面几条判定为不可单独重跑,不要强行操作:日志是一条从头到尾连续输出、没有步骤分隔行;所有中间产物落在同一个目录且文件名不带步骤前缀;任务只有「运行中/完成/失败」三态。这种情况下的任何「只改一步」都会连带影响下游输入。
检查该步骤的输入是引用具体文件还是继承上一步结果
展开该步骤的详情,重点看输入相关的字段名,常见的有 input、source、reference、file、path、prompt、asset,以及形如「来自上一步」「上游输出」的只读字段。字段能展开成一条具体路径或一个已上传的文件名,说明这一步读取的是外部给定物;字段只显示变量名、临时目录或指向上一节点,说明输入是继承来的。
两种情形的处理完全不同:引用具体文件时,替换文件或修改路径即可,重跑范围压缩在这一步之内;继承上一步结果时,改上游会让下游全部失效,正确做法是把改动前移到真正产出该输入的那一步,从那里往后重跑。
# 若步骤记录以结构化文件落盘,可用类似方式查看输入字段(路径按实际环境替换)
jq '.steps[] | {id, name, status, input, output}' task.json
# 只看某一步
jq '.steps[] | select(.id=="step-2") | .input' task.json
命令只是查看手段,字段名以实际配置为准;如果记录不在文件里而在页面中,就以页面显示的输入项为准,不必强求命令行。
对能单独重跑的步骤只替换输入再执行一次
操作按固定顺序走,避免中途改动扩散:先记录当前产物清单和修改时间;备份该步骤的输出目录;替换输入(同名覆盖最稳妥,改路径要同步改配置);只触发该步骤的重跑;最后核对生成物。执行后必须核对的清单建议至少包含:该步骤的主产物文件、步骤详情里显示的输出字段、下游第一步读取的文件是否已同步更新、日志里是否出现读取新输入的记录。
# 重跑前留底
cp -a output/step-2 output/step-2.bak.$(date +%Y%m%d%H%M)
ls -l `--time-style`=full-iso output/step-2
sha256sum output/step-2/* > step-2.before.sha256
只触发单步执行,而不是整条任务重新运行,这一步的区别决定了下游是复用原有结果还是被一并刷新。若界面没有单步重试入口,说明该流程不支持局部替换,转到下一节的检查点方案。
对不能单独重跑的流程,从最近的检查点往后重来
先确定检查点位置。在任务详情或运行历史里找快照、阶段、断点一类的记录,同时对照日志中最后一条明确成功的步骤,两者取更靠后的那一个作为起点。没有显式快照时,退一步用最后一个已知正确的产物目录充当检查点,从那一步的输出开始重跑。
重来之前需要备份的中间文件,通常包括:上游已确认无误的产物、手工修改过的文件、步骤配置或参数文件、记录产物对应关系的清单文件。备份时保持目录结构,方便回退。
mkdir -p backup/checkpoint
cp -a output/step-1 backup/checkpoint/
cp -a configs backup/checkpoint/
cp -a manifest.json backup/checkpoint/ 2>/dev/null || true
重跑后用修改时间核对哪些产物被覆盖
重跑前先打一个时间标记,重跑后据此筛出被改写的文件,比逐个翻目录可靠。
touch /tmp/rerun.marker
# 执行重跑
find output -type f -newer /tmp/rerun.marker -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort
再用文件管理器核对:切到产物目录,按修改时间倒序排列,位于顶部的就应是本次重跑写出的文件;对照重跑前保存的清单,确认哪些文件时间未变(说明沿用旧结果)、哪些被刷新、有没有出现预期之外的新文件或残留的旧命名文件。对关键产物可再比对一次校验值,不一致且无合理解释的,按旧备份回退,不要新旧混用。