datai/docs/archive/skill/0005-architecture-decision.md

362 lines
8.2 KiB
Markdown
Raw 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.

---
name: 0005-architecture-decision
description: 方案决策,基于 ADR 模板创建架构决策记录
---
# 技能:架构决策 (Architecture Decision)
## 元数据 (Metadata)
- **name**: architecture-decision
- **description**: 方案决策,基于 ADR 模板创建架构决策记录
- **version**: 1.0.0
- **author**: SSOT Architect
- **lastUpdated**: 2026-01-15
## 触发与定位 (Triggers & Scope)
### 触发条件 (Triggers)
当以下情况发生时AI 应当"觉醒"本技能:
1. **需求已定义**: 完成需求定义后,需要制定技术方案
2. **技术选型**: 需要在多个技术方案中选择
3. **架构变更**: 需要记录架构变更决策
4. **方案冲突**: 发现现有方案与新需求冲突
5. **工作流阶段 2**: 用户进入工作流的"方案决策"阶段
### 定位范围 (Scope)
- **适用模块**: 所有 Datai 项目模块
- **影响文件**: `docs/decisions/adr/ADR-XXX.md`, `docs/index.md`
- **相关技能**: skill-define-requirements, skill-prompt-engineering
## 核心指令集 (Instructions)
### 架构约束 (Architecture Constraints)
1. **ADR 文档命名规范**:
- 格式: `ADR-XXX.md`
- XXX: 三位数字,从 001 开始递增
- 示例: `ADR-001.md`, `ADR-002.md`
2. **ADR 必须包含**:
- 决策标题
- 状态Draft/Accepted/Deprecated
- 背景(为什么要做这个决策)
- 决策内容(我们决定做什么)
- 后果(好的后果与坏的后果)
- 合规性验证(如何验证决策已被执行)
3. **决策流程要求**:
- 针对该需求,分析至少两种技术方案
- 记录选定方案的理由、潜在风险及回滚策略
- **强制校验**: 检查方案是否冲突于已有的 ADR 记录
### 业务逻辑 SOP (Business Logic SOP)
#### 步骤 1: 分析技术方案
```markdown
## 技术方案分析
### 方案 A: [方案名称]
**描述**: [方案描述]
**优点**:
- [优点1]
- [优点2]
**缺点**:
- [缺点1]
- [缺点2]
**风险**:
- [风险1]
- [风险2]
**成本评估**:
- 开发成本: [高/中/低]
- 维护成本: [高/中/低]
- 学习成本: [高/中/低]
### 方案 B: [方案名称]
**描述**: [方案描述]
**优点**:
- [优点1]
- [优点2]
**缺点**:
- [缺点1]
- [缺点2]
**风险**:
- [风险1]
- [风险2]
**成本评估**:
- 开发成本: [高/中/低]
- 维护成本: [高/中/低]
- 学习成本: [高/中/低]
### 方案对比
| 维度 | 方案 A | 方案 B |
|------|--------|--------|
| 开发成本 | [评估] | [评估] |
| 维护成本 | [评估] | [评估] |
| 性能 | [评估] | [评估] |
| 可扩展性 | [评估] | [评估] |
| 团队熟悉度 | [评估] | [评估] |
```
#### 步骤 2: 选择最优方案
```markdown
## 决策结果
### 选定方案
**方案**: [方案名称]
### 选择理由
1. [理由1]
2. [理由2]
3. [理由3]
### 放弃方案的原因
**方案 A**: [放弃原因]
**方案 B**: [放弃原因]
```
#### 步骤 3: 检查冲突
```markdown
## 冲突检查
### 已有 ADR 检查
- [ADR-001](./ADR-001.md): [冲突检查结果]
- [ADR-002](./ADR-002.md): [冲突检查结果]
### 冲突解决
[如果有冲突,说明如何解决]
```
#### 步骤 4: 创建 ADR 文档
```markdown
---
name: ADR-001
description: [决策描述]
---
# [决策标题]
## 元数据 (Metadata)
- **决策编号**: ADR-001
- **决策标题**: [决策标题]
- **状态**: [Draft | Accepted | Deprecated]
- **日期**: YYYY-MM-DD
- **决策者**: [决策者姓名]
- **相关需求**: [REQ-XXX](../../requirements/REQ-XXX.md)
## 背景 (Context)
### 问题描述
[为什么要做这个决策?]
### 当前状态
[当前系统状态]
### 问题影响
[问题对系统的影响]
### 约束条件
- [约束1]
- [约束2]
## 决策 (Decision)
### 决策内容
[我们决定做什么?]
### 技术方案
[详细的技术方案]
### 实施计划
[实施步骤和时间表]
### 回滚策略
[如果决策失败,如何回滚]
## 后果 (Consequences)
### 正面影响
[好的后果]
### 负面影响
[坏的后果和 Trade-offs]
### 风险评估
| 风险 | 概率 | 影响 | 缓解措施 |
|------|------|------|----------|
| [风险1] | [高/中/低] | [高/中/低] | [缓解措施] |
| [风险2] | [高/中/低] | [高/中/低] | [缓解措施] |
### 权衡分析
[详细分析权衡取舍]
## 合规性验证 (Compliance)
### 验证标准
[如何验证决策已被执行?]
### 验证方法
[验证的具体方法]
### 验证结果
[验证结果记录]
### 成功指标
| 指标 | 目标值 | 实际值 | 状态 |
|------|--------|--------|------|
| [指标1] | [目标值] | [实际值] | [状态] |
| [指标2] | [目标值] | [实际值] | [状态] |
## 相关文档 (Related Documents)
- [需求文档](../../requirements/REQ-XXX.md)
- [设计文档](../../design/DES-XXX.md)
- [其他 ADR](./ADR-XXX.md)
## 变更历史 (Change History)
| 日期 | 版本 | 变更内容 | 变更人 |
|------|------|----------|--------|
| YYYY-MM-DD | 1.0.0 | 初始版本 | [姓名] |
```
#### 步骤 5: 更新 docs/index.md
```markdown
### 🎯 架构决策 (ADRs)
| 文档 | 状态 | 描述 | 更新日期 |
|------|------|------|----------|
| [ADR-001](decisions/adr/ADR-001.md) | ✅ Accepted | [决策描述] | 2026-01-15 |
```
### 工具调用 (Tool Usage)
1. **ADR 编号生成工具**:
- 使用 `Grep` 工具搜索 `docs/decisions/adr/` 目录
- 查找最大的 ADR 编号
- 生成新的 ADR 编号
2. **冲突检查工具**:
- 使用 `Read` 工具读取现有 ADR 文档
- 使用 `SearchCodebase` 工具搜索相关技术方案
- 分析是否存在冲突
3. **文件创建工具**:
- 使用 `Write` 工具创建 ADR 文档
- 确保文件路径正确
4. **索引更新工具**:
- 使用 `Read` 工具读取 `docs/index.md`
- 使用 `SearchReplace` 工具更新索引
## 错误陷阱与验证 (Anti-Patterns & Checklist)
### 常见错误 (Anti-Patterns)
1. **错误**: 只分析一种技术方案
- **后果**: 无法做出最优决策
- **修正**: 必须分析至少两种技术方案
2. **错误**: 忽略冲突检查
- **后果**: 决策可能与现有架构冲突
- **修正**: 必须检查与已有 ADR 的冲突
3. **错误**: 缺少回滚策略
- **后果**: 决策失败后无法恢复
- **修正**: 必须制定详细的回滚策略
4. **错误**: 后果分析不全面
- **后果**: 无法全面评估决策影响
- **修正**: 必须分析正面和负面后果
5. **错误**: 缺少合规性验证
- **后果**: 无法验证决策是否被执行
- **修正**: 必须定义验证标准和验证方法
### 验收清单 (Acceptance Checklist)
- [ ] ADR 文档已创建
- [ ] ADR 编号符合规范
- [ ] 至少分析两种技术方案
- [ ] 已进行冲突检查
- [ ] 已选择最优方案
- [ ] 已说明选择理由
- [ ] 已制定回滚策略
- [ ] 已分析正面和负面后果
- [ ] 已定义验证标准
- [ ] docs/index.md 已更新
- [ ] 相关文档已链接
### Correct vs Incorrect 对比
#### Correct 示例
```markdown
## 技术方案分析
### 方案 A: 使用 REST API
**优点**:
- 标准化,易于理解和维护
- 支持多种数据格式JSON/XML
- 易于测试和调试
**缺点**:
- 性能相对较低
- 不适合实时通信
**成本评估**:
- 开发成本: 低
- 维护成本: 低
- 学习成本: 低
### 方案 B: 使用 GraphQL
**优点**:
- 灵活,按需获取数据
- 减少网络请求次数
- 类型安全
**缺点**:
- 学习曲线陡峭
- 缓存复杂度高
**成本评估**:
- 开发成本: 中
- 维护成本: 中
- 学习成本: 高
## 决策结果
### 选定方案
**方案**: 方案 A - 使用 REST API
### 选择理由
1. 团队熟悉 REST API学习成本低
2. 项目需求不需要 GraphQL 的灵活性
3. REST API 性能满足项目需求
4. 易于维护和扩展
```
#### Incorrect 示例
```markdown
## 决策
我们决定使用 REST API。
```
**问题**: 只分析一种方案,缺少方案对比、选择理由、冲突检查等关键内容。
## 相关文档 (Related Documents)
- [工作流提示词](../prompts/03-创建工作流提示词.md#阶段-2-方案决策-architecture-decision)
- [需求定义技能](./0004-define-requirements.md)
- [提示词资产化技能](./0006-prompt-engineering.md)
- [ADR 模板](../prompts/03-创建工作流提示词.md#41-adr-模板-架构决策)