workflow.template.json 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. {
  2. "$comment": "spec/templates/workflow.template.json — Agent 在 Phase 1 Write 这份 workflow.json 骨架 (复制到 outputs/case-{N}/workflow.json + 替换所有 <填:...> 占位符), 之后各 phase in-place Edit 它 (不写新文件). 顶层 `procedures` 是数组: 多工序填多个 procedure 对象; 单工序 case 删掉示例里的 p2, procedures 只留长度-1 数组. page_title 不写进本文件 — Phase 3 由 --page-title 提供; source.body_text/封面 由 --source-input 自动填. Phase 3 跑: `python spec/tools/render-case.py --workflow outputs/case-{N}/workflow.json --source-input input/case-{N}-raw.json --page-title \"Case N · 主题\" --case-id N --out outputs/case-{N}/case-{N}-<slug>.html` (renderer 内存组装 case_data, 不落盘 case_data.json) + `python spec/tools/lint-case.py --workflow outputs/case-{N}/workflow.json --case-id N`. Schema 见 spec/format/case-data.schema.json (canonical), 字段说明见 spec/format/procedure-table.md.",
  3. "source": {
  4. "platform": "<填:原文平台 e.g. wechat-gzh>",
  5. "author": "<填:原文作者>",
  6. "date": "<填:发布日期 e.g. 2026 上半年>",
  7. "url": "<填:原文 URL>",
  8. "title": "<填:原文标题>",
  9. "excerpt": "<填:摘要 1-3 句>"
  10. },
  11. "procedures": [
  12. {
  13. "id": "p1",
  14. "name": "<填:工序名 e.g. 产品场景图生成>",
  15. "purpose": "<填:一句话目的>",
  16. "category": "<填:产物创造|资产建设|自动化|分析|学习>",
  17. "platform": "<填:平台, 通常同 source.platform>",
  18. "author": "<填:作者, 通常同 source.author>",
  19. "declarations": {
  20. "inputs": [
  21. { "type": "<填:类型>", "name": "<填:变量名>", "desc": "<填:说明 (可选)>" }
  22. ],
  23. "resources": [],
  24. "returns": { "type": "<填:返回类型>" }
  25. },
  26. "type_registry": {
  27. "$comment_for_type_registry": "本工序的 case-specific 类型. key=类型名, value={extends, desc} (extends 桥接到一个 stdlib 叶子). 不需要可整段删掉 (type_registry 选填). 多工序时每个 procedure 各自声明 (允许跨工序冗余)."
  28. },
  29. "steps": [
  30. {
  31. "id": "s1",
  32. "kind": "step",
  33. "effect": "<填:作用 = spec/taxonomy/effect.json $leaves 之一 (须命中字典叶子)>",
  34. "via": "<填:工具名 e.g. human / nano_banana / (AI 生图工具)>",
  35. "action": "<填:动作 = spec/taxonomy/action.json 树路径 e.g. 提取/化学提取/解构>",
  36. "feature": "<填:随机|幂等|写外部|读外部|人工|本地|->",
  37. "control": "-",
  38. "instruction": [
  39. ["directive", "<填:给工具的 prompt 文本 (可选)>"],
  40. ["memo", "<填:工艺备注 (可选)>"]
  41. ],
  42. "inputs": [
  43. {
  44. "substance": "<填:实质路径 e.g. /理念/知识/... (走 taxonomy-lookup.py --validate 校验)>",
  45. "form": "<填:形式路径 e.g. /架构/逻辑/...>",
  46. "type": "<填:类型 = spec/taxonomy/type.json 叶子, 或 case-specific (须在本 procedure.type_registry 注册 extends)>",
  47. "name": "<填:变量名>",
  48. "value": "<填:数据内容描述>",
  49. "anchor": "<填:← 工序输入 / ← sN.x>"
  50. }
  51. ],
  52. "outputs": [
  53. {
  54. "substance": "<填:实质路径>",
  55. "form": "<填:形式路径>",
  56. "type": "<填:类型>",
  57. "name": "<填:变量名>",
  58. "value": "<填:数据内容描述>",
  59. "anchor": "<填:→ sN / → 返回 X>"
  60. }
  61. ],
  62. "intent": "<填:目的列 token 句, e.g. 用 {via:X} {act:Y} 从 {in-type:Z} 得到 {out-type:W}>",
  63. "focus": ["via", "action", "in-type-0", "out-type-0"]
  64. }
  65. ],
  66. "return_row": {
  67. "arrow": "↩",
  68. "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"<填:返回类型>\"><填:返回类型></span>"
  69. }
  70. },
  71. {
  72. "id": "p2",
  73. "name": "<填:第二工序名 — 此 p2 示范「控制块」写法 (遍历/并行/分支). 单工序删整个 p2; 无控制流则把下面 block+nested 换回普通 step (见 p1)>",
  74. "purpose": "<填:一句话目的>",
  75. "category": "<填:类别>",
  76. "platform": "<填:平台>",
  77. "author": "<填:作者>",
  78. "declarations": {
  79. "inputs": [ { "type": "<填:类型>", "name": "<填:变量名>" } ],
  80. "resources": [],
  81. "returns": { "type": "<填:返回类型>" }
  82. },
  83. "steps": [
  84. {
  85. "id": "s1",
  86. "kind": "block",
  87. "control": "<填:遍历|并行|分支>",
  88. "via": "-",
  89. "feature": "-",
  90. "intent": "<填:控制块整体在做什么 (高层意图). 块只带 control+intent+via='-'+feature='-'+io; effect/action/focus 归下面 nested 执行步, 块本身不要>",
  91. "inputs": [ { "type": "<填:类型>", "name": "<填:被遍历的序列>", "anchor": "<填:← sN.x>" } ],
  92. "outputs": [ { "type": "<填:类型>", "name": "<填:累积结果列表>", "anchor": "<填:→ sN>" } ]
  93. },
  94. {
  95. "id": "s1.1",
  96. "kind": "nested",
  97. "group": "s1",
  98. "effect": "<填:作用叶子>",
  99. "via": "<填:工具名>",
  100. "action": "<填:动作路径>",
  101. "feature": "<填:随机|幂等|人工|...>",
  102. "control": "-",
  103. "instruction": [ ["decorator", "@采样(n=4, pick=人工) (可选: 抽样 N 选 1 等修饰)"] ],
  104. "inputs": [ { "substance": "<填:实质路径>", "form": "<填:形式路径>", "type": "<填:类型>", "name": "<填:循环变量>", "value": "<填:数据内容描述>", "anchor": "<填:← 被遍历序列[i]>" } ],
  105. "outputs": [ { "substance": "<填:实质路径>", "form": "<填:形式路径>", "type": "<填:类型>", "name": "<填:单次产出>", "value": "<填:数据内容描述>", "anchor": "<填:→ 累积结果列表.追加>" } ],
  106. "intent": "<填:这一次迭代在做什么>",
  107. "focus": ["via", "action", "out-type-0"]
  108. }
  109. ],
  110. "return_row": {
  111. "arrow": "↩",
  112. "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"<填:返回类型>\"><填:返回类型></span>"
  113. }
  114. }
  115. ]
  116. }