Files
gh-dwsy-ai-runtime/commands/runtime.plan.md
2025-11-29 18:24:32 +08:00

955 lines
24 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: "需求规划拆解:将复杂需求转化为结构化任务树,生成执行计划"
---
# /runtime.plan - 需求规划与任务拆解
## 核心目标
**我们不是执行者,我们是规划者**
当面对复杂需求时,我们像经验丰富的架构师一样:
1. **理解需求本质** - 用户真正想要的是什么?
2. **功能分解** - 将大问题拆解为小任务
3. **识别依赖** - 哪些必须先做,哪些可以并行?
4. **估算工时** - 需要多少时间?风险在哪里?
5. **生成执行路径** - 最优的实施顺序
```
用户需求 → 需求分析 → 功能拆解 → 依赖识别 → 任务树 → 执行计划
/runtime.iterate
```
---
## 何时使用 /runtime.plan
### 必须使用场景
-**用户需求模糊**"我想加个电商功能" → 需要拆解为具体任务
-**技术方案不确定**:需要分析多种实现路径
-**项目范围大**:功能复杂,需要系统性规划
-**团队协作**:需要清晰的任务分配和依赖关系
-**估算和排期**:需要工作量估算和时间线
### 使用流程
```bash
用户: "实现用户认证系统注册、登录、密码重置、JWT"
AI:
/runtime.plan "用户认证系统"
↓ 自动执行...
[阶段1: 需求分析]
- 识别需求类型: 新功能开发
- 提取约束: JWT有效期7天、并发1000
- 分析技术栈: Express + PostgreSQL
- 识别范围: API、DB、安全、邮件
[阶段2: 功能拆解]
- 功能点: 注册、登录、密码重置、JWT管理、登出
- 任务数: 17个任务
- 分层: 基础设施 → 服务层 → API → 安全 → 测试
[阶段3: 依赖分析]
- 构建依赖图
- 计算关键路径
- 识别可并行任务
[阶段4: 估算与风险]
- 总工时: 17.75小时
- 关键路径: 9小时
- 风险: 密码重置流程复杂
[输出: 交付给用户]
- 可视化任务树 (ASCII/MD格式)
- JSON格式的机器可读计划
- 甘特图时间线
- 风险评估报告
# 然后进入迭代执行
/runtime.iterate --plan=plan-2025xx.json
↓ 自动执行...
```
---
## 规划过程详解
### 阶段1: 需求分析 (Understanding)
#### 1.1 需求类型识别
```python
def identify_requirement_type(text: str) -> RequirementType:
"""识别需求类型"""
if any(word in text for word in ["添加", "实现", "开发", "新功能"]):
return RequirementType.NEW_FEATURE
if any(word in text for word in ["修复", "bug", "错误", "问题"]):
return RequirementType.BUG_FIX
if any(word in text for word in ["重构", "优化", "改进", "清理"]):
return RequirementType.REFACTORING
if any(word in text for word in ["学习", "理解", "调研", "研究"]):
return RequirementType.RESEARCH
return RequirementType.UNKNOWN
```
#### 1.2 约束提取
从需求中提取隐含约束:
```python
def extract_constraints(demand: str) -> Constraints:
"""提取约束条件"""
constraints = {
"time": None, # 时间约束
"budget": None, # 资源约束
"tech_stack": [], # 技术栈约束
"performance": {}, # 性能约束
"security": {}, # 安全约束
}
# 性能约束
if "并发" in demand:
# "支持并发1000用户"
match = re.search(r"并发(\d+)", demand)
if match:
constraints["performance"]["concurrency"] = int(match.group(1))
# 时间约束
if "JWT" in demand and "" in demand:
# "JWT有效期7天"
match = re.search(r"有效期(\d+)天", demand)
if match:
constraints["security"]["tokenExpiry"] = int(match.group(1))
# 安全约束
if "加密" in demand:
constraints["security"]["encryption"] = True
return constraints
```
#### 1.3 知识缺口识别
```python
def identify_knowledge_gaps(demand: str, context: Memory) -> List[str]:
"""
识别规划需要但当前缺乏的知识
"""
gaps = []
# 检查技术栈
if "JWT" in demand and not context.has_pattern("jwt"):
gaps.append("JWT实现模式")
if "密码" in demand and not context.has_pattern("bcrypt"):
gaps.append("密码哈希模式")
# 检查架构
if "认证" in demand and not context.has_pattern("auth"):
gaps.append("认证架构模式")
# 检查项目上下文
if not context.has_key("tech_stack"):
gaps.append("项目技术栈")
return gaps
```
---
### 阶段2: 功能分解 (Decomposition)
#### 2.1 洋葱模型分解法
```
[用户可见功能]
╔═════════════════════╗
║ API层 (REST/GraphQL) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 服务层 (业务逻辑) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 数据层 (DB/Cache) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 基础设施 (安全/监控) ║
╚═════════════════════╝
```
**分解规则**:
- 每一层都可以独立分解
- 上层依赖下层
- 同层任务尽量解耦
#### 2.2 认证系统分解示例
```python
# 顶层: 用户故事
stories = [
"作为新用户,我可以注册账号",
"作为用户,我可以登录系统",
"作为忘记密码的用户,我可以重置密码",
"作为登录用户,我可以安全退出"
]
# 第二层: 功能点
features = {
"注册": {
"输入": ["email", "password"],
"验证": ["邮箱格式", "密码强度", "邮箱唯一性"],
"副作用": ["密码哈希", "生成验证Token", "发送邮件"]
},
"登录": {
"输入": ["email", "password"],
"验证": ["账号存在", "密码匹配", "账号已验证"],
"输出": ["JWT Token", "Refresh Token"]
}
}
# 第三层: 技术任务
tasks = {
"注册": [
"创建User表",
"实现密码bcrypt哈希",
"实现邮箱验证逻辑",
"实现Register API",
"集成邮件服务",
"写单元测试"
]
}
```
#### 2.3 MECE原则Mutually Exclusive, Collectively Exhaustive
```markdown
# 好的分解符合MECE
✅ 认证系统
├─ 注册(独立功能)
├─ 登录(独立功能)
├─ 密码重置(独立功能)
└─ Token管理独立功能
# 坏的分解不符合MECE
❌ 认证系统
├─ 注册(独立)
├─ 登录(独立)
├─ 发送邮件(重复:注册和密码重置都发送邮件) ← 不互斥
└─ ...缺少Token刷新、登出 ← 不穷尽
```
---
### 阶段3: 依赖关系分析
#### 3.1 依赖类型
```python
class DependencyType(Enum):
# 必须先完成A才能开始B
SEQUENTIAL = "sequential" # 串行
# A和B可以同时进行
PARALLEL = "parallel" # 并行
# A完成后B才能开始但C不需要A
PARTIAL = "partial" # 部分依赖
# A和B互相依赖需要重构设计
CIRCULAR = "circular" # 循环依赖(坏味道)
```
#### 3.2 构建依赖图
```python
def build_dependency_graph(tasks: List[Task]) -> nx.DiGraph:
"""
构建任务依赖关系图
"""
G = nx.DiGraph()
# 添加节点
for task in tasks:
G.add_node(task.id,
name=task.name,
effort=task.effort,
priority=task.priority,
risk=task.risk_level)
# 添加边(依赖关系)
for task in tasks:
for dep_id in task.dependencies:
G.add_edge(dep_id, task.id, type="depends_on")
return G
```
#### 3.3 识别关键路径
```python
def find_critical_path(G: nx.DiGraph) -> List[str]:
"""
计算关键路径(最长工时路径)
"""
# 计算每个节点到终点的最长路径
critical_path = nx.dag_longest_path(G, weight="effort")
return critical_path
```
**认证系统关键路径示例**: `User表 → Token表 → Token服务 → Login API → 集成测试`
**总工时**: 9小时最短可能完成时间
---
### 阶段4: 任务树生成
#### 4.1 可视化任务树 (ASCII)
```python
def generate_ascii_tree(tasks: List[Task]) -> str:
"""
生成ASCII格式的任务树
"""
lines = []
lines.append("实现用户认证系统 (目标)")
lines.append("")
# 按层级分组
layers = {
"基础设施": ["", "", ""],
"服务层": ["", "", ""],
"API层": ["", "", "", "", ""],
"安全层": ["", "", ""],
"测试": ["", "", ""]
}
for i, (layer_name, task_ids) in enumerate(layers.items()):
lines.append(f"├─ {layer_name}")
for j, task_id in enumerate(task_ids):
task = get_task(task_id)
prefix = "└─" if j == len(task_ids) - 1 else "├─"
lines.append(f"{prefix} {task_id}: {task.name} ({task.effort}h)")
return "\n".join(lines)
```
**输出示例**: `.ai-runtime/commands/runtime.plan.md`中包含完整示例
#### 4.2 JSON格式的任务树
```json
{
"project": "用户认证系统",
"total_tasks": 17,
"total_effort": "17.75h",
"critical_path": ["①","②","⑤","⑧","⑮","⑯"],
"critical_path_effort": "9h",
"tasks": [
{
"id": "①",
"name": "创建User表",
"layer": "基础设施",
"effort": 0.5,
"priority": "P0",
"dependencies": [],
"risk": "low",
"acceptance_criteria": [
"表结构符合User模型",
"已添加email唯一索引",
"created_at自动填充"
]
},
{
"id": "②",
"name": "创建Token表",
"layer": "基础设施",
"effort": 0.5,
"priority": "P0",
"dependencies": ["①"],
"risk": "low"
}
],
"phases": [
{
"phase": 1,
"name": "基础设施",
"tasks": ["①","②","③"],
"parallelizable": true
},
{
"phase": 2,
"name": "服务层",
"tasks": ["④","⑤","⑥"]
}
]
}
```
#### 4.3 甘特图生成
```python
def generate_gantt(tasks: List[Task]) -> str:
"""
生成简单的甘特图Markdown格式
"""
lines = []
lines.append("```gantt")
lines.append("title 认证系统实施计划")
lines.append("dateFormat YYYY-MM-DD")
lines.append("")
# 按阶段分组
for phase in ["基础设施", "服务层", "API层", "安全层", "测试"]:
phase_tasks = [t for t in tasks if t.layer == phase]
if phase_tasks:
lines.append(f"section {phase}")
for task in phase_tasks:
start = task.start_date.strftime('%Y-%m-%d')
end = task.end_date.strftime('%Y-%m-%d')
lines.append(f"{task.name} :a{task.id}, {start}, {end}")
lines.append("```")
return "\n".join(lines)
```
---
### 阶段5: 风险评估
#### 5.1 识别风险
```python
def identify_risks(tasks: List[Task]) -> List[Risk]:
"""
基于任务特征识别风险
"""
risks = []
for task in tasks:
# 复杂度过高风险
if task.effort > 4:
risks.append(Risk(
task=task.id,
level="medium",
category="complexity",
description="任务过大,可能隐藏未知问题",
mitigation="进一步分解成子任务"
))
# 依赖过多风险
if len(task.dependencies) > 3:
risks.append(Risk(
task=task.id,
level="high",
category="dependency",
description="强依赖多个任务,成为阻塞点",
mitigation="尽早开始,或与下游任务同步进行"
))
# 新知识风险
if task.confidence < 0.6:
risks.append(Risk(
task=task.id,
level="high",
category="knowledge",
description="不熟悉的技术/模式,容易出错",
mitigation="先进行小的Spike或请求专家帮助"
))
return risks
```
#### 5.2 风险矩阵
```markdown
## 风险评估矩阵
| 任务 | 风险类型 | 可能性 | 影响 | 等级 | 应对策略 |
|------|---------|--------|------|------|---------|
| 密码重置流程 | 复杂度 | 中 | 高 | 🔴 高 | 进一步分解先做Spike |
| Token刷新 | 知识缺口 | 高 | 中 | 🟡 中 | 查阅资料,咨询专家 |
| Email服务 | 外部依赖 | 低 | 中 | 🟢 低 | 设计降级方案 |
```
---
## 命令定义
### 语法
```bash
/runtime.plan "[需求描述]" \
--strategy=[full|mvp|risk-driven] \
--estimate=[true|false] \
--detail=[high|medium|low] \
--output=[json|md|both]
```
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `strategy` | 规划策略<br>- `full`: 完整规划所有细节<br>- `mvp`: 只规划MVP核心功能<br>- `risk-driven`: 优先规划高风险部分 | `full` |
| `estimate` | 是否包含工时估算 | `true` |
| `detail` | 任务详细程度 | `medium` |
| `output` | 输出格式 | `both` |
### 使用示例
#### 示例1: 完整规划
```bash
/runtime.plan "实现用户认证系统包括注册、登录、密码重置、JWT管理使用bcrypt加密JWT有效期7天"
```
**输出**:
**console**:
```
📋 需求规划: 用户认证系统
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
需求类型: 新功能开发
技术栈: Node.js + Express + PostgreSQL + JWT
约束: JWT有效期7天bcrypt加密
[功能拆解]
├─ 注册
├─ 登录
├─ 密码重置
└─ JWT管理
[任务统计]
总任务数: 17个
总工时: 17.75小时
关键路径: 9小时
[风险]
⚠️ 密码重置流程复杂度高建议Spike
⚠️ Token刷新机制不熟悉建议先调研
输出文件:
✓ cognition/plans/plan-20251114-1045.json
✓ cognition/plans/plan-20251114-1045.md
✓ cognition/graphs/task-tree-20251114-1045.svg
```
**JSON输出**: `cognition/plans/plan-20251114-1045.json`
```json
{
"project": "用户认证系统",
"requirement": "实现用户认证系统,包括注册...",
"total_tasks": 17,
"total_effort": "17.75h",
"critical_path": ["①","②","⑤","⑧","⑮","⑯"],
"tasks": [...],
"risks": [...]
}
```
**Markdown输出**: `cognition/plans/plan-20251114-1045.md`
```markdown
# 用户认证系统 - 实施计划
## 需求概述
实现用户认证系统...
## 任务树
### 阶段1: 基础设施
- ① 创建User表 (0.5h) - P0
- ② 创建Token表 (0.5h) - P0 - 依赖:①
- ③ 配置JWT (0.25h) - P0
...
## 甘特图
```gantt
...
```
## 风险评估
...
```
#### 示例2: MVP规划
```bash
/runtime.plan "构建图片分享社交平台" --strategy=mvp
```
**特点**:
- 只规划核心功能(上传图片、浏览、点赞、评论)
- 非核心功能(滤镜、故事、推荐算法)推迟到后续迭代
- 快速交付可演示版本
#### 示例3: 风险驱动规划
```bash
/runtime.plan "实现微服务架构的电商平台" --strategy=risk-driven
```
**特点**:
- 优先识别高风险任务(服务拆分、数据一致性、分布式事务)
- 建议先Spike降低不确定性
- 生成风险评估报告
---
## 规划策略
### 策略1: Full完整规划
```
适用: 项目需求明确,技术方案清晰,有足够时间
特点:
- 规划所有细节
- 包括测试、文档、监控
- 精确到小时的估算
输出: 完整项目计划类似PRD + 技术方案)
```
### 策略2: MVP最小可行产品
```
适用: 需求探索期,需要快速验证,时间紧张
特点:
- 只规划核心价值功能
- 砍掉所有"锦上添花"的功能
- 估算粗略(只到天)
输出: MVP功能清单 + 最小任务集
```
**示例**: 社交应用MVP
- ✅ 用户注册/登录
- ✅ 发帖
- ✅ 浏览帖子
- ✅ 点赞
**推迟到迭代2**:
- ❌ 评论回复
- ❌ 私信
- ❌ 推荐算法
- ❌ 图片滤镜
### 策略3: Risk-Driven风险驱动规划
```
适用: 技术不确定性强,有高风险模块
特点:
- 优先分析高风险任务
- 建议先做技术调研Spike
- 生成风险缓解计划
输出: 风险矩阵 + 应对策略 + 调整后任务树
```
**示例**: 微服务架构
高风险任务:
1. 服务拆分策略 → 先做Spike
2. 分布式事务 → 调研Saga模式
3. 数据一致性 → 评估最终一致性影响
低风险任务(可以推迟):
- API网关 → 成熟技术,直接使用
- 服务发现 → Consul/Nacos直接使用
- 配置中心 → Apollo/Nacos直接使用
---
## 任务规格模板
每个任务使用统一模板:
```markdown
## Task {ID}: {任务名称}
**ID**: TASK-{ID}
**类型**: [feature|bug|refactor|doc|test]
**优先级**: [P0|P1|P2]
**预计工时**: X小时
**置信度**: 0.X (0-1)
**依赖**: [依赖的任务ID列表]
### 目标
[清晰描述任务的目标]
### 验收标准DoD
- [ ] 代码实现完成
- [ ] 单元测试覆盖率 > 80%
- [ ] 手动测试通过
- [ ] 代码审查通过
- [ ] 文档更新
- [ ] 无回归错误
### 实现大纲
1. [步骤1]
2. [步骤2]
3. [步骤3]
### 潜在风险
- ⚠️ [风险1]
- ⚠️ [风险2]
### 如果卡住Escalation
- [求助谁/查阅什么]
### 相关文件
- [文件路径]
```
---
## 与 /runtime.learn 的区别
| 维度 | `/runtime.learn` | `/runtime.plan` | 为什么分开? |
|------|-----------------|----------------|------------|
| **目标** | 理解未知问题 | 规划已知需求 | 认知阶段不同 |
| **输入** | 问题(需要探索) | 需求(相对明确) | 前提条件不同 |
| **核心** | 知识缺口识别 | 功能拆解与依赖分析 | 方法论不同 |
| **输出** | 学习报告 + 新知识 | 任务树 + 执行计划 | 产物不同 |
| **下一步** | 通常接 /runtime.plan | 接 /runtime.iterate | 工作流分工 |
**典型工作流**:
```
情况A: 完全未知的问题
/runtime.learn "为什么服务会崩溃?"
↓ 理解后,发现问题: "需要添加限流"
/runtime.plan "实现限流功能" # 生成实施计划
/runtime.iterate --plan=plan-xx.json # 执行计划
情况B: 明确的需求
/runtime.plan "实现用户认证系统" # 直接规划
/runtime.iterate --plan=plan-xx.json # 执行计划
```
---
## 工具与脚本
### 辅助脚本: task-analyzer.py
```python
#!/usr/bin/env python3
"""
任务分析器 - 从需求文本提取结构化信息
"""
import re
import json
class TaskAnalyzer:
def __init__(self):
self.patterns = {
"action": r"(实现|添加|修改|删除|重构|修复)",
"object": r"(用户|认证|JWT|密码|邮件|Token|API)",
"constraint": r"\[(.*?)\]",
"time": r"(\d+天|\d+小时|\d+h)"
}
def analyze(self, requirement_text):
"""分析需求文本"""
result = {
"actions": [],
"objects": [],
"constraints": [],
"time_keywords": []
}
for key, pattern in self.patterns.items():
matches = re.findall(pattern, requirement_text)
result[f"{key}s"] = matches
return result
def suggest_tasks(self, analysis):
"""基于分析建议任务"""
tasks = []
# 如果发现"认证"和"用户"
if "认证" in analysis["objects"] and "用户" in analysis["objects"]:
tasks.extend([
"创建User表",
"实现密码哈希",
"实现注册API",
"实现登录API"
])
# 如果发现"JWT"
if "JWT" in analysis["objects"]:
tasks.extend([
"配置JWT",
"实现Token生成",
"实现Token验证",
"实现Token刷新"
])
return list(set(tasks))
# 使用示例
analyzer = TaskAnalyzer()
result = analyzer.analyze("实现用户认证系统包括JWT和bcrypt加密")
print(json.dumps(result, indent=2, ensure_ascii=False))
```
---
## 最佳实践
### 实践1: 规划前先用Learn如果不确定
```bash
# 不确定现有架构
❌ /runtime.plan "实现新功能X" # 可能规划不切实际
# 先学习,再规划
✅ /runtime.learn "理解现有架构" → 置信度>0.8
✅ /runtime.plan "实现新功能X"
```
### 实践2: 用小需求练习
```bash
# 复杂需求(不建议首次尝试)
❌ /runtime.plan "重构整个微服务架构"
# 从小需求开始
✅ /runtime.plan "添加密码重置功能" # 3-5个任务
✅ /runtime.plan "实现用户注册" # 2-3个任务
```
### 实践3: 定期重新规划
```python
# 需求变更时
if requirement_changed:
# 不是继续执行旧计划
old_plan = load_old_plan()
# 而是重新规划
new_plan = runtime.plan(new_requirement)
# 比较差异
diff = compare_plans(old_plan, new_plan)
# 适应新计划
runtime.iterate(plan=new_plan)
```
### 实践4: 保存并复用模式
```bash
# 规划完成后
/runtime.plan "实现OAuth2.0认证"
# 固化成功模式
/runtime.remember "OAuth2.0认证的任务树模板"
# 下次类似需求
/runtime.plan "实现SAML认证"
→ AI从记忆中提取OAuth2.0模式作为参考
→ 生成类似结构的任务树
```
---
## 输出规范
### JSON Schema
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"version": {"type": "string"},
"project": {"type": "string"},
"requirement": {"type": "string"},
"created_at": {"type": "string"},
"total_tasks": {"type": "integer"},
"total_effort": {"type": "string"},
"critical_path": {
"type": "array",
"items": {"type": "string"}
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"name": {"type": "string"},
"layer": {"type": "string"},
"effort": {"type": "number"},
"priority": {"type": "string"},
"dependencies": {
"type": "array",
"items": {"type": "string"}
},
"acceptance_criteria": {
"type": "array",
"items": {"type": "string"}
}
}
}
},
"risks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"task": {"type": "string"},
"level": {"type": "string"},
"category": {"type": "string"},
"description": {"type": "string"},
"mitigation": {"type": "string"}
}
}
}
}
}
```
---
## 宪法遵循
**遵循原则**:
- ✓ 1.2 类脑思维: 将需求拆解为可管理的模块
- ✓ 2.1 代码即知识: 任务树是代码结构的心智模型
- ✓ 4.4 规划透明: 规划过程清晰可见(新增)
- ✓ 1.3 谦逊与不确定: 明确标注置信度和风险
- ✓ 2.2 渐进式实施: 支持MVP和风险驱动策略
---
**命令定义**: `.ai-runtime/commands/runtime.plan.md`
**脚本**: `.ai-runtime/scripts/task-analyzer.py` (辅助分析)
**输出**: `cognition/plans/plan-{timestamp}.{json|md}`
**版本**: 1.0.0