从 Skills 到分层 Workflow:AI Agent 工程化的下一层抽象

从 Skills 到分层 Workflow:AI Agent 工程化的下一层抽象

AI Agent 工程化示意

很多 AI Agent 项目走到中后期,都会开始沉淀 skills。

一开始,这几乎是必然动作。写代码要有 TDD skill,排查问题要有 debug skill,提交前要有 review skill,写文档要有 writing skill。每一个 skill 都像是在给 Agent 补一块局部能力:让它在某类任务上更稳定、更专业、更符合团队习惯。

但系统一旦继续生长,一个更深的问题就会浮出来:skills 的数量增加,并不必然带来 Agent 行为的稳定性。

表面上看,这是一个能力组织问题;但在机制层面,它其实是一个工程控制问题。小规模时,问题是「有没有合适的 skill」;规模扩大后,真正的问题变成了:这些能力在什么阶段被调用,由什么责任视角调用,依据什么输入推进,留下什么产物,又由什么机制决定是否可以进入下一步。

这也是我设计 Unified Skills 时真正想解决的事情:不是再做一组 skills,而是把 skills 组织成一套分层 workflow。

更准确地说,skills 解决的是「怎么做」,而 workflow 解决的是「什么时候做、由谁做、做到什么程度算通过、失败时退回哪里、过程证据留在哪里」。当 Agent 开始承担连续工程任务时,真正要治理的就不再是能力本身,而是能力进入流程的方式。

1. Skills Library 的上限,不是能力不足,而是工程失稳

Skills Library 工程失稳示意

很多团队一开始搭建 skills library,逻辑都很自然:把常见问题抽成一组可复用方法论,需要时调用。

  • 需要写测试时,调用 TDD skill;
  • 需要调试时,调用 debug skill;
  • 需要审查时,调用 review skill;
  • 需要写作时,调用 writing skill。

这种方式当然有效。因为它把零散经验变成了可复用结构,让 Agent 至少在局部问题上不再完全依赖临场发挥。

但这套方式的上限也很清楚。问题不在于 skill 没价值,而在于工程工作从来不是一次技能调用,而是一条连续推进的责任链。

当任务复杂度上升,系统会开始暴露出四类典型失稳。

1.1 时序失稳:Agent 会跳步骤

Agent 很容易从一个模糊想法直接进入实现,然后在最后补一句「已验证」。skill 可以告诉它测试该怎么写,debug 应该怎么做,但 skill 本身并不能天然约束它:什么时候才有资格开始写,什么时候必须先澄清,什么时候必须先停下来做设计。

这意味着,skills library 解决了局部执行质量,却没有解决阶段推进合法性。系统依旧可能以一种「看起来很高效,实际上不断跳过前置条件」的方式运行。

1.2 责任失稳:Agent 会自证通过

更危险的问题,是 self-confirming loop。

同一个 Agent 可以自己理解需求,自己做设计,自己列计划,自己完成实现,再自己 review,最后得出「没有问题」的结论。问题不在于它不努力,而在于工程系统不能把「提出问题、执行任务、判断通过」全部交给同一个认知视角。

这是工程里最常见却最容易被忽视的风险:不是模型能力不够,而是责任边界没有切开。

1.3 证据失稳:过程不可追踪

一次对话里,Agent 看起来好像完成了很多工作:澄清了需求、查了资料、做了设计、列了计划、写了实现、通过了 review。

但几天之后回看,往往很难回答以下问题:

  • 当时的需求边界到底是什么?
  • 哪些外部资料被采纳,哪些被拒绝?
  • 设计时讨论过哪些替代方案?
  • 计划里哪些任务允许并行,哪些必须串行?
  • review 审的是 spec 完整性,还是只是代码风格?
  • ship 时有没有留下导出、同步、发布和回滚记录?

如果这些问题无法回放,那么整个流程看似完成,实际上却缺少可审计证据。它更像一场即时表演,而不是一个可复盘的工程过程。

1.4 治理失稳:skills 之间没有组织关系

TDD、review、debug 当然都可以是好 skill,但如果它们只是平铺在一个目录里,Agent 仍然要在运行时临场决定:先调哪个,什么时候切换,什么情况下跳过,失败后回到哪里。

而这个「临场决定顺序」的过程,本身就是最大的随机性来源。

所以,skills library 可以提升局部能力,但不能单独解决工程稳定性。因为它解决的是能力复用问题,不是流程治理问题。

2. Workflow 不是 Skills 的顺序表,而是阶段协议

Workflow 阶段协议示意

从这个角度看,Unified Skills 的第一层升级,并不是多做几个 skill,而是把 skills 放进一个明确的阶段流里。

主路径不是「需要什么就调用什么」,而是:

/refine -> /design -> /plan -> /build -> /review -> /ship

这条路径背后的判断是:工程交付需要状态机,而不是自由联想。

2.1 /refine:把模糊想法收敛成可验证规格

/refine 的任务不是「继续聊一聊需求」,而是把模糊想法压缩成可验证的 spec。它关心的是:

  • 问题是什么;
  • 用户是谁;
  • 成功标准是什么;
  • 约束有哪些;
  • 当前缺哪些外部事实;
  • 最终产物类型是什么。

这一阶段如果没有收敛清楚,后面所有实现都可能在错误目标上越跑越快。

2.2 /design:在实现前冻结创作与体验判断

很多系统最容易犯的错,是把 design 偷偷塞进 build。也就是说,边做边想、边写边改、边实现边决定体验。

这在小任务里看起来无伤大雅,但在多产物系统里会迅速失控。UI、文章、deck、视觉稿这些产物,本质上都需要先完成创作和体验层面的判断,再进入生产。否则,build 阶段就会不断替代 design 阶段,最终让整个流程失去边界。

2.3 /plan:定义任务拓扑,而不是写一份待办清单

/plan 真正要做的不是列出一些 todo,而是定义任务拓扑:

  • 哪些任务必须串行;
  • 哪些任务可以并行;
  • 哪些文件或模块允许写入;
  • 哪些步骤完成后才能进入下一阶段;
  • 哪些风险需要前置处理。

计划不是形式主义,它的意义在于把「工作如何展开」从运行时 improvisation,变成可审查的结构。

2.4 /build:消费已批准输入,而不是重新发明目标

/build 才是实现和内容生产真正发生的地方。但它最重要的纪律不是「认真执行」,而是:只消费已经批准的 spec、design 和 plan,而不是在实现过程中重新定义目标。

这是很多 Agent workflow 会失效的关键点。因为如果 build 可以随时回写目标、改写边界、替代 review,那前面的阶段就会全部失去约束意义。

2.5 /review:门控,而不是口头确认

/review 也不应该只是「帮我看看」。

真正的 review 是门控。它的职责不是鼓励,不是润色,也不是在明显缺失时给一句「整体不错」。它必须有能力阻断流程:只要发现 blocking 问题,就要明确退回 /build,必要时甚至退回 /plan 或 /refine。

2.6 /ship:交付完成,不等于实现结束

最后的 /ship 处理的不是代码本身,而是交付动作:发布、导出、同步、记录、回滚信息、交付痕迹。工程系统最容易被忽略的一点是:代码写完,并不等于交付完成。

交付真正结束,必须以可追踪的收尾动作为标志。

因此,workflow 的意义不在于给 skills 排一个顺序,而在于把每个阶段变成有输入、有输出、有门控的协议。它解决的不是「快点进入某种能力」,而是「任务如何合法地推进到下一状态」。

3. 真正的升级,不只是阶段流,而是纵向分层

纵向分层示意

如果只有阶段流,这个系统依然可能退化成一组更长、更复杂的 prompt。真正让 Unified Skills 变成工程系统的,不只是横向阶段,而是纵向分层。

我把它抽象成六层:

CANON -> Command -> Agent -> Skill -> Artifact -> Hook / validate

这不是六种文件分类,而是六种不同的系统职责。每一层都解决一个问题,同时拒绝解决另一个问题。一个方案是否成熟,不看它能不能跑通一次,而看它能不能被复用、治理和演化。

4. CANON:所有 Workflow 的宪法

CANON 全局纪律示意

最上层是 CANON.md。

它不是某个具体 skill,也不是项目说明书,而是所有阶段、角色和技能都必须继承的全局纪律。它定义的不是某类任务技巧,而是不可放松的底线:先陈述假设、控制范围、验证优先、遇到矛盾先停止并澄清、调试先找根因、不做 yes-machine。

这一层解决的是纪律统一,而不解决具体任务策略。

为什么它必须独立存在?因为如果没有 CANON,每个 skill 都会带着自己的隐含价值观。TDD skill 强调测试,debug skill 强调根因,review skill 强调质量,但它们之间缺少统一的行为合同。久而久之,整个系统会出现一种隐性腐蚀:局部方法论都很认真,整体行为却越来越不一致。

所以 CANON 的作用不是让技能更强,而是让所有局部方法论不能为了局部方便,绕过全局纪律。

这也是第一条原则:具体能力可以增加纪律,但不能放松纪律。

5. Command:阶段控制器,而不是快捷入口

Command 层回答的问题是:现在处在哪个阶段,这个阶段应该读什么、产出什么、通过条件是什么。

在 Unified Skills 里,Command 不是 prompt shortcut,而更像 workflow controller。

例如 /plan 的职责,不是「调用一个计划类 skill」,而是定义计划阶段的合法输入、合法输出和门控条件。它要消费已经批准的 spec 和 design,产出 03-plan.md,在大型任务里拆出子计划和并行矩阵,并明确写入范围和风险点。

这一层解决的是阶段推进协议,而不解决具体任务的方法论。

换句话说,Command 不负责告诉你「debug 怎么做」,也不负责告诉你「review 怎么看代码」;它负责回答的是:当前阶段是否具备进入条件,当前产物是否达到通过条件。

这也是第二条原则:workflow 需要阶段状态机,而不是能力快捷方式。

6. Agent:责任视角,而不是人格表演

Agent 层最容易被误解。

很多系统引入 agent,是为了让模型「扮演」产品经理、架构师、设计师、审查员。但如果角色只停留在语气层面,它最多制造一点表演感,并不能真正提升工程质量。

Unified Skills 里的 Agent 层,核心不是角色扮演,而是责任切分。

需求分析、任务计划、软件实现、规格审查、代码质量审查、发布判断,最好不要全部由同一个视角闭环完成。不是因为模型不能同时做这些事,而是因为工程系统不能把「提出问题、执行任务、判断通过」压在同一个认知回路里。

例如:

  • review agent 不应该重新定义需求,它应该基于已批准的 spec 判断实现是否完整;
  • software engineer agent 不应该在 build 阶段决定任务拓扑,它应该在 plan 的约束内实现;
  • design reviewer 不应该只说「视觉不错」,它应该阻断缺少证据来源、模式综合和采纳/拒绝理由的设计稿。

这一层解决的是责任分离,而不解决阶段协议定义。

这是第三条原则:Agent 的核心价值是责任分离,不是人格化。

7. Skill:真正可复用的方法论单元

Skill 方法论单元示意

Skill 层是最具体的一层,也是最容易被过度简化的一层。

一个合格的 skill,不应该只是一段「请你认真做 X」的提示词。它必须至少说明:

  • 什么时候进入;
  • 什么时候退出;
  • 具体步骤是什么;
  • 哪些说法是常见借口;
  • 哪些情况必须停止;
  • 如何验证自己做完了。

这也是为什么 Unified Skills 里的 SKILL.md 往往不只是「做法说明」,而是会包含入口/出口、流程、红旗、常见说辞、验证清单,强纪律技能甚至会定义 Iron Law。

这一层解决的是方法论复用,而不解决整体工作流编排。

也就是说,Skill 负责回答「这一类事情怎么做」,但不负责回答「现在是不是该做这件事」。后者属于 Command 和 Agent 的职责。

这是第四条原则:Skill 是执行方法论,不是工作流总控。

8. Artifact:把过程变成证据链

Artifact 证据链示意

如果只看对话,Agent 的工作很容易变成一段不可回放的即时表演。

今天看起来它澄清了需求、做了设计、写了计划、完成了实现、通过了 review;但过几天回头看时,很多关键信息已经散失在上下文里,既无法复盘,也无法迁移。

所以 Unified Skills 把 artifact 作为 workflow 的一层,而不是一组顺手保存的文档。

01-spec.md、02-design.md、03-plan.md、04-review.md、05-ship.md 这些文件,并不是文档洁癖,而是 Agent 行为的审计轨迹。它们记录的不是「写过什么」,而是「为什么这样推进、为什么这样取舍、为什么允许进入下一阶段」。

这一层解决的是过程审计与复盘,而不解决运行时拦截。

与此同时,artifact 也是多产物 workflow 成立的前提。软件、文档、文章、deck、视觉稿并不共享同一种构建路径。如果没有 artifact_type,系统就很容易用软件工程的方式处理所有产物,或者用内容创作的方式绕开软件质量门控。

这是第五条原则:没有 artifact,workflow 就缺少可审计证据。

9. Hook / Validate:把约定变成护栏

Hook 与 Validate 护栏示意

只靠提示词约束 Agent,是不稳定的。

提示词可以提醒模型不要做破坏性操作,但运行时 hook 才能拦截破坏性命令。文档可以要求技能命名规范、索引一致、根文档同步,但 validate 才能发现 README、AGENTS、skills-index、锁文件和 hooks 实现之间是否已经发生合同漂移。

这也是 Unified Skills 里 hooks 和 ./validate 的意义所在。

它们不负责替代思考,也不负责替代高层 review;它们负责把一部分纪律从「应该遵守」变成「违反就会暴露」。

这一层解决的是运行时护栏与维护期漂移暴露,而不替代高层判断本身。

这一点非常关键。高层纪律如果没有低层护栏,最终就只是建议。系统最容易发生的腐蚀,不是某个 prompt 突然写错,而是多个合同慢慢表面不一致:README 说一套,AGENTS 说一套,skills-index 还是旧的,hooks 实现又是另一套。等这些漂移积累起来,Agent 在不同入口读到的,就不再是同一个系统真相。

这是第六条原则:高层纪律必须有低层护栏,否则只是建议。

10. 两阶段 Review:分层门控的一个具体例子

分层 workflow 不是抽象口号,它必须体现在具体门控设计里。Unified Skills 里的 review,就是一个很典型的例子。

这里的 review 不是单阶段「代码看起来怎么样」,而是拆成两关。

10.1 第一关:Spec Compliance

第一关先检查实现是否覆盖了 spec 中定义的功能需求、边界条件、错误路径和验收标准。它关心的不是「写得漂不漂亮」,而是:实现了什么,是否把该做的事情做全了。

10.2 第二关:Code Quality

只有在第一关通过后,才进入第二关。第二关才讨论 correctness、readability、architecture、security、performance 等质量维度。它关心的是:这些功能是如何被实现的,代价和质量是否合理。

这个拆分看似简单,但它体现了分层 workflow 的价值。

如果功能都没实现完整,就急着讨论代码风格,审查资源会被浪费;如果功能缺失和质量问题混在一起,反馈也会变得模糊。两阶段 review 的作用,就是把问题类型切开:先确认做没做对,再确认做得好不好。

这不是让 review 更复杂,而是让门控更有顺序、更有边界、更有退回路径。

11. 从 Prompt 到 Workflow,再到治理结构

治理结构示意

回到最开始的问题:AI Agent 工程化到底需要什么?

更长的 prompt 有用,但不够。更多的 skills 有用,但也不够。真正需要设计的,是 skills 之间的组织关系,以及这些组织关系如何进一步沉淀为治理结构。

也就是说:

  • 用 CANON 定义不可放松的全局纪律;
  • 用 Command 定义阶段状态机;
  • 用 Agent 定义责任视角;
  • 用 Skill 承载可复用方法论;
  • 用 Artifact 留下过程证据;
  • 用 Hook / validate 把规则变成护栏。

这套结构的目标,不是让 Agent 显得更复杂,而是让它在复杂任务里更可控。一个系统是否工程化,不看它能不能完成一次任务,而看它能不能稳定地推进、回退、审计和复盘。

所以,prompt 是表达,skill 是方法,workflow 是制度,而 layered workflow 才是治理结构。

Agent 工程化总结示意

所谓 Agent 工程化,真正工程化的不是生成能力本身,而是任务推进权、通过判定权、责任边界和证据链的分配方式。

这也是 Unified Skills 想表达的核心判断:AI Agent 的下一层抽象,不是继续堆 skills,而是把 skills 放进一套有阶段状态机、责任分离、证据链和运行护栏的分层 workflow。

进一步而言,真正成熟的 Agent 系统,不应该只是「会做很多事」,而应该知道:在什么阶段,由什么模块,以什么责任,依据什么证据,完成什么结果。

技术方案的价值,不在于提出一个新名词,而在于重新划清问题边界,并给出可落地的系统结构。对 Agent 来说也一样。真正的工程化,不是把能力堆得更多,而是让系统知道自己何时开始、何时停止、何时退回、何时交付。