S.U.P.E.R 架构五原则深度解析:Spec-Driven Develop 如何为 AI 生成代码装上架构护栏

原创2026-10-21 22:36:46221 阅读

S.U.P.E.R 架构五原则深度解析:Spec-Driven Develop 如何为 AI 生成代码装上架构护栏

Spec-Driven Develop 是一款面向 AI 编程代理(Claude Code、Codex、Cursor 等)的规范驱动开发工作流插件,其核心架构护栏正是 S.U.P.E.R 五原则——Single Purpose、Unidirectional Flow、Ports over Implementation、Environment-Agnostic、Replaceable Parts。它把"像搭积木一样写代码"的理念织入项目分析、任务分解、执行审查的每一个阶段,确保 AI 生成的每一行代码都经过架构健康度把关,而不是盲目堆砌功能。


为什么 AI 生成代码需要架构护栏?

🤖 当你让 AI Agent "用 Rust 重写这个项目"或"迁移到微服务架构"时,一个常见的现实是:

  • AI 会兴奋地一口气写出几百行"能跑"的代码,但模块边界模糊、依赖方向混乱、配置硬编码散落各处
  • 几周后想替换一个数据源,结果牵一发动全身,改了 A 文件 B 文件也炸了
  • 代码能运行,但替换成本高得离谱——这才是架构质量的真正指标

Spec-Driven Develop 的解法不是写一条提示词,而是在工作流的每个阶段嵌入一套可量化的架构约束体系——S.U.P.E.R 五原则。它源自 Unix 哲学、Clean Architecture、Hexagonal Architecture 和 12-Factor App 等经典思想,但被重新组织成一套 AI Agent 能"执行"的检查清单。

完整原则定义见 super-philosophy.md


S.U.P.E.R 五原则速览

字母 原则 一句话解释 思想来源
S Single Purpose 一个模块、一个文件、一个函数只解决一个问题 Unix 哲学
U Unidirectional Flow 数据单向流动,依赖只指向内层,禁止循环调用 Clean Architecture
P Ports over Implementation 先定义接口契约(Schema/数据结构),再写实现 Hexagonal Architecture
E Environment-Agnostic 配置走环境变量,代码在本地、Docker、VPS 上都能跑 12-Factor App
R Replaceable Parts 任何一层都能被替换而不影响其他层——替换成本是架构质量的核心指标 S+U+P+E 的自然结果

🔑 核心类比:搭乐高。每块砖只有一个功能(S)、卡扣方向一致(U)、接口标准化(P)、任何玩具套装都能用(E)、想换一块随时换(R)。


逐一拆解:每个原则怎么"卡住"AI

S — Single Purpose:单一职责

试金石:如果你不能用一句话描述一个模块的职责,它就该被拆分。

AI 常见反模式:一个脚本同时做数据抓取、指标计算、图表渲染和消息通知。

S.U.P.E.R 的正确姿势:

fetch_data.py  → 只负责取数据,输出 JSON
compute.py     → 只负责计算,读 JSON 写 JSON
render.py      → 只负责渲染,读 JSON 生成 HTML
notify.py      → 只负责通知,读 JSON 调 webhook

在 Spec-Driven Develop 中,Phase 1(项目深度分析) 阶段会为每个模块逐一评估 S 原则合规度,不合规的模块会被标记为"需要拆分",并直接写入任务分解计划。

U — Unidirectional Flow:单向数据流

分层模型(从外到内):

+-----------------------------------+
|  Infrastructure (API, DB, UI)    |  ← 最外层,可随时替换
+-----------------------------------+
|  Adapters (transform, format)    |
+-----------------------------------+
|  Core business (pure logic)      |  ← 最内层,零外部依赖
+-----------------------------------+

试金石:核心逻辑能否在零外部服务的情况下跑通单元测试?如果不能,依赖方向就错了。

AI Agent 在分析阶段会检测循环依赖,并在规划阶段将"解耦"任务排到早期 Phase 优先执行——而不是等功能全写完再回头收拾。

P — Ports over Implementation:接口契约先行

三条实践规则:

  1. 每个模块的输入和输出必须是可序列化的数据结构
  2. 跨模块通信通过 JSON 文件或标准数据结构,跨模块接口必须有显式 Schema
  3. 定义明确的接口契约——不是"看代码自己琢磨格式"

为什么这对 AI 特别重要:AI 在并行执行多个任务时,如果模块之间没有显式契约,不同任务产出的代码格式会悄悄漂移。P 原则用 Schema 把"上游"和"下游"隔离开,替换数据源、渲染层或通知渠道时,核心逻辑零改动。

E — Environment-Agnostic:环境无关

配置优先级(从高到低):

环境变量 > .env 文件 > config.json > 代码内默认值

检查清单:

  • ✅ 所有 API key、webhook URL 从环境变量读取?
  • ✅ 所有依赖显式声明在 requirements.txt / package.json?
  • ✅ 没有硬编码的文件路径假设?
  • ✅ 换一台机器能零修改跑起来?

Phase 1 的风险评估会专门捕获硬编码配置和平台特定假设,这些发现会作为"S.U.P.E.R 违规热点"进入后续规划。

R — Replaceable Parts:可替换部件

这是前四个原则的自然结果和终极目标。核心度量指标是替换成本——替换一个组件是否引发无关模块的连锁修改?

替换矩阵(来自 super-philosophy.md):

要替换的东西 影响范围 正确做法
数据源 API 仅适配器层 写新 fetcher,输出相同 JSON
前端渲染器 仅渲染层 读相同 JSON,换渲染实现
通知渠道 仅通知层 换 webhook 适配器
部署平台 仅部署配置 改 Dockerfile 或配置文件
编程语言 仅实现层 JSON 契约不变,用任何语言重写

🚨 判断标准:如果替换一个组件导致无关模块连锁变更,架构就是"坏的"。


S.U.P.E.R 在工作流各阶段的落地

S.U.P.E.R 不是一份"AI 可能会读"的参考文档——它被织入工作流的每一层。以下是 SKILL.md 中定义的各阶段集成点:

工作流阶段 S.U.P.E.R 如何生效
Phase 1 深度分析 每个模块获得逐原则合规评分(格式:S🟢 U🟡 P🔴 E🟢 R🟡),风险评估中包含"S.U.P.E.R 架构健康度汇总"和违规热点排名
Phase 2 意图精炼 分析发现呈现给用户,让用户在任务分解前做出关于范围和 S.U.P.E.R 优先级的知情决策
Phase 3 任务分解 每个任务标注其"S.U.P.E.R 设计驱动原则"(该任务最需要关注哪些原则),早期 Phase 优先修复违规热点
Phase 5 执行与审查 每个任务完成后运行 10 项 S.U.P.E.R 代码审查清单;自适应控制循环将 S.U.P.E.R 合规评分作为执行遥测的一部分采集

分析阶段的模块清单模板要求对每个模块逐项评估五个原则,具体格式见 analysis.md;规划阶段的每个任务行都包含 S.U.P.E.R 列,见 plan.md。


10 项代码审查清单:任务完成的"门禁"

每个任务完成时,AI Agent 必须运行以下 10 项检查(来源:SKILL.md Phase 5):

# 检查项 对应原则
1 每个新模块/文件恰好一个职责 S
2 没有函数做了多于一件事 S
3 数据流为 输入→处理→输出,无反向依赖 U
4 没有引入循环导入 U
5 跨模块接口有 Schema 定义 P
6 模块 I/O 可序列化 P
7 没有硬编码的路径、URL、密钥或配置值 E
8 所有新依赖已显式声明 E
9 新模块可被替换而不修改其他模块 R
10 变更后所有测试通过 —

判定规则(简单粗暴):

  • ✅ 全部通过 → 继续下一个任务
  • ⚠️ 1-2 项失败 → 修复后重新审查,然后才能标记任务完成
  • 🛑 3 项及以上失败 → 停止执行,先重构再推进

自适应控制:S.U.P.E.R 分数成为"执行遥测"

这是 S.U.P.E.R 最精妙的设计之一。工作流不仅事前约束,还事后度量。

每个任务完成后,Agent 会采集三项遥测信号(定义见 adaptive-control.md):

信号 采集内容
实际工作量 估算 effort(S/M/L/XL)vs 实际,取差值
S.U.P.E.R 分数变化 运行 10 项清单,记录 super_score(0-10)和 super_delta(相对任务前状态的变化)
计划外依赖 执行中发现的、任务描述里没列的依赖数量(上限计 2 个)

三者合成 task_drift,累加到全局 drift_score。当偏差超过阈值时,系统自动响应:

漂移等级 阈值(按阶段任务数百分比) 自动响应
轻度 ≥ 20% 给下一个任务加警告标注
显著 ≥ 40% 暂停执行,重新分解剩余任务
严重 ≥ 60% 暂停执行,回到 Phase 2 重新评估范围

这意味着:如果 AI 持续产出 S.U.P.E.R 合规度下降的代码(super_delta 为负),漂移分会累积,系统会强制它停下来反思,而不是"硬着头皮继续写"。


真实案例:项目自己的归档

这个仓库就有一段完整的 S.U.P.E.R 工作流归档,可以直观看到五原则如何在实际任务中运作——"Adaptive Control Layer" 项目,6 个任务分 3 个 Phase,完整文档在 docs/archives/adaptive-control-layer/。

几个任务的实际标注(摘自 task-breakdown.md):

任务 描述 S.U.P.E.R 驱动原则 为什么是这个原则
T1 创建 adaptive-control.md 协议文档 S, P 单一职责文档 + 定义遥测接口契约
T2 将自适应控制集成到 SKILL.md U 确保数据流单向:SKILL 控制 → 执行器反馈
T3 子技能模板增加遥测章节 S, P 新增单一职责模块 + Schema 化遥测格式
T5 行为规则新增 3 条 S 每条规则只管一件事

任务间的依赖关系用 Mermaid 图表达,见 dependency-graph.md,整体结构为 Phase 1 打基础 → Phase 2 并行 3 条 Lane 集成 → Phase 3 收尾。每条 Lane 负责不同文件,合并风险被显式评估为 Low/None。


快速上手:让 S.U.P.E.R 护栏开始工作

📦 安装(以 Claude Code 为例):

/plugin marketplace add zhu1090093659/spec_driven_develop
/plugin install spec-driven-develop@spec-driven-develop

其他平台(Codex、OpenCode、Cursor)的安装脚本见 scripts/ 目录,或直接复制 SKILL.md 到你 Agent 的指令目录——纯 Markdown,零依赖。

🚀 触发方式:直接用自然语言描述大型改造任务即可自动触发,例如:

"把这个 Python 项目迁移到 Rust" "重构整个项目为微服务架构"

也可以手动触发:

/spec-dev rewrite this Python project in Rust

触发后,Agent 会进入 6 阶段流水线(Phase 0 意图捕获 → Phase 1 深度分析 → Phase 2 意图精炼 → Phase 3 任务分解 → Phase 4 进度追踪 → Phase 5 确认与执行),每个阶段都会自动应用 S.U.P.E.R 检查。

📁 产出物:所有分析、规划、进度文档统一存放在 docs/ 目录下,完成后归档到 docs/archives/,完整保留可追溯性。


小结

S.U.P.E.R 五原则把"好架构"从模糊的口号变成了可执行、可度量、可自动响应的工程约束:

  • 事前:分析阶段给每个模块打分,规划阶段给每个任务标注设计驱动原则
  • 事中:10 项代码审查清单作为任务完成的硬门禁
  • 事后:S.U.P.E.R 分数变化进入自适应控制遥测,偏差超标自动暂停、重新规划

对于使用 AI 编程代理做大规模改造的开发者来说,这套护栏的意义是:让 AI 像资深架构师那样思考边界,而不是像打字机一样堆代码。

登录后查看全文
spec_driven_develop