第 09 章 | 决策即取舍
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
第 9 章:决策即取舍
学习目标
学会用"决策矩阵"思维,把"我想做 X" 变成"为了 X 我接受 Y 的代价"。
什么是"决策"
任何看似只有一种做法的事,仔细想都有 2~5 种做法,每种都有取舍。
这正是后续 design.md 要记录的东西。
决策矩阵的固定模板
| 选项 | 优 | 缺 | 推荐? |
|---|---|---|---|
| A | ... | ... | ✓/✗ |
| B | ... | ... | ✓/✗ |
| C | ... | ... | ✓/✗ |
每个决策都用这个表过一遍。
doc2video 真实做过的 8 个决策
flowchart TB
D1["D1: 终端控制
tmux vs subprocess vs AppleScript"] --> R1["选 tmux"]
D2["D2: 录屏
全屏 vs 窗口区域"] --> R2["选全屏"]
D3["D3: TTS
say vs edge-tts vs OpenAI"] --> R3["选 edge-tts"]
D4["D4: 文档面板
React vs 纯 HTML+WS vs Electron"] --> R4["选纯 HTML+WS"]
D5["D5: 同步
先念后敲 vs 边念边敲"] --> R5["选先念后敲"]
D6["D6: 错误处理
AI 自动修 vs 暂停询问"] --> R6["选暂停询问"]
D7["D7: Markdown 协议
严格 DSL vs 自然 markdown"] --> R7["选自然+:::manual 容器"]
D8["D8: 语言
Python vs Node vs Rust"] --> R8["选 Python"]
style R1 fill:#c8e6c9
style R2 fill:#c8e6c9
style R3 fill:#c8e6c9
style R4 fill:#c8e6c9
style R5 fill:#c8e6c9
style R6 fill:#c8e6c9
style R7 fill:#c8e6c9
style R8 fill:#c8e6c9每条都对应一份决策矩阵。例如 D5:
| 选项 | 优 | 缺 | 推荐 |
|---|---|---|---|
| 先念后敲 | 易实现、初学者好懂 | 不像真人讲课灵活 | ✓ |
| 边念边敲 | 自然、像真人 | 反应式调度地狱、命令执行长度不可控 | ✗(MVP 不做) |
→ "先念后敲"被 D5 写死。三个月后任何 agent 想"边念边敲",reviewer 会按 D5 拒绝。这是把决策固化成约束的过程。
决策的 3 类范畴
flowchart LR
All["所有决策"] --> Tech["技术决策
(用什么库/架构)"]
All --> Scope["范围决策
(做什么/不做什么)"]
All --> Process["流程决策
(怎么协作)"]
Tech --> Tex["D1 D2 D3 D4 D8"]
Scope --> Scx["Non-Goals 列表"]
Process --> Prx["D5 D6 D7"]反模式:避免假决策
❌ "我们用最先进的技术" ← 不是决策,是口号
❌ "我们后面再决定" ← 推迟即放弃
❌ "选最好的那个" ← 没说"什么标准"
❌ "都行" ← 必有取舍,没看到说明没思考
✅ "选 X,因为 A 更重要,接受 B 不如别的选项的代价"
决策的写作模板
design.md 里每条决策这样写:
### D5. 同步策略:先念后敲
**选**:每个 step 严格顺序——TTS 完整播放 → 命令打字 → 等命令完成 → 下一步
**为何**:
- 把"反应式实时调度"问题降级为"线性回放"
- 与初学者认知一致:"先听讲,再看做"
- 不依赖配音/命令时长精确对齐
**取舍**:不能做"边讲边敲"的高级演示;这是 MVP 明确放弃的体验
→ 三段式:选什么 / 为何 / 取舍了什么。
你现在能做什么
- 写出至少 5 条带"取舍"的项目决策
- 用决策矩阵帮自己(或 explore agent)做选择
- 识别假决策(口号、推迟、模糊)
下一章用 /opsx:propose 把这些决策正式落地成 change 工件。