## 第一阶段 · 搭骨架 > 整体流程见 [README](../README.md);每个字段怎么填见 [格式说明](../format/workflow-format.md)。本文只讲第一阶段怎么做。 > > 这一阶段**主流程自己全程做**,不派给子助手。因为"怎么切步骤、补哪些没写的环节、怎么把数据流连起来"这三件事是连在一起的——靠的是同一份"我读懂了这篇案例"的理解,换个助手就得重读原文、重新理解,既费劲又容易前后不一致。 分三小步: | 小步 | 做什么 | 产出 | |------|------|------| | **1.1** | **读懂 + 判断有几个工序** —— 通读原文(含配图)想清楚:(a) 这篇案例里有**几条独立的做法**(一条还是多条);多条时,把每条的名字、最终产物、大概几步、属于什么工艺各列出来。(b) 认出最终产物、用到的外部工具、以及那些"没明说但少不了"的前置准备。 | `understanding.md`(按工序分章节写) | | **1.2** | **切步骤 + 填单步骨架** —— 一次性写出 `workflow.json` 骨架:顶层是 `procedures` 数组,每个工序含 `id / name / purpose / category / platform / author / declarations / steps`。每一步先填:编号 / 类型(普通步还是控制块) / 动作(先用大白话写)/ 工具 / 指令 / 输入 / 输出(含类型、值,**每个输出起个编号如 s2o1**;"来源/去处"先空着)/ 目的 / focus。原文没写、你补出来的输入输出,标上 `inferred: true` 和原因。**"作用、类型归类、实质、形式"这些留到第二阶段填**,这一步别填。 | `workflow.json`(骨架版) | | **1.3** | **把数据流连起来** —— 给每个输入输出补上"来源/去处":输入写 `← 上游某输出的编号`(如 `← s2o1`)、`← 工序输入`、`← 某编号[i]`(循环里逐个取);输出写 `→ sN`、`→ 某列表.追加`。连完自查:每个输入引用的编号都能在前面找到对应输出。连错就回 1.2 改。几十处要连时用 `wf-patch.py` 一次过(见下),别写脚本硬塞。 | `workflow.json`(补好"来源/去处") | ### 1.1 怎么判断"有几个工序" ⚠ 跟原文的章节标题无关:不管原文把某段叫"案例示范"还是"进阶玩法",只要满足下面三条,就算一条独立工序。**判断的单位是"一条完整的 输入→最终产物 链",不是原文的段落结构。** **怎么扫**:以原文里**每一张出现的成品图**(或明确写出的最终产物)为起点,逐个看它有没有对应的"输入→做法"链条。有就记为一个候选工序,再用下面三条筛。**别按段落扫。** 1. 有明确产物:这条链能产出一个看得见的结果(图、素材、成品)。 2. 有具体做法:链条里有可操作的方法(提示词、框架、流程)。 3. 产物或做法有差异:跟别的工序比,产物不同 **或** 做法不同,满足一条即可。哪怕产物类型一样(都是场景图),只要提示词不同,就算两个工序,**不能合并**。 边界判断: - 同一条链内部的中间步骤,归进这条工序,不单拆(比如做海报时先生成背景图,背景图是中间步骤,不是独立工序)。 - 只展示了成品、完全没讲输入和做法的,不算工序。 - 产物类似但做法不同 → 算两个工序。**不能**因为"产物类型相同""方法论相似"就合并。 ### 1.2 哪些"没写出来"的要主动补 原文常省略一些理所当然的输入输出,你要补上: - **工具常识**:生成模型一般要带模型/参数;召回要有检索依据;视频生成要有主角图/分镜图当参考。 - **前后对不上**:下游用到了 X 但上游没产出 X → 是不是漏抽了?某个输出后面没人用 → 是不是漏了使用它的步骤? - **工艺常识**:短剧 = 分镜图 → 视频片段 → 拼接;建素材库 = 收集 + 入库 + 建索引。 补出来的输入输出标上 `inferred: true` 和原因(让后面复核),别悄悄塞进去。具体标法见[格式说明](../format/workflow-format.md)第三节。 ### 1.2 有循环/并行/分支怎么切 原文里如果有"对每个 X 重复""同时做几个版本""分情况",切步骤时要展开成**控制块 + 子步**,别硬压成一个步骤;循环里取数据/攒结果走"来源/去处"的 `[i]`、`.追加`。详见[格式说明](../format/workflow-format.md)第四节。 ### 1.3 连数据流时自查这几条 - 每个输入的"来源"(`← 某编号`)都能找到已存在的输出编号,或是 `← 工序输入`、字面量。 - 输入的类型,和它"来源"指向的那个输出的类型一致。 - 循环索引用在合理位置(`[i]` 在循环里,`[-1]` 指最近一项)。 - 接力/链式引用关系正确。 ### 1.3 怎么批量连(重要) `workflow.json` 由你**直接演化,绝不写 Python 脚本去生成/批改它**(脚本拼 JSON 容易踩转义坑、把文件弄坏)。几十处"来源/去处"用 `wf-patch.py` 一次搞定: 1. 把要改的清单写到 `_scratch/anchors.json` —— `[{"path":"p1.s1.inputs[0].anchor","value":"← s0o1"}, ...]`,**每条都是你的判断**(连到哪个编号是语义决定,不是机械套用); 2. 跑 `python spec/tools/wf-patch.py --workflow workflow.json --patch _scratch/anchors.json`。 工具负责安全写 JSON + 检查格式(有一条不合法就整批不写),你从不直接碰 JSON 文本。零星单处改,用 Edit 就行。路径写法见 [tools.md](../tools.md)。 ### 1.3 内容自动抄写(省得手抄) "来源"连好后,跑一次 `python spec/tools/wf-patch.py --workflow workflow.json --resolve-passthrough`。对那些"原样接收上游输出"的输入(来源是 `← 某编号`),你**不用手抄上游内容**——只在源头那个输出里填一次真内容,工具会顺着编号把它逐字抄到所有引用处("值"先留空即可)。**别把"(同上)"这种引用当最终内容留着**(检查会报,见[格式说明](../format/workflow-format.md)第二节"值")。