这是「AI 之路进阶升级指南」第四周 Day 13 的配套练习。你需要先完成 Day 8、Day 9、Day 10、Day 11 和 Day 12。
Day 12 结尾我说:下一篇练习,把流水线亲手跑一遍,两个工具接力干活。今天兑现。
我不演示现成的 skill 工作流怎么用,而是带你看这样一个工作流怎么从 0 开始搭建。项目叫 picture-book-pipeline,我拿它批量生成儿童绘本。它把一条工作流构建成了一整套技能:SKILL.md 总纲、角色提示词、执行脚本,全装在一个目录里。
构建的过程,是基于我和 AI 在自主式 agent 里的六轮核心对话以及相应的需求细节补充和修正,由 agent 自己完成的。这六轮核心对话完成定目标、讲工作流、确认节点与验收、要方案、实现、测试六个方面的需求细节,每轮都有相应的设计、思考以及对应的提示词。

第 1 轮,定目标
构建之前,先想清楚最终要实现什么。这里用 Day 10 的 GCO。Goal 是批量生成儿童绘本。Constraints 是面向 3-5 岁,词表范围固定。每个故事 6 页,画风 watercolor。Output 是一个可复用的 skill 目录。第一轮提示词:
输入 · 提示词
目标:把「批量生成儿童绘本」构建成一套技能包。约束:面向 3-5 岁儿童,词表范围固定,每个故事 6 页,画风 watercolor。产出:一个可复用的 skill 目录,含协议、角色提示词、执行脚本。
目标不定,后面全是空的。GCO 的作用就在这里:让 agent 先知道终点,再谈怎么走。
第 2 轮,讲工作流
目标定了,把工作流讲给 agent。绘本生成拆开是五段:定大纲、写故事、写提示词、生成图片、审核。这一轮不写方案,先确认 agent 理解得对不对。
输入 · 提示词
工作流如下:定大纲 → 写故事 → 写图片提示词 → 逐页生成图片 → 审核。请先复述每个环节的理解,再往下谈。
让 agent 先复述,防止它带错理解往下走。Day 8 讲的任务描述在这里用上:活要讲清楚,AI 才听得懂。
第 3 轮,确认节点与验收
工作流确认了,逐节点过职责。每个节点做什么,过程结果长什么样,最终结果满足什么条件。动手前,先把 Day 12 的分界线搬进来。
Day 12 的原话:写提示词是判断活,跑提示词是体力活。判断活做一次,体力活交给脚本。判据是能不能定下来。定下来的任务,能用程序化的逻辑判断和流程组合写出来,得到结果。生成图片就是这样的活。提示词写好了,生图流程就定了:调 API、拿图、存文件。每一步都是固定动作,程序逻辑写得出来。定不下来的任务,有标准但光按程序逻辑跑,结果死板僵硬。需要灵活调整,程序逻辑给不了。写故事就是这样的活。词汇、句型、情节都能定标准,但全按固定规则写,故事千篇一律。要在标准之上灵活调整,这是判断活,交给 agent 或人。
输入 · 提示词
逐节点分析每个环节:能不能用脚本程序实现,验收标准是什么。节点间的交接格式一起定。能实现的,用脚本程序实现。不能实现的,写提示词交给 agent。先给全量清单,我来确认。
agent 按判据过完清单。清单长这样:
输出 · agent 清单
定大纲:不能脚本实现,归 agent。验收:产出大纲,含词汇表与页数
写故事:不能脚本实现,归 agent。验收:产出表格,词汇全覆盖
写提示词:不能脚本实现,归 agent。验收:补第四列,画风一致
生成图片:能脚本实现,归脚本。验收:每页一张图,落盘成功
审核:不能脚本实现,归 agent。验收:图与文本判定一致
中间产物:四列表格,页码、画面描述、故事文本、图片提示词
清单我确认过,归属没有异议。审核这条,agent 先查,人拍板。
中间产物是核心。agent 和脚本靠四列表格交接:页码、画面描述、故事文本、图片提示词。第一列是页码,p.01、p.02 这种编号。解析方式定了按位置,脚本不认列名,只认第几列。也可以设计成按列名读,那样顺序自由,但列名错脚本就报错。我选了按位置,简单直接。按列名读有个隐患:表格是 agent 写的,列名一微调,脚本就崩。列的位置是死的,按位置读,约束更强。代价是顺序敏感。顺序一变,脚本按错位置读,立刻出错。表格这个中间产物,就是 Day 12 提到的协议。协议定义得越清晰,agent 写好脚本的成功率越高。
协议先于实现。表格先定,后面写角色提示词、写脚本,都按表格来。
第 4 轮,要方案
节点和验收定了,让 agent 细化实现方案。这一轮 agent 出 plan:技能包分几层,每层放什么,角色提示词怎么组织。
输入 · 提示词
基于确认的清单,给出实现方案:skill 目录结构、每个角色的提示词框架、脚本行为与参数。分节点列出,注明先后依赖。
方案里,技能包分三层。SKILL.md 是协议总纲,讲四件事:谁先谁后、每步产什么、格式是什么、失败怎么处理。roles 目录放角色提示词。tools 目录放 agnes 用法,跟角色走。scripts 目录放执行脚本。目录树长这样:
输出 · 方案目录树
skill/
├── SKILL.md # 总纲:四件事,顺序、产物、格式、失败处理
├── roles/ # 四个判断活的角色提示词
│ ├── outline-planner.md # 定大纲:主题与读者,出固定结构
│ ├── story-writer.md # 写故事:按大纲出三列表格
│ ├── prompt-artist.md # 补第四列:图片提示词
│ └── image-qa.md # 审核:判图与文本是否一致
├── tools/ # 角色 4 的 agnes 用法
│ └── agnes-generate.md # 调用现成 agnes 生图技能
└── scripts/ # 执行工具,随技能一起走
├── pipeline.py # 解析表格、批量生成、机械验收
└── verify_images.py # 视觉审核:图片对照文本打分
这棵目录树就是实现清单。方案定的是结构,每个文件做什么,第 3 轮的清单里都写明过。第 5 轮让 agent 照着清单,一个文件一个文件实现。所有文件,无论 md 还是 py,都是 agent 按设计大纲自己写出来的。
每份角色提示词都是三段式:身份、输入、输出格式。具体怎么写,Day 14 专门拆。
第 5 轮,确认后实现
方案我确认了,让 agent 动手。实现有两种节奏。一种是 agent 一口气做完,最后统一确认。另一种是拆成小步。每实现一步,确认一步,再进下一步。脚本我选第二种,它的歧义最多,边写边改。
先实现角色提示词。四个角色,agent 照方案依次写,每写一个我过一遍。提示词文档怎么写,怎么让 agent 知道做什么、怎么做,Day 14 专门拆。这里先不展开。
到脚本,动手前先把需求谈清楚。pipeline.py 做什么?解析 stories.md 表格,逐页生成图片。生图不自己发 HTTP 请求,直接调用现成的 agnes-ai 生图技能。agnes 是调用命令行工具的技能集,里面有图片生成的工作流,agent 可以直接用。谈需求的提示词长这样:
输入 · 提示词
pipeline.py 逐行解析 stories.md,每页生成一张图。生图调用现成的 agnes-ai 技能,执行 agnes_media.py image 命令,prompt 从表格第四列读。并发、超时、重试次数,你按经验给建议,理由写清楚。每页打印一行 ok 加故事名页码。audit.log 每页记一条 JSON,含时间、故事、页、API、状态、URL。有拿不准的,先问我再写。
agent 回了参数建议,并发 4、超时 120 秒、失败自动重试 2 次。理由我看过,成立,定了。我对脚本也有自己的想法,在这轮说出来。audit.log 用 JSON,字段定死六项:时间、故事、页、API、状态、URL。进度行给人看,JSON 给脚本和复查。还要留重跑参数:--story 选故事,--pages 选页。这等于给流水线留断点。跑到一半挂了,挑失败页从断点接着跑,不用整批重来。这个功能不提就漏,agent 不会自己想到加。谈妥了,agent 才动手。这是 Day 12 的「把脚本变成工具」。需求谈清楚,提示词写成命令行参数,改参数不改代码。
输入 · 提示词
按谈好的需求实现 pipeline.py 和 verify_images.py。图片生成用 agnes-ai 的图片生成技能。TDD 开发:先写测试,再实现,测试通过才算完成。
脚本写完,agent 自己先跑,跑通才交到我手里。命令是 agent 执行的,不需要人手动敲。实现这一步的流程是:谈需求、定参数、agent 写、agent 自测、用户验收。
第 6 轮,测试
实现完了,测试产出是否达到第 1 轮的目标。先让 agent 列测试清单,对照目标与验收条件。
输入 · 提示词
列出测试清单:覆盖第 1 轮目标与第 3 轮验收条件,逐项说明怎么测、预期结果。
清单定了,让 agent 按清单跑:
输入 · 提示词
按清单执行测试。命令和输出都贴给我:逐页输出、audit.log、verify 结果。跑完我来判读。
agent 先跑 mock,不花钱不联网:
输入 · 命令
uv run python3 skill/scripts/pipeline.py run stories.md --output-dir output
输出逐页一行,ok 表示成功:
输出 · 运行结果
ok the-red-ball p.01
ok the-red-ball p.02
audit.log 每页落一条 JSON,记时间、故事、页、API、状态、URL。mock 跑出来的长这样。api 字段标着 mock:
输出 · audit.log 记录
{"ts": "2026-08-05T04:12:56.832184+00:00", "story": "the-red-ball", "page": 2, "api": "mock", "status": "ok", "url": "mock://images/the-red-ball/page_02.png"}
想亲手验证,自己在命令行跑一遍同样的 mock 命令,对照上面的输出。命令在仓库根目录执行,结果应该和文章里一致。
机械验收也归脚本管。agent 接着跑 verify:
输入 · 命令
uv run python3 skill/scripts/pipeline.py verify stories.md --output-dir output
输出 verify: PASS 和 errors: 0。页号连续、字段非空、图片存在,三条是不变量。Day 11 管这叫不变量检查。
机械验收看文件在不在,不关心图里画了什么。图的内容对不对得上文本,要另起一层审核。视觉审核脚本把图片、画面描述、故事文本一起发给视觉模型:
输入 · 命令
uv run python3 skill/scripts/verify_images.py \
--manifest output/manifest.json --output-dir output \
--report qa-report.md --model opencode/mimo-v2.5-free
mock 全过,不算完。agent 换真实 agnes,第一轮实测就翻车了。真实命令长这样:
输入 · 命令
uv run python3 skill/scripts/pipeline.py run stories.md \
--output-dir output \
--api command \
--cmd "uv run --with httpx python agnes_media.py image --prompt-file {prompt_file}" \
--json-path data.0.url \
--cmd-cwd ~/agnes-ai
6 张图只有 5 张成功。1 张报了 Cannot connect to unknown。重试在同一次 run 内自动发生,stderr 打出 retrying ... (attempt 1/2)。仍失败就记 errors: 1。verify 不触发补跑,挑失败页重跑,补齐后 6 张全成。真实 API 不是教科书,失败是常态。Day 9 提醒过:评估 provider,稳定性也是成本。
修单页有参数。--story 选故事,--pages 选页。画坏的页单独重跑,不用整批。这个需求是第 5 轮谈脚本时特意提的。不提的话,agent 就漏了这个功能。
AI 审核真能挑刺。the-red-ball 第 1 页,画面描述写「站着」,图片生成「坐着」。视觉模型判 consistent=false。AI 说不行,就是不行。要改就改画面描述那一列,然后挑页重跑。改完重新生成,重测通过,才算真正走完。从 0 搭出来的流水线,到这儿看全景:agent 出内容、脚本跑量、AI 审核、人拍板。Day 12 说的两个工具接力干活,就是这四环接起来。
今日收获
- 会用 GCO 先定目标,再跟 agent 谈构建
- 会让 agent 复述工作流,确认理解一致
- 会用「能不能定下来」划分自动化和判断
- 会让 agent 先出方案,确认后才实现
- 脚本动手前先谈需求,参数定了才写代码
- 会用测试清单对照目标,验证产出
今天把一条工作流构建成了技能包。整个过程是六轮对话:定目标、讲工作流、确认节点与验收、要方案、实现、测试。回头看,没有新概念。GCO 来自 Day 10,任务描述来自 Day 8,分工与协议来自 Day 12。验收来自 Day 11,provider 评估来自 Day 9。六轮对话,是把学过的原理按顺序用一遍。
下一篇,接着拆这个 skill。重点讲提示词部分的写法:md 文档怎么让 agent 知道要做什么,以及如何做。
想对照着跑,完整的项目代码和文档都在 GitHub 开源:picture-book-pipeline。命令、脚本、角色提示词、16 个测试,全在仓库里。
这是「AI 之路进阶升级指南」第四周 Day 13 的配套练习。上篇是 Day 12 骨干教程。
