跳到主要内容

OpenSpec 项目开发工作流

如何结合 OpenSpec 和 AI 编程工具,完成一个完整的 FDE 项目。Spec-Driven Development 是 AI 生码时代的工程最佳实践。

OpenSpec: https://github.com/Fission-AI/OpenSpec


什么是 OpenSpec

OpenSpec 是一个 Spec-Driven Development(规范驱动开发) 框架,专为 AI 编程时代设计。

核心问题:AI 编程最大的挑战不是"生成能力",而是"上下文一致性"。

问题场景:
1. 你告诉 AI "部署一个 70B 模型推理服务"
2. AI 生成了一堆配置
3. 你审查后发现有些不符合你的要求
4. 你修改后,下次让 AI 改别的,AI 又忘了你的要求

根源:没有单一的、结构化的 Spec 作为信息源。

为什么需要 Spec

AI 编程的三个痛点

痛点描述Spec 的解法
Prompt 模糊"部署模型"太笼统,AI 不知道用 vLLM 还是 TRT-LLMSpec 明确技术选型和参数
上下文丢失AI 每次对话的上下文有限,长项目容易遗忘Spec 持久化,AI 随时读取
结果不一致同一条 prompt,不同时间生成不同代码Spec 提供确定性约束

Spec 的三个层级

层级做法适合
Spec-first先写完整 Spec,再让 AI 按 Spec 执行新项目、大型重构
Spec-anchored边编码边更新 Spec,Spec 作为参考迭代开发、bug 修复
Spec-as-sourceSpec 和代码自动同步,Spec 即文档成熟项目、长期维护

推荐起点:FDE 学习者从 Spec-first 开始,养成"先想清楚再动手"的习惯。


OpenSpec 核心概念

Single Source of Truth

Spec 是项目唯一的、权威的信息源。所有 AI 生成的代码都应该以 Spec 为依据。

specs/
├── api/
│ ├── inference-endpoint.md # 推理接口 Spec
│ └── health-check.md # 健康检查 Spec
├── architecture/
│ ├── deployment-topology.md # 部署拓扑
│ └── data-flow.md # 数据流
├── performance/
│ ├── latency-slo.md # 延迟 SLA
│ └── throughput-target.md # 吞吐目标
└── operations/
├── rollout-plan.md # 发布计划
└── rollback-procedure.md # 回滚流程

增量式 Spec

Spec 不是一次性写完的,而是渐进式补充

每次迭代只补充新的 Spec,不修改已有的。


完整项目工作流(7 步)

Step 1: 需求澄清

输入:业务需求("我们需要上线一个 70B 模型的推理服务")

产出:需求文档(需求方确认)

# 需求:70B 模型推理服务上线

## 背景
- 业务方需要调用 Qwen2.5-72B 模型进行文本生成
- 预计日均调用量 100 万次
- 峰值 QPS 50

## 约束
- 预算:每月 GPU 成本 < $5000
- 延迟:TTFT < 2s, TPOT < 100ms
- 可用性:99.9%

Step 2: Spec 编写

工具:Cursor 辅助编写(Cmd+K 生成框架)

# specs/inference-service.md

## 技术选型
- 推理引擎:vLLM(生态成熟、Continuous Batching)
- 模型:Qwen/Qwen2.5-72B-Instruct
- GPU:2 × A100 80GB(Tensor Parallel)
- 量化:INT8 KV Cache(减少显存)

## 接口定义
```text
POST /v1/chat/completions
Request: { model, messages, max_tokens, temperature }
Response: { id, choices: [{ message, finish_reason }], usage }

性能指标

  • TTFT: P50 < 500ms, P99 < 2s
  • TPOT: < 100ms/token
  • 最大 batch: 64
  • 最大上下文: 32K tokens

部署配置

  • 容器:Docker + vLLM 官方镜像
  • 编排:Kubernetes
  • 扩缩容:基于 QPS 的 HPA(5-20 副本)
  • 容灾:多可用区部署

### Step 3: Spec 评审

**参与方**:技术负责人 + FDE + 业务方

**评审要点**:
- Spec 是否覆盖了所有需求?
- 技术选型是否合理?
- 性能指标是否可达?
- 预算是否超支?

### Step 4: 架构设计

**工具**:Cursor 生成 Mermaid 图

```mermaid
flowchart LR
A["Client"] --> B["Load Balancer"]
B --> C["vLLM Pod 1\nA100:0"]
B --> D["vLLM Pod 2\nA100:1"]
B --> E["vLLM Pod N\nA100:N"]

C --> F["GPU 0\nTensor Parallel"]
D --> F
E --> F

F --> G["KV Cache\nRedis/Redis"]

C --> H["Metrics\nPrometheus"]
D --> H
E --> H
H --> I["Alert\nPagerDuty"]

style B fill:#f59e0b
style F fill:#42b883,color:#fff

Step 5: AI 生码

工具:Cursor Agent Mode + Claude Code

操作

> @specs/inference-service.md
> 根据这个 Spec,生成 vLLM 部署配置和 Dockerfile。

# AI 会读取 Spec,生成:
# - docker-compose.yml
# - Dockerfile
# - k8s/deployment.yaml
# - k8s/hpa.yaml
# - k8s/service.yaml
# - config/vllm-config.json

审查要点

  • 每个生成的文件是否符合 Spec?
  • 参数是否正确(GPU 数量、模型名、端口)?
  • 安全配置是否到位(TLS、认证)?

Step 6: 测试验证

Harness Engineering 约束

Benchmark 脚本(用 Claude Code 生成):

> 写一个 benchmark 脚本,测试:
> 1. TTFT: 发送 100 个请求,测量首 token 时间
> 2. TPOT: 测量每 token 生成时间
> 3. 在不同 prompt 长度下(100, 1000, 10000 tokens)
> 4. 输出 CSV 格式结果

Step 7: 部署上线

分阶段发布

Step 8: 运维迭代

Spec 同步更新

  • 线上发现问题 → 更新 Spec 中的性能指标
  • 新模型发布 → 更新 Spec 中的模型版本
  • 流量增长 → 更新 Spec 中的扩缩容策略

完整案例:从 0 到 1 的 OpenSpec 工作流

案例背景

你需要在 2 周内部署一个 Qwen2.5-7B 的推理服务,支持 100 QPS,预算 $500/月。

第 1-2 天:Spec 编写

用 Cursor 生成 Spec 框架,填充具体参数。

第 3-5 天:AI 生码

用 Claude Code 批量生成配置文件,Cursor 审查和微调。

第 6-7 天:本地测试

在单卡上验证功能正确性。

第 8-10 天:云上部署

在 GPU 云上部署,跑 benchmark。

第 11-14 天:优化迭代

根据 benchmark 结果调整参数(batch size、量化方案)。


与 Harness Engineering 的关系

OpenSpec 是 Harness Engineering 的 Constraint Layer(约束层):

Harness Engineering 六层:
┌─────────────────────────────────────────────┐
│ Context Layer ← Spec 提供上下文 │
│ Constraint Layer ← Spec 提供边界约束 │
│ Sensor Layer ← benchmark 提供传感器 │
│ Eval Layer ← 测试用例提供验证 │
│ Feedback Layer ← CI/CD 提供反馈 │
│ GC Layer ← Spec 更新提供维护 │
└─────────────────────────────────────────────┘

面试视角

问题:"你怎么管理一个 AI 辅助的开发项目?"

满分回答框架

1. Spec-first 方法论:
- 先写 Spec,再让 AI 执行
- Spec 是单一信息源,避免上下文丢失

2. Harness Engineering 保障:
- Constraint:Spec 定义边界
- Sensor:benchmark 监控性能
- Eval:自动化测试验证
- Feedback:CI/CD 快速反馈

3. 工具链:
- Spec 编写:Cursor
- AI 生码:Cursor + Claude Code
- 测试验证:自动化脚本
- 部署:K8s + HPA

4. 风险控制:
- 所有 AI 生成代码必须审查
- 灰度发布,Canary 验证
- 一键回滚

上一节:AI 编程工具对比 | 下一节:Karpathy 的 AI 生码观点