spec-kit 架构哲学与实践指南

spec-kit 架构哲学与实践指南

目标:深入但不晦涩地理解 spec-kit 的设计哲学、核心抽象与工程实践方式,并通过代码示例说明如何在真实项目中落地。


一、spec-kit 是什么?

spec-kit 本质上是一套 "以规范(Spec)为中心" 的工程方法论 + 工具集合

它解决的不是"怎么写代码",而是:

在引入大模型(LLM)参与研发后,如何让需求、约束、代码、评审、演进保持一致性与可控性。

可以把 spec-kit 理解为:

  • 不是框架(Framework)
  • 不是脚手架(Scaffold)
  • 而是 工程认知结构(Engineering Mental Model)

二、spec-kit 的核心架构哲学

1. Spec First,而不是 Code First

传统研发流程:

复制代码
需求文档 → 代码实现 → 测试 → 返工

spec-kit 的流程:

复制代码
Spec(可执行约束) → 生成 / 修改代码 → 验证 Spec

Spec 是唯一的真相来源(Single Source of Truth)

Spec 不只是说明性文档,而是:

  • 可以被 LLM 理解
  • 可以被工程流程引用
  • 可以作为代码生成与修改的边界

2. 把"隐性工程经验"显式化

在真实项目中,大量关键规则是:

  • 只存在于资深工程师脑中
  • 写在 PR 评论里
  • 或者靠"踩坑"传承

spec-kit 的目标:

把这些经验固化为 Spec

例如:

  • 禁止数据库迁移
  • CI/CD 需要人工确认
  • 生产配置不允许修改

这些都不应只是"口头约定"。


3. 约束优先,而不是能力优先

大模型的风险在于:

  • 能力很强
  • 边界模糊

spec-kit 的基本假设:

如果不先定义清楚不能做什么,模型一定会越界。

因此 spec-kit 强调:

  • 明确禁止项(Forbidden)
  • 明确需要人工确认项(Manual Approval)
  • 明确允许的变更范围(Allowed Scope)

4. Spec 是"可组合的模块"

Spec 并不是一大坨文档,而是:

  • 可拆分
  • 可复用
  • 可组合

典型的 Spec 结构:

复制代码
/spec
  ├── architecture.md
  ├── constraints.md
  ├── coding-style.md
  ├── security.md
  └── runtime.md

不同项目可以复用同一套 Spec 子集。


三、spec-kit 的核心组成

1. Constitution / Project Spec

这是 spec-kit 的"宪法层"。

特点:

  • 项目级别
  • 长期稳定
  • 极少频繁修改

示例(简化版):

markdown 复制代码
# Project Constitution

## Runtime
- Python 3.10
- Conda environment

## Forbidden
- 禁止数据库 schema 迁移
- 禁止修改生产配置

## Manual Approval Required
- 新增第三方依赖
- CI/CD 配置修改

2. Task Spec(任务级规范)

用于约束一次具体改动

示例:

markdown 复制代码
# Task Spec: 新增翻译接口

## Goal
- 增加 `/translate` HTTP API

## Constraints
- 不得修改现有接口签名
- 不得引入新依赖

## Acceptance Criteria
- 单测覆盖率 ≥ 80%
- P95 延迟 < 500ms

3. Code Style / Engineering Spec

用于统一代码风格与工程实践。

markdown 复制代码
## Python Code Style
- 必须使用 type hints
- 公共函数必须有 docstring
- 禁止在函数中直接 print

四、spec-kit 的工作流(工程视角)

标准工作流

复制代码
1. 编写 / 更新 Spec
2. 让 LLM 基于 Spec 生成或修改代码
3. 人类 Review 是否符合 Spec
4. 代码 & Spec 同步演进

关键点:

不允许只改代码不改 Spec


五、Spec 驱动代码的示例

示例 1:受 Spec 约束的函数实现

Spec:

markdown 复制代码
## Function: translate_text

Constraints:
- 不得进行网络重试
- 超时必须抛出异常

代码实现:

python 复制代码
from typing import Dict
import requests


def translate_text(text: str, target_lang: str) -> Dict[str, str]:
    """
    Translate text to target language.

    Raises:
        TimeoutError: if request times out
    """
    try:
        resp = requests.post(
            "http://translator/api",
            json={"text": text, "lang": target_lang},
            timeout=2.0,
        )
        resp.raise_for_status()
        return resp.json()
    except requests.Timeout:
        # Spec 明确要求抛异常,而不是重试
        raise TimeoutError("Translation request timed out")

示例 2:Spec 约束依赖管理

Spec:

markdown 复制代码
## Dependencies
- 禁止自动新增依赖
- 新依赖必须人工确认

工程实践:

text 复制代码
# requirements.txt
# ⚠️ 修改前必须人工确认
requests==2.32.3

LLM 即使"知道"更好的库,也不能越过 Spec。


六、spec-kit 与传统工程方式的本质差异

维度 传统工程 spec-kit
规范位置 文档/口头 工程核心
约束 事后 Review 事前定义
LLM 使用 写代码 遵守规范的协作者
风险控制 Spec + 人

七、什么时候 不适合 用 spec-kit

spec-kit 并非银弹。

不适合场景:

  • 一次性脚本
  • 强探索性原型(Spec 尚不稳定)
  • 极小团队、极短生命周期项目

适合场景:

  • 中大型工程
  • 多人协作
  • 高风险(生产 / 安全 / 成本)项目

八、一句话总结

spec-kit 的本质不是"让 AI 更聪明",而是"让工程边界更清晰"。

当 Spec 足够清晰:

  • 人和模型都不容易犯错
  • 工程可以稳定演进
  • 复杂度被锁在"规则层",而不是"人脑里"

如果你愿意,下一步我可以帮你:

  • 把你当前项目的约束整理成一套完整 spec-kit
  • 给出一份「适配 Claude / GPT 的 spec 模板」
  • 或结合你现有的 Python / LLM 项目做实战拆解
相关推荐
消失的旧时光-19434 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
L543414465 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
子春一5 小时前
Flutter for OpenHarmony:色彩捕手:基于 CIELAB 色差模型与人眼感知的高保真色彩匹配游戏架构解析
flutter·游戏·架构
冻感糕人~6 小时前
收藏备用|小白&程序员必看!AI Agent入门详解(附工业落地实操关联)
大数据·人工智能·架构·大模型·agent·ai大模型·大模型学习
ai_xiaogui6 小时前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发
X54先生(人文科技)7 小时前
《元创力》开源项目库已经创建
人工智能·架构·开源软件
无心水7 小时前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
一个骇客7 小时前
当数据开始“连线”:图模型与现代开发的新连接
架构
国科安芯8 小时前
抗辐照MCU在精密时频系统中的单粒子效应评估与可靠性验证
单片机·嵌入式硬件·架构·制造·安全性测试
桂花很香,旭很美8 小时前
智能体端云协同架构指南:通信设计、多智能体编排与落地
人工智能·架构