OpenSpec与Superpowers:AI编码的规格驱动开发(SDD)实战指南
1. 项目概述:当OpenSpec遇上Superpowers,AI编码的“最后一公里”被打通了
如果你和我一样,在过去一年里深度折腾过各种AI编程助手,那你肯定经历过这种“精神分裂”的时刻:一边是AI生成的代码片段看起来逻辑清晰、功能完整,另一边是当你试图把这些片段整合进一个真实项目,或者想让它按照你脑海里的架构图去生成整个模块时,那种沟通的无力感和反复修改的挫败感。我们好像拥有了一个无所不知的“代码字典”,却缺少一个能理解我们“施工蓝图”的“总工程师”。
这正是“OpenSpec + Superpowers”这个组合试图解决的问题,也是为什么它一出现,就在我们这个小圈子里引起了不小的震动。简单来说,OpenSpec负责把模糊的自然语言需求,变成一份结构清晰、机器可读的“技术规格说明书”;而Superpowers则是一个能理解这份说明书,并驱动AI(比如GPT-4、Claude等)去精准生成、甚至直接执行代码的“智能工头”。当它们俩“焊死”在一起,一个从“想法”到“可运行代码”的闭环工作流就形成了,我称之为SDD(Specification-Driven Development,规格驱动开发)。
这不仅仅是另一个“AI写代码”的工具。它解决的是AI编码工作流中“指令模糊-生成随机-调试困难”的核心痛点。以前,你给AI的提示(Prompt)可能是一段话:“帮我写个用户登录的API,用Flask,要JWT鉴权。” AI可能会给你一个基本可用的函数,但它不会考虑你的项目结构(代码该放在/api/auth.py还是/routes/user.py?),不会自动生成对应的数据模型(User表结构是什么?),更不会帮你把路由注册到主App里。你需要反复沟通、复制粘贴、调整路径,整个过程是割裂的。
而OpenSpec+Superpowers的工作流,让你可以这样操作:先用OpenSpec定义一个名为UserAuthentication的规格,里面详细描述了端点路径、请求响应格式、错误码、甚至安全要求。然后,把这个规格文件(一个结构化的JSON或YAML)丢给Superpowers。Superpowers会解析这份规格,将其转化为一系列精确的、上下文丰富的提示词,调用你配置的AI模型,生成所有相关文件(视图、模型、路由、测试桩),并按照你预设的项目模板放置到正确的位置。整个过程,AI是在一个明确的“框架”和“上下文”中工作,生成结果的确定性、完整性和项目契合度大幅提升。
这个工作流特别适合谁呢?一是像我这样的全栈开发者或技术负责人,需要快速搭建新项目的核心骨架或标准化模块;二是追求开发流程规范化的团队,希望将最佳实践(如清晰的API契约、统一的错误处理)固化到工具链中;三是任何厌倦了在IDE和聊天窗口之间反复横跳,渴望一个更流畅、更“自洽”的AI编码体验的人。
2. 核心思路拆解:从SDD理念到工具链落地
要理解OpenSpec+Superpowers的价值,得先跳出“工具”本身,看看它背后试图实现的开发范式——SDD。这有点像我们熟悉的TDD(测试驱动开发),但驱动开发的不是测试用例,而是机器可读的规格说明书。
2.1 SDD:规格驱动开发,为AI而生的新范式
TDD的核心循环是“红-绿-重构”:先写一个失败的测试(红),再写最少代码让测试通过(绿),最后优化代码结构(重构)。这个循环保证了代码的正确性,但前提是你已经很清楚“要做什么”。
SDD的循环则是“定义-生成-验证”:先用人机皆宜的格式(OpenSpec)精确定义模块或接口的规格(定义),然后由工具(Superpowers)驱动AI生成符合规格的实现代码(生成),最后人工或通过自动化测试验证生成结果是否符合预期(验证)。这个循环保证的是实现的完整性与架构的一致性。
为什么SDD现在变得重要?因为AI大模型在代码生成上已经很强,但它缺乏“项目级”的上下文和“架构级”的约束。你让它生成一个登录函数,它可能写得很好,但这个函数应该放在项目的哪个层级?它依赖哪些现有的工具函数或配置?它需要遵循团队的什么编码规范?这些信息,很难通过一段聊天提示词完整、无歧义地传递。而一份结构化的OpenSpec文件,可以承载所有这些信息,成为AI理解你项目需求的“唯一真相源”。
2.2 OpenSpec:不止是API描述,更是项目蓝图
很多人第一次听说OpenSpec,会以为它是另一个OpenAPI/Swagger。确实,在描述REST API方面,它们有相似之处。但OpenSpec的野心更大。它试图成为一个通用的软件组件规格描述语言。
一个典型的OpenSpec文件(例如user_auth.open-spec.yaml)可能包含以下层次:
- 元信息(Meta): 组件名称、版本、描述、所属业务域。
- 接口规格(Interfaces): 对于API组件,这里定义端点、方法、请求/响应体结构。对于一个库函数组件,这里可能定义函数签名、输入输出类型、异常。
- 数据模型(Data Models): 定义接口中用到的所有数据结构(如
User,LoginRequest,AuthToken)。这确保了生成代码时,相关的DTO(数据传输对象)或ORM模型能一并创建。 - 依赖关系(Dependencies): 声明此组件依赖的其他内部模块、外部服务或第三方库。这指导Superpowers在生成代码时正确添加
import语句或依赖配置。 - 配置与约定(Configuration & Conventions): 指定代码风格(如PEP 8, Airbnb规范)、项目根目录、目标框架(Flask, Django, Spring Boot)、测试框架要求等。
- 实现提示(Implementation Hints): 这是给AI的“特别说明”,可以指定用某个特定算法、避免使用某个已被弃用的库、或者强调性能要求。
通过这样一份文件,你不仅告诉了AI“做什么”,还告诉了它“在哪做”、“按什么标准做”、“和谁一起做”。这极大地压缩了AI自由发挥可能导致偏离预期的地方。
2.3 Superpowers:连接规格与AI的智能编排引擎
如果说OpenSpec是蓝图,那么Superpowers就是拿着蓝图去调度各个工种(AI模型)的包工头。它本身通常不是一个AI模型,而是一个工作流编排工具。
它的核心工作流程如下:
- 解析(Parse): 读取并验证OpenSpec文件,理解其中的所有约束和要求。
- 规划(Plan): 根据规格内容,拆解出需要生成的任务列表。例如:生成
User模型类、生成auth_controller.py、生成user_routes.py、生成对应的单元测试文件、更新requirements.txt。 - 编排(Orchestrate): 为每个任务构造高度优化的提示词(Prompt)。这个提示词会包含:任务描述、相关的规格片段、项目上下文(通过读取项目现有文件)、以及编码规范。然后,它调用配置好的AI模型(如GPT-4 Turbo, Claude 3)来执行这个任务。
- 执行与整合(Execute & Integrate): 将AI返回的代码写入到项目目录的指定位置。更高级的版本可能还会执行生成的代码(如果安全),或运行基础的语法检查。
- 反馈循环(Feedback Loop): 生成完成后,它可以提供一个报告,指出哪些部分完全由AI生成,哪些部分需要人工复核(比如涉及复杂业务逻辑的部分)。
Superpowers的强大之处在于它的“上下文管理”能力。它知道整个项目的结构,因此在为“生成登录API”这个任务构造提示时,它能自动附上项目中已有的config.py(数据库配置)、utils/security.py(加密函数)等内容,让AI生成的代码能无缝引用现有资源,而不是凭空创造。
2.4 工具链选型背后的逻辑
为什么是OpenSpec和Superpowers,而不是其他组合?这里有一些实际的考量:
- 开放性:OpenSpec是开源规范,不绑定特定厂商。你定义的规格文件是持久的资产,不担心工具链切换后无法使用。
- 专注性:Superpowers专注于“驱动AI生成代码”这一件事,而不是一个大而全的IDE插件。这种专注让它在这个垂直领域可以做得更深,比如在提示词工程、上下文压缩、任务拆解上的优化更极致。
- 可组合性:它们都是“胶水层”工具。OpenSpec文件可以被版本管理(Git),Superpowers工作流可以集成到CI/CD管道中。你可以用自己最熟悉的AI模型后端(OpenAI, Anthropic, 本地部署的模型),也可以将生成环节替换成其他工具。
- 解决真问题:这个组合直指当前AI辅助编程的核心矛盾——生成单段代码的“局部最优”与项目整体架构的“全局协调”之间的矛盾。它试图用标准化的输入(规格)和智能化的流程(编排)来弥合这个gap。
注意:这套工作流目前更适合绿地项目(从零开始)或为棕地项目(已有项目)添加结构清晰的新模块。对于杂乱无章、技术债沉重的老项目,直接应用可能效果不佳,需要先进行一定的模块化梳理。
3. 环境搭建与核心配置实战
理论说得再多,不如动手搭一个看看。下面我将以一个最常见的场景——为一个Python Flask后端项目快速生成用户认证模块——来演示如何配置和使用这套工具链。我的操作系统是macOS,但Linux和WSL下的步骤基本一致。
3.1 基础环境准备
首先,确保你的机器上有Python 3.8+和Node.js 16+(Superpowers的某些版本或插件可能需要)。然后创建一个干净的虚拟环境是个好习惯。
# 创建项目目录并进入 mkdir flask-auth-sdd && cd flask-auth-sdd python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 安装Flask等基础依赖(Superpowers生成代码时会参考这个环境) pip install flask flask-sqlalchemy flask-jwt-extended python-dotenv3.2 OpenSpec规格定义实战
接下来,我们创建OpenSpec文件。这里我使用YAML格式,因为它更易读。在项目根目录创建specs/user_auth.open-spec.yaml。
# specs/user_auth.open-spec.yaml open-spec: "1.0.0" info: title: "User Authentication Module" version: "1.0.0" description: "Handles user registration, login, and JWT token management for the Flask backend." domain: "iam" project: root_dir: "." language: "python" framework: "flask" code_style: "pep8" test_framework: "pytest" components: - name: "UserModel" type: "data_model" description: "Core user entity for the system." properties: - name: "id" type: "integer" required: true primary_key: true - name: "username" type: "string" required: true unique: true max_length: 80 - name: "email" type: "string" required: true unique: true format: "email" - name: "password_hash" type: "string" required: true description: "BCrypt hashed password" - name: "created_at" type: "datetime" default: "CURRENT_TIMESTAMP" - name: "AuthAPI" type: "rest_api" base_path: "/api/auth" endpoints: - path: "/register" method: "POST" operationId: "registerUser" description: "Register a new user." request: content_type: "application/json" body: $ref: "#/components/schemas/RegisterRequest" responses: "201": description: "User created successfully." body: $ref: "#/components/schemas/UserResponse" "400": description: "Invalid input or user already exists." - path: "/login" method: "POST" operationId: "loginUser" description: "Authenticate a user and return JWT tokens." request: content_type: "application/json" body: $ref: "#/components/schemas/LoginRequest" responses: "200": description: "Login successful." body: $ref: "#/components/schemas/AuthTokenResponse" "401": description: "Invalid credentials." schemas: RegisterRequest: type: "object" properties: username: type: "string" min_length: 3 max_length: 80 email: type: "string" format: "email" password: type: "string" min_length: 6 required: ["username", "email", "password"] LoginRequest: type: "object" properties: email: type: "string" format: "email" password: type: "string" required: ["email", "password"] UserResponse: type: "object" properties: id: type: "integer" username: type: "string" email: type: "string" created_at: type: "string" format: "date-time" AuthTokenResponse: type: "object" properties: access_token: type: "string" refresh_token: type: "string" token_type: type: "string" default: "bearer" dependencies: internal: - "utils.security" # 假设我们有一个用于密码哈希的公共模块 external: - "flask-jwt-extended>=4.5.0" implementation_hints: - "Use Flask-SQLAlchemy for ORM." - "Use `flask_jwt_extended` for JWT creation and verification." - "Password must be hashed using bcrypt before storing. Assume a `hash_password` function exists in `utils.security`." - "Place generated model in `models/user.py`." - "Place generated API views in `blueprints/auth.py`." - "Register the blueprint in the main app factory."这份规格书已经相当详细。它定义了数据模型、两个API端点、所有的请求/响应数据结构、依赖关系,甚至给出了文件存放位置的提示。这就是给AI的“施工图”。
3.3 Superpowers安装与AI后端配置
Superpowers通常是一个Node.js CLI工具或一个本地服务。这里我们以假设它提供一个CLI工具sp为例进行说明。安装方式可能因版本而异,请参考其官方文档。
# 假设通过npm全局安装 npm install -g @superpowers/cli # 初始化Superpowers配置 sp init这会在当前目录生成一个.superpowers配置文件。我们需要配置最关键的部分——AI后端。编辑.superpowers/config.json:
{ "aiProvider": "openai", "openai": { "apiKey": "你的OpenAI API Key", "model": "gpt-4-turbo-preview", "baseURL": "https://api.openai.com/v1" // 如果你用第三方代理,可修改此处 }, "specParser": "openspec", "projectRoot": ".", "codegen": { "defaultOutputDir": "./generated", "overwriteStrategy": "backup" // 如果文件存在,先备份 }, "context": { "maxFilesToRead": 10, // 为构造提示词,最多读取10个相关项目文件作为上下文 "ignorePatterns": ["venv", ".git", "*.pyc"] } }关键配置解析:
aiProvider: 支持openai,anthropic,ollama(本地模型) 等。这里用OpenAI。model: 强烈建议使用最新、上下文窗口最大的模型,如gpt-4-turbo。代码生成任务对上下文长度和理解能力要求高。codegen.defaultOutputDir: 生成的代码默认放在这里。但我们在OpenSpec的implementation_hints里指定了具体路径,Superpowers会优先遵从那个提示。context.maxFilesToRead: 这是Superpowers的“智能”所在。它会扫描项目,寻找可能与当前任务相关的文件(如requirements.txt,app/__init__.py,config.py),并将其内容作为上下文喂给AI,确保生成的代码能融入现有项目。
3.4 运行第一次生成
配置好后,运行生成命令:
sp generate ./specs/user_auth.open-spec.yamlSuperpowers会开始它的工作流:
- 解析YAML文件。
- 根据
components和implementation_hints规划任务:创建模型、创建蓝图、可能还有创建测试文件、更新依赖。 - 对于每个任务,它读取项目中的相关文件(比如现有的
models/__init__.py,blueprints/__init__.py),构造一个包含项目上下文的详细提示词。 - 调用GPT-4,获取生成的代码。
- 将代码写入指定路径:
models/user.py,blueprints/auth.py。
让我们看看它可能生成的blueprints/auth.py的一部分:
# blueprints/auth.py - AI生成示例 from flask import Blueprint, request, jsonify from flask_jwt_extended import create_access_token, create_refresh_token from ..models.user import User from .. import db from ..utils.security import hash_password, verify_password # 它从上下文中知道有这个模块 auth_bp = Blueprint('auth', __name__, url_prefix='/api/auth') @auth_bp.route('/register', methods=['POST']) def register(): data = request.get_json() # 验证逻辑 (AI可能会根据规格中的约束生成简单的验证) if not data or not all(k in data for k in ['username', 'email', 'password']): return jsonify({'error': 'Missing required fields'}), 400 if User.query.filter_by(email=data['email']).first(): return jsonify({'error': 'User already exists'}), 400 hashed_pw = hash_password(data['password']) new_user = User(username=data['username'], email=data['email'], password_hash=hashed_pw) db.session.add(new_user) db.session.commit() return jsonify({ 'id': new_user.id, 'username': new_user.username, 'email': new_user.email, 'created_at': new_user.created_at.isoformat() }), 201 @auth_bp.route('/login', methods=['POST']) def login(): # ... 类似的登录逻辑 pass你会发现,生成的代码不仅功能正确,而且直接引用了项目中假设存在的utils.security模块,并遵循了Flask蓝图的结构。这就是上下文感知生成的力量。
4. 高级技巧与深度集成方案
基础生成只是第一步。要让OpenSpec+Superpowers真正融入你的日常开发,成为生产力倍增器,还需要一些进阶玩法和集成策略。
4.1 编写可复用的规格模板与片段
你不会想为每个模块都从头手写一个完整的OpenSpec文件。我们可以创建模板和可复用的片段。
创建片段库:在团队共享目录中,建立
spec-snippets/。common-schemas.yaml: 定义通用的PaginationRequest,StandardResponse,ErrorResponse等。crud-operations.yaml: 定义标准的Create, Read, Update, Delete端点模板。auth-requirements.yaml: 定义常见的认证、授权相关规格提示。
使用引用和组合:在你的主规格文件中,可以使用
$ref来引用这些片段。# 在主规格文件中 schemas: StandardResponse: $ref: "./spec-snippets/common-schemas.yaml#/StandardResponse"这样,团队可以积累一套符合自身技术栈和业务领域的规格“积木”,新项目搭建速度极快。
4.2 定制Superpowers的提示词模板
Superpowers的默认提示词可能不适合所有团队或项目。你可以定制它的提示词模板。在.superpowers目录下创建prompt-templates/。
例如,创建一个针对Python Flask的专用模板flask-controller.j2(Jinja2格式):
你是一个资深的Python Flask后端开发专家。请根据以下OpenSpec规格和项目上下文,生成高质量、可生产使用的代码。 **项目信息**: - 项目根目录:{{ project_root }} - 主要框架:Flask - ORM:SQLAlchemy - 代码风格:PEP 8,使用类型注解(Type Hints) **当前任务**:生成组件 `{{ component.name }}` 的实现代码。 **组件类型**:{{ component.type }} **组件描述**:{{ component.description }} **完整的OpenSpec规格摘要**: {{ spec_summary }} **相关的项目上下文(来自现有文件)**: {% for file, snippet in context_snippets.items() %} === 文件: {{ file }} === {{ snippet }} {% endfor %} **你的要求**: 1. 生成的代码必须**严格遵循**上述OpenSpec规格中的所有定义(路径、方法、请求/响应体、数据模型)。 2. 生成的代码必须能够与上述“项目上下文”中提供的现有代码无缝集成。请正确使用已有的导入、配置和工具函数。 3. 遵循Flask最佳实践:使用蓝图组织路由,错误处理统一,返回合适的HTTP状态码。 4. 为关键逻辑添加简要的注释。 5. 输出**完整**的代码文件内容,不要只写片段。 请开始生成代码:然后在Superpowers配置中指定使用这个模板:
{ "promptTemplates": { "rest_api": "./.superpowers/prompt-templates/flask-controller.j2", "data_model": "./.superpowers/prompt-templates/sqlalchemy-model.j2" } }通过定制提示词,你可以将团队的编码规范、安全要求(如SQL注入防护)、日志格式等“硬性”要求植入生成过程,让AI输出的代码更符合你们的内部标准。
4.3 与现有开发流程集成:Git与CI/CD
将SDD工作流集成到团队流程中,才能发挥最大价值。
Git工作流:将OpenSpec文件(
*.open-spec.yaml)视为与源代码同等重要的设计文档,一同提交到Git仓库。可以建立规则:新增功能模块前,先提交OpenSpec文件进行评审(规格评审),通过后再由Superpowers生成代码骨架,然后进行具体实现。这相当于把“设计文档”机器可执行化了。CI/CD集成:在持续集成流水线中增加一个“规格验证与同步”步骤。
- 验证阶段:在PR中,CI可以运行一个脚本,检查所有修改或新增的OpenSpec文件语法是否正确,是否与已有的规格冲突。
- 同步阶段(可选但强大):可以配置一个“规格守护”Job。当
main分支合并了新的或修改过的OpenSpec文件后,自动触发Superpowers,重新生成或更新对应的代码文件,并创建一个新的PR。这确保了代码实现始终与最新的设计规格同步,是“规格即代码”理念的终极体现。但此操作需谨慎,应有严格的Review机制,避免自动生成破坏现有逻辑。
4.4 处理复杂业务逻辑与迭代开发
OpenSpec+Superpowers擅长生成结构化的、模式固定的代码(如CRUD、标准API、数据模型)。但对于充满复杂条件判断、独特业务规则的“业务核心逻辑”,完全依赖AI生成可能风险较高。
我的策略是“骨架生成,血肉自填”:
- 用OpenSpec定义好接口契约和数据流(输入、输出、错误情况)。
- 用Superpowers生成完整的函数/方法框架,包括正确的参数、返回值类型、基本的验证和数据库会话管理。
- 在生成的方法体内,AI可能会留下一个
# TODO: Implement core business logic的注释。这时,开发者再聚焦于填充这部分最体现业务价值的、复杂的逻辑代码。
这种分工非常高效:AI解决了所有繁琐的、模板化的“脚手架”代码,而开发者将宝贵的时间集中在真正需要人类智慧和业务理解的复杂逻辑上。在迭代时,如果接口规格(OpenSpec)变了,重新运行生成,骨架代码会自动更新,开发者只需关注核心逻辑是否需要相应调整。
5. 常见问题、排查与效能评估
在实际使用中,你肯定会遇到一些问题。下面是我踩过的一些坑和解决方案。
5.1 生成代码质量问题与调优
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 生成的代码无法直接运行,缺少导入或引用错误。 | 1. Superpowers读取的项目上下文不足。 2. OpenSpec中 dependencies或implementation_hints描述不准确。 | 1. 检查并增大config.json中的maxFilesToRead,确保关键文件(如__init__.py,config.py)被包含。2. 在OpenSpec中显式、精确地声明依赖。在 implementation_hints中写明“请从from app.core.database import db导入数据库会话”。 |
| 代码风格与项目现有风格不符(如单双引号混用、注释风格不同)。 | AI模型在训练数据中学到了多种风格,提示词约束不够强。 | 定制提示词模板。在模板开头就强约束:“本项目使用双引号定义字符串,使用Google风格的docstring”。将团队的编码规范文档片段直接放入提示词。 |
| 生成了过于简单或“幼稚”的实现(如密码明文存储)。 | 提示词中缺乏安全性和最佳实践的强调。 | 在OpenSpec的implementation_hints或全局提示词模板中,加入强制性要求。例如:“密码必须使用bcrypt加盐哈希存储,绝对禁止明文。”,“所有数据库查询必须使用参数化查询或ORM方法,防止SQL注入。” |
| AI“臆造”了不存在的函数或模块。 | 项目上下文提供不全,AI基于常见模式进行了“脑补”。 | 确保你希望AI使用的公共模块(如utils/security.py)确实存在,并且其函数签名在上下文中是清晰的。可以先手动创建这些基础工具模块的骨架。 |
调优心得:把Superpowers的生成看作一个“函数”,输入是(规格 + 项目上下文 + 提示词模板),输出是代码。想要高质量输出,就必须优化这三个输入。项目上下文是最容易被忽视但极其重要的一环。一个包含了清晰接口和典型用法的__init__.py或example.py文件,能极大提升生成代码的集成度。
5.2 性能与成本考量
使用GPT-4这类高级模型进行代码生成,成本和延迟是需要考虑的。
- 成本:生成一个中等复杂度的模块(如包含3个端点的认证模块),大约会消耗10k-20k tokens(包含输入的规格、上下文和输出的代码)。按GPT-4 Turbo的定价,成本在几美分左右。对于日常开发可以接受,但需注意批量生成或频繁迭代时的累积成本。
- 延迟:GPT-4的响应时间在几秒到十几秒,生成一个完整模块可能需要半分钟。这比手动敲代码快,但会有等待感。建议用于生成相对完整、独立的模块,而不是边写边问的零碎片段。
- 优化策略:
- 使用本地模型:如果对生成速度要求高或成本敏感,可以配置Superpowers使用本地部署的代码专用模型(如CodeLlama系列、DeepSeek-Coder)。虽然生成质量可能略逊于GPT-4,但对于模式固定的代码,效果不错。
- 缓存提示词:对于稳定的规格模板,可以预计算并缓存构造好的提示词,避免每次重新读取和解析文件。
- 批量生成:规划好一个功能模块的所有规格,一次性提交生成,比零敲碎打更高效。
5.3 何时该用,何时不该用?
经过几个月的实践,我对这套工作流的适用边界有了更清晰的认识。
强烈推荐使用的场景:
- 新项目启动:快速搭建符合架构规范的项目骨架、基础用户系统、管理后台CRUD接口。
- 标准化微服务:在微服务架构中,需要快速创建大量符合统一契约的API服务。
- 生成样板代码:数据模型、DTO、表单验证类、基本的单元测试文件——这些重复性高、模式固定的代码。
- 接口契约先行:团队协作时,先用OpenSpec定义清晰的接口,各方并行开发,后端用Superpowers生成实现骨架,前端用OpenSpec生成Mock数据或类型定义。
需要谨慎使用或不适用的场景:
- 极其复杂的业务算法:如金融风控引擎、推荐系统核心算法。这些逻辑的生成需要极其详细的领域知识输入,目前AI难以胜任,更适合人类专家编写。
- 遗留系统改造:如果老代码结构混乱、依赖模糊,缺乏清晰的模块边界,AI很难理解其上下文,生成代码的集成风险很高。
- 对性能有极端要求的模块:如高频交易的核心路径、底层驱动程序。AI生成的代码在性能优化上可能不够极致,需要人工深度调优。
- 完全无经验的开发者:如果开发者对所用框架(如Flask)本身不熟悉,那么他将无法有效评估和修改AI生成的代码,也无法编写出高质量的OpenSpec规格。这更像是一个“力量倍增器”,而非“傻瓜式”工具。
5.4 我的核心体会:它改变了什么?
最后,抛开技术细节,谈谈这套工作流给我个人和团队带来的最深层的改变。
第一,它迫使我们在编码前进行更严谨的“设计思考”。以前写一个API,可能打开编辑器就开始敲@app.route。现在,你得先打开一个YAML文件,思考:这个端点路径合理吗?请求体字段是否完备?响应应该包含什么?错误情况有哪些?这个过程本身就是一个极好的设计评审,减少了后续返工。
第二,它实现了“文档即代码,代码即文档”的良性循环。OpenSpec文件是活的、可执行的文档。当API变更时,你首先修改的是这份规格文件,然后重新生成代码。这样,你的代码实现和接口文档(OpenSpec)永远保持同步,彻底告别了文档过时的问题。
第三,它把开发者从“脚手架劳工”解放为“架构师和逻辑工匠”。我再也不用花半天时间去搭一个标准的用户系统,设置JWT、写密码哈希、配置路由。我可以把时间花在思考更复杂的业务状态机、设计更优雅的缓存策略、或者优化核心查询上。AI负责“搬砖”,我负责“设计图纸”和“雕琢核心部件”。
当然,它并非银弹。你需要投入时间学习OpenSpec的语法,配置和调优Superpowers,并建立与之匹配的团队流程。但一旦跑通,你会发现,你和AI的协作进入了一个新的阶段:从随机的、模糊的、单次的问答,变成了结构化的、精确的、可重复的工程化流水线。这种“自洽”的感觉,正是效率和质量提升的开始。
