第 09 章 | 决策即取舍

更新于 2026/5/9
💡 进群学习加 wx: 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 工件。