首页 / 文章 / 超越规范驱动开发:那本关于智能工程实践的手册

超越规范驱动开发:那本关于智能工程实践的手册

《超越规范驱动开发:代理式工程实践手册》操作指南——为采用该模式的团队提供合同、检查机制以及可直接插入的代码模块。

4165 词

以下内容围绕《超越规范驱动开发:正在改变我们软件构建方式的智能工程手册》梳理出一条实用路径。重点仍在于契约、检查机制以及可直接替换的代码占位符,而非激励性表述。 在完成概览阶段时,首先写下契约内容:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持透明。 相较于庞大的脚本,应优先选择小型且可测试的单元。当某个步骤失败时,故障应指向单一责任点,而非复杂的流程链。

沿用至今的名称及其重要性

“The Name That Stuck”阶段若被视为可度量的界面,则效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,绝不允许默许部分完成的情况。 保持图表状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点修改了哪个字段,还会在中断后导致无法继续处理。

五层结构:

将“五层模型”视为可度量的结构来使用效果最佳。在扩大范围之前,先记录一份成功的案例、一个失败案例以及回滚说明。在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,就能避免在从演示环境过渡到共享环境时出现意外费用。要保持图表状态简洁且类型明确,嵌套的数据块会掩盖是哪个节点修改了哪个字段,还会在出现中断后导致流程无法继续。

第一层——规范:在提出需求之前先明确所需内容

将“第一层规范定义”阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份标准操作流程、一个故障案例以及回滚说明。 应将配置与应用程序代码分开。环境文件、密钥存储和功能标志应集中存放于一个位置,以便操作人员无需查看整个架构即可进行审计。 需保持架构状态的简洁性与类型化。嵌套的数据结构会掩盖哪个节点修改了哪个字段的信息,还会导致在出现中断后无法继续执行。 将“第一层规范定义”阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份标准操作流程、一个故障案例以及回滚说明。 相比庞大的脚本,应优先使用小型且可测试的单元。当某个步骤失败时,故障原因应能明确指向单一责任模块,而非复杂的流程链。

具体实现方式——规范模板:

在实现规范阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务上的完整性。

# Feature Spec: [Feature Name]
## Last updated: [Date] — this document is the source of truth
## What this must always do
- [ ] [Behaviour 1 — specific, testable]
- [ ] [Behaviour 2 — specific, testable]## What this must never do
- [ ] [Boundary 1 — e.g. "Never process refund >$500 without human approval"]
- [ ] [Boundary 2 — e.g. "Never fabricate a citation"]## Success criteria (measurable)
- Context recall: >0.85
- Faithfulness: >0.90
- Cost per query: <$0.15
- Latency p95: <2s## Failure signals (alert if breached)
- Any metric drops >5% from 7-day baseline
- Cost per task exceeds 3x expected range
- User complaint rate exceeds 2% of sessions## Decomposition (for parallel agents)
- [ ] Task A: [scope] — can be delegated independently
- [ ] Task B: [scope] — depends on Task A output
- [ ] Task C: [scope] — can run parallel with Task A

第二层——编排:多个代理,一个统一输出

对于第二层编排的多阶段流程,在修改代码之前需明确输入参数、各步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行相应步骤,而无需猜测隐藏状态。应在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在流程从演示环境转向共享环境时出现意外账单。对于会产生费用或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务功能的完整性。

实际应用——并行编排:

在实现并行编排阶段,应在修改代码之前明确输入参数、各步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行相应步骤,而无需猜测隐藏状态。 配置信息应与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中于一个位置,以便操作人员无需查看整个流程即可进行审计。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。仅靠编译时的连接方式并不足以确保业务的完整性。

class AgenticOrchestrator:
    """Plan → Execute (parallel) → Verify"""
    def plan(self, feature_spec: dict) -> dict:
        """Decompose feature into independently delegatable tasks."""
        tasks = []
        for component in feature_spec["decomposition"]:
            tasks.append({
                "id": component["id"],
                "spec": component["scope"],
                "constraints": feature_spec["must_never"] + component.get("local_rules", []),
                "depends_on": component.get("depends_on", []),
                "verification": component.get("success_criteria", []),
            })
        independent = [t for t in tasks if not t["depends_on"]]
        sequential  = [t for t in tasks if t["depends_on"]]
        return {"parallel": independent, "sequential": sequential}    async def execute(self, plan: dict):
        """Run independent tasks in parallel, sequential tasks in order."""
        parallel_results = await asyncio.gather(*[
            self.delegate_to_agent(task) for task in plan["parallel"]
        ])
        for task in plan["sequential"]:
            result = await self.delegate_to_agent(task, prior=parallel_results)
            parallel_results.append(result)
        return parallel_results    def verify(self, results: list, spec: dict) -> dict:
        """Check all outputs against the spec — structural, not line-by-line."""
        issues = []
        for result in results:
            if not self.satisfies_spec(result, spec):
                issues.append(f"{result['id']}: does not satisfy spec")
            if self.conflicts_with(result, results):
                issues.append(f"{result['id']}: conflicts with another module")
        return {"passed": len(issues) == 0, "issues": issues}

在实现并行编排阶段时,应在修改代码之前明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能明确指向某个具体的责任主体,而非整个复杂的流程。

第三层——编码规则:向智能体传授团队的工作方式

在处理第三层编码规则阶段时,首先写下契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将这一阶段视为输入与验证后输出之间的契约。为相关成果命名,明确成功判定标准,并杜绝无声的半完成状态。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。

实现它——规则层级结构:

在“实现规则”阶段工作时,首先写下契约内容:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 在耗时较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次收取相同的LLM调用费用。

your-company/
├── .ai-rules/
│   └── org-rules.md          ← Company-wide: security, compliance, style
│
├── team-payments/
│   ├── .ai-rules/
│   │   └── team-rules.md     ← Team-level: error handling, testing, deploys
│   │
│   ├── service-checkout/
│   │   ├── CLAUDE.md          ← Repo-level: architecture, tech stack, builds
│   │   ├── src/
│   │   │   ├── auth/
│   │   │   │   └── .ai-rules.md  ← Module: auth-specific constraints
│   │   │   └── payments/
│   │   │       └── .ai-rules.md  ← Module: PCI compliance rules
# org-rules.md (loaded for every agent, every repo)
- Never commit secrets or credentials
- All public APIs require authentication
- Error responses must never expose stack traces
- Log every state-changing operation with user context
# team-rules.md (inherits org, adds team specifics)
- Use Result<T, E> pattern — never throw exceptions
- All database queries go through the repository layer
- Tests must cover the happy path + 2 failure modes minimum# CLAUDE.md (inherits team, adds repo specifics)
- This repo uses Express.js + Prisma + PostgreSQL
- Run `npm test` before suggesting any PR is ready
- Migrations are append-only — never modify applied migrations# module .ai-rules.md (inherits repo, adds module specifics)
- auth/: All token operations must use constant-time comparison
- payments/: PCI DSS requires field-level encryption on card data

第4层——人工监督:委托、审查、负责

在处理第4层人工监督阶段时,首先需明确相关约定:所需的输入参数、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持透明可追溯。 应将配置信息与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中于一个位置,以便操作人员无需查看整个系统结构即可进行审计。 在成本较高的步骤之后设置检查点。当操作人员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。 在处理第4层人工监督阶段时,首先需明确相关约定:所需的输入参数、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持透明可追溯。 相比复杂的脚本,更应优先使用小型且易于测试的单元。当某个步骤失败时,故障原因应能明确指向某个具体的功能模块,而非整个混乱的流程。

实施它——智能体输出审查清单:

将“实施它”这一智能体阶段视为可度量的工作面,效果最佳。在扩大范围之前,需记录一份理想输出样本、一个失败案例以及回滚说明。 将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,杜绝默许的半完成状态。 保持图结构的状态扁平且具有类型约束。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在中断后导致无法继续处理。

## Agent Output Review Checklist
### Spec alignment (does it do what was asked?)
- [ ] All "must always do" behaviours are implemented
- [ ] No "must never do" boundaries are violated
- [ ] Success criteria from the spec are met or tested### Architectural coherence (does it fit the system?)
- [ ] No new dependencies introduced without justification
- [ ] Consistent with naming, patterns, and structure of existing code
- [ ] No duplication of logic that exists elsewhere### Safety and edge cases
- [ ] Error handling covers the failure modes the spec anticipated
- [ ] No hardcoded credentials, keys, or environment-specific values
- [ ] Input validation present on all external-facing boundaries### What the agent cannot check for itself
- [ ] Does this make business sense? (not just technical correctness)

第五层——可观测开发:了解系统做了什么以及是否正确

将第5层可观测性开发阶段视为一个可度量的界面,效果最佳。在扩大范围之前,先记录一份典型的成功案例、一个故障实例以及回滚说明。在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解这些成本,就能避免在从演示环境过渡到共享环境时出现意外费用。要保持图表状态简洁且具有类型定义,嵌套的数据块会掩盖是哪个节点修改了哪个字段,还会在出现中断后导致状态无法恢复。

实际上,可观测性开发意味着三件事:

在实践中,可观测性开发阶段若被视为可度量的对象,则效果最佳。在扩大范围之前,应记录一份完美的日志、一个故障案例以及回滚说明。 将配置置于应用程序代码之外。环境文件、密钥存储和功能开关应集中存放,以便操作人员无需查看整个系统结构即可进行审计。 保持系统状态的结构简洁且具有类型约束。嵌套的数据结构会掩盖哪个节点修改了哪个字段的信息,还会导致在出现中断后无法继续执行。 在实践中,可观测性开发阶段若被视为可度量的对象,则效果最佳。在扩大范围之前,应记录一份完美的日志、一个故障案例以及回滚说明。 相较于庞大的脚本,更应优先使用小型且可测试的单元。当某个步骤失败时,故障应指向单一的责任模块,而非复杂的流程链。

具体实现——最基本的可观测性开发配置:

在进入最低级别的实施阶段之前,需先明确输入参数、该步骤的负责人以及结束标准,然后再修改代码。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功判定标准,杜绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务上的完整性。

from dataclasses import dataclass, field
from datetime import datetime
@dataclass
class AgentTrace:
    """Minimum trace for every agent-delegated task."""
    task_id: str
    agent_id: str
    spec_given: str                    # What was the agent told to do?
    tools_used: list[str]              # Which tools did it invoke?
    files_modified: list[str]          # What did it change?
    model_version: str                 # Which model, which version?
    tokens_consumed: int               # What did it cost?
    started_at: datetime = field(default_factory=datetime.utcnow)
    completed_at: datetime | None = None
    verification_result: str = ""      # pass / fail / needs_review
    human_reviewer: str = ""           # Who signed off?
    issues_found: list[str] = field(default_factory=list)
## Weekly Observable Development Review (15 minutes)
1. How many agent tasks were delegated this week?        ___
2. How many passed verification on first attempt?        ___  (target: >80%)
3. Which task category had the most issues?              ___
4. Top 3 issues found during review:
   - ___
   - ___
   - ___
5. Which issues should become codified rules (Layer 3)?  ___→ Update CLAUDE.md with any new rules from this week's observations.

这对您的职业发展意味着什么?

在“这意味着什么”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在流程从演示环境转向共享环境时出现意外费用。对于会耗费资金或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。

以下是周一至周五的操作指南:

在“周一至周五阶段”中,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 配置信息应置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一个位置,以便操作人员无需查看整个流程即可进行审计。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务流程的完整性。 在“周一至周五阶段”中,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 相较于庞大的脚本,应优先使用小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任主体,而非多个部分。

带角度的管道。

SDD文章中的错误有哪些?

在“找出错误”阶段,首先写下契约:所需的输入、成功信号以及部分失败时会发生什么。这样的清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关成果命名,定义成功检查标准,并杜绝无声的半完成状态。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的LLM接口。

接下来该做什么?

在处理“下一步该做什么”阶段时,首先写下相关契约:所需的输入参数、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前明确成本信息,可避免在从演示环境过渡到共享环境时出现意外费用。 在耗时的步骤之后设置检查点。当操作员重新执行后续节点时,恢复流程不应再次收取相同的LLM调用费用。

操作检查清单

在制定操作检查清单阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。

需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及错误处理方式都是产品的一部分,而非后续需要补充的内容。

对于会花费资金或修改生产数据的操作,必须经过人工审批。编译时的逻辑连接并不等同于业务功能的完整性。

编写简短的操作手册:说明如何轮换密钥、如何清空队列、以及如何回滚上一次的数据导入操作。

应优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤出错时,故障应能指向具体的责任模块,而非复杂的流程链。

对于会花费资金或修改生产数据的操作,必须经过人工审批。编译时的逻辑连接并不等同于业务功能的完整性。

在升级技术栈之前,应先冻结版本,为关键流程记录标准操作记录,并确认好回滚步骤。共享环境需要设置速率限制、进行租户验证,同时明确密钥轮换的负责人。与其追求花哨的一次性演示,不如注重扎实的可靠性。

关于3031bd6e2b68的批量处理说明:不要将提供者密钥放入代码仓库,为每个会话设置令牌使用上限,并将转录内容存储在评估测试用例的旁边,以便后续更换模型时仍能保持可比性。

针对强化安全措施的第0阶段,在修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。配置信息应置于应用程序代码之外,环境文件、密钥存储及功能标志应集中存放于一个位置,以便操作人员无需查看整个系统结构即可进行审计。

强化安全措施细节0/810:针对此说明需统计运行时间、错误类型以及令牌消耗情况,然后依据固定的评估标准而非主观判断来决定是否保留该更改。

在处理强化措施的第一阶段时,首先写下相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障应能指向单一的责任模块,而非复杂的流程链。

强化措施细节 1/810:需测量该步骤的运行时间、错误类型以及代币消耗情况,然后依据固定的评估标准而非主观感受来决定是否保留该修改。

将强化措施的第二阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一份理想的运行示例、一个失败案例以及回滚说明。 在功能结果旁同时记录时间消耗及代币或查询成本。提前明确成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。

强化措施细节2/810:为该记录测量运行时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

对于强化措施的第3阶段,在修改代码之前需明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新执行该步骤,而无需猜测隐藏状态。同时需将正常流程与故障恢复流程一并记录下来。重试机制、人工审核环节以及错误处理方式都是产品本身的组成部分,而非后续需要补充的内容。

强化措施细节3/810:为该记录测量运行时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在处理强化措施的第4阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合约定。 将这一阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝默许的部分完成情况。

强化措施细节4/810:需测量该步骤的耗时、错误类型以及令牌消耗情况,然后依据固定的评估标准而非个人经验来决定是否保留该变更。

将强化措施的第5阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一份标准操作示例、一个失败案例以及回滚说明。 应将配置信息与应用程序代码分开。环境文件、密钥存储和功能开关应集中存放于一处,以便操作人员无需查看全部代码结构即可进行审计。

强化措施细节5/810:为该记录测量运行时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在强化措施的第6阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比复杂的脚本,更应采用小型且可测试的单元。当某一步骤失败时,故障原因应能指向单一责任方,而非混乱的整个流程。

强化措施细节6/810:为该记录测量运行时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在处理强化措施的第7阶段时,首先写下相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合初始要求。

在功能结果旁记录执行时间以及令牌或查询成本。提前了解这些成本信息,可避免在系统从演示环境过渡到共享环境时出现意外费用。

强化措施细节7/810:需测量该阶段的实际执行时间、错误类型以及令牌消耗情况,然后依据固定的评估标准而非个人经验来决定是否保留该修改。

将强化措施的第8阶段视为可量化的目标来处理效果最佳。在扩大范围之前,先记录一个理想运行案例、一个失败案例以及回滚说明。

应同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及错误处理方式都是产品本身的组成部分,而非后续需要补充的内容。

强化细节 8/810:为该记录测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在强化笔记的第9阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应将此阶段视为输入参数与经过验证的输出结果之间的契约,为相关成果命名、定义成功检测标准,并拒绝默许的半完成状态。

强化细节 9/810:为该记录测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在处理强化措施的第10阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。 应将配置信息与应用程序代码分开。环境文件、密钥存储以及功能开关应集中存放于一个位置,这样操作人员无需查看整个系统结构即可进行审计。

强化措施细节10/810:需测量该措施的执行时间、错误类型以及令牌消耗情况,然后依据固定的评估标准而非个人经验来决定是否保留该修改。

将强化措施的第11阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一份理想的运行日志、一个失败案例以及回滚说明。 相比复杂的脚本,更应采用小型且可测试的单元。当某个步骤出现故障时,故障原因应能明确指向某个具体的责任模块,而非整个混乱的流程。

强化措施细节 11/810:为该记录测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在强化措施的第12阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录运行时间以及代币或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。

强化措施细节 12/810:为该记录测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。