Hypothesis: [Short Name]
Hypothesis: [Short Name]
Claim: [What we believe will work]
Rationale: [Why we think this might work]
Testable Prediction: If this hypothesis is correct, then [observable outcome]
Falsification Criteria: This hypothesis is WRONG if [observable outcome]
Cost to Test: [Time/resources needed]
Confidence Level: [Low/Medium/High] - [Why]
完整版模板(含 ID、状态、If-Then 表述、测试成本与最低实验描述)见 <a href="https://link.gitcode.com/i/8f816173eeec9f9b3b3cae181a326f6b" target="_blank">Templates.md</a>,其中要求为每个假设填写 **Falsification("WRONG if: 能证明它错误的特定可观察结果")**——写不出这句话的假设不可测试。
### 对抗确认偏差的五种反制手段
1. **预演失败(Pre-Mortem)**——测试前设想:"假设这个假设彻底失败了,是哪里出了问题?"
2. **魔鬼代言人(Devil's Advocate)**——主动反驳你最喜欢的假设
3. **主动寻求反证**——对每个假设问:"什么证据会降低我的信心?"
4. **红队(RedTeam 技能)**——用 <a href="https://link.gitcode.com/i/3de0fe7d694994f255045ccf187c135a" target="_blank">RedTeam 技能</a> 从多角度攻击你的假设
5. **考虑零假设**——始终包含"也许没出问题"或"也许当前方案已经最优"
### 多智能体假设生成
对重要问题,<a href="https://link.gitcode.com/i/08dfb5a0fc8e737f3d612c3a1b0cdd27" target="_blank">GenerateHypotheses 工作流</a> 建议并行使用多个 Agent 从不同角度生成假设:技术视角、用户视角、挑战假设的视角、来自类比领域正交视角,然后合并去重。
---
## 五、Phase 3:EXPERIMENT——设计测试
### 最小可行实验
**设计能检验假设的最小实验。** 不是每个实验都需要全面完整。目标是**学习**,不是完美。自问:
- 验证它是否有效的最快方式是什么?
- 获得有意义数据的最便宜方式是什么?
- 什么会**证伪**该假设?
- 达到信心的最小样本量是多少?
### 实验设计五步流程
**1. 定义成功标准**
- 什么结果确认假设?
- 什么结果反驳假设?
- 什么结果不确定(需要更多数据)?
**2. 设计测试**
- 我们要做什么?
- 我们要测量什么?
- 如何测量?
- 对照组是什么(如适用)?
**3. 识别变量**
- 自变量(我们改变的)
- 因变量(我们测量的)
- 控制变量(我们保持恒定的)
- 混淆变量(可能扭曲结果的)
**4. 规划数据收集**
- 需要什么数据?
- 如何收集?
- 何时收集?
- 多少算够?
**5. 定义停止标准**
- 何时停止实验?
- 什么算"足够"的数据?
- 何时宣布成功/失败/不确定?
### 实验质量检查清单
| 标准 | 问题 |
|----------|----------|
| **最小 Minimal** | 这是能给出有意义数据的最小测试吗? |
| **可证伪 Falsifiable** | 实验能否证明假设错误? |
| **可测量 Measurable** | 是否确切知道在测量什么? |
| **受控 Controlled** | 是否隔离了正在测试的变量? |
| **可复现 Reproducible** | 其他人能否运行此实验? |
### 实验模板
```markdown
## Experiment: [Name]
**Testing Hypothesis:** [Which hypothesis this tests]
**Method:**
1. [Step 1]
2. [Step 2]
3. [Step 3]
**Measuring:**
- Primary metric: [What we're measuring]
- Secondary metrics: [Other useful data]
**Success Criteria:**
- Hypothesis CONFIRMED if: [condition]
- Hypothesis REFUTED if: [condition]
- INCONCLUSIVE if: [condition]
**Duration:** [How long to run]
**Resources Needed:** [What's required]
Templates.md 中的完整实验模板额外要求**预先承诺(PRE-COMMITTED)**成功标准——在运行前就写死 CONFIRMED/REFUTED/INCONCLUSIVE 三种结局的条件,并列出自变量/因变量/控制变量及数据收集表,防止事后解释。
分领域实验工具
| 领域 | 工具 |
|---|---|
| 代码 | Worktrees(并行实验)、TDD、特性开关 |
| 提示词 | Evals 技能、A/B 测试 |
| UI/UX | Worktrees、Interceptor 技能、设计变体 |
| 业务 | A/B 测试、小规模发布、试点项目 |
| 想法 | 小范围受众测试、草稿 → 反馈循环 |
六、Phase 4:EXECUTE——运行实验
并行执行
当实验相互独立时,并行运行。 这正是 LifeOS 的闪光点:
- 多个 Worktree 进行代码实验
- 多个 Agent 进行研究实验
- 多次 eval 运行进行提示词实验
顺序执行在可以并行时是浪费时间。
执行三步流程
1. 准备
- 验证所有前置条件已满足
- 确保测量基础设施就绪
- 确认成功/失败标准清晰
- 设置日志/数据收集
2. 执行
- 按设计运行实验
- 中途不要更改参数(除非中止)
- 记录任何意外事件
- 捕获所有相关数据
3. 观察
- 监控进展(不要设定后就放任不管)
- 记录异常
- 若实验明显失败,准备中止
- 不要过早偷看结果(避免偏差)
执行质量检查清单
| 标准 | 问题 |
|---|---|
| 忠实 Faithful | 是否按设计运行了实验? |
| 完整 Complete | 是否收集了计划中的所有数据? |
| 有记录 Documented | 是否记录了发生的事? |
| 无偏 Unbiased | 是否避免了中途偷看或调整? |
七、Phase 5:MEASURE——收集数据
数据收集四原则
1. 只测量重要的(Measure What Matters)——只收集与目标相关的数据。更多数据 ≠ 更好数据。
2. 尽可能量化(Quantify Where Possible)——数字使比较成为可能。"感觉更快" < "加载时间下降 40%"。
3. 捕获上下文(Capture Context)——脱离上下文的数字毫无意义。记录条件、异常、环境。
4. 保留原始数据(Preserve Raw Data)——始终保留原始数据。派生指标可以重算,原始数据无法恢复。
测量四步流程
1. 收集主要指标
- 正在测试的核心内容
- 成功标准的直接测量
2. 收集次要指标
- 支撑上下文
- 早期预警信号
- 健全性检查
3. 捕获定性数据
- 观察
- 反馈
- 异常
- 意外
4. 验证数据质量
- 有离群值吗?
- 数据完整吗?
- 有明显错误吗?
- 数字合理吗?
测量模板
## Results: [Experiment Name]
**Date:** [When run]
**Duration:** [How long]
**Primary Metrics:**
| Metric | Before | After | Change |
|--------|--------|-------|--------|
| [Name] | [Value] | [Value] | [Δ%] |
**Secondary Metrics:**
| Metric | Value | Notes |
|--------|-------|-------|
| [Name] | [Value] | [Context] |
**Observations:**
- [Notable event 1]
- [Notable event 2]
**Raw Data Location:** [Link/path]
八、Phase 6:ANALYZE——对照目标分析
分析四步流程
1. 对照成功标准
- 我们达成目标了吗?
- 超出或落后多少?
- 差异在统计上显著吗?
2. 判定假设状态
- CONFIRMED(确认):证据支持假设
- REFUTED(反驳):证据与假设矛盾
- INCONCLUSIVE(不确定):需要更多数据
3. 识别学习点
- 我们学到了什么?
- 什么让我们意外?
- 这对我们的理解改变了什么?
4. 生成新问题
- 涌现了哪些新问题?
- 我们会做什么不同的事?
- 下一步该探索什么?
分析质量检查清单
| 标准 | 问题 |
|---|---|
| 客观 Objective | 是对照目标比较,而非对照我们的期望? |
| 诚实 Honest | 是否承认负面结果? |
| 统计 Statistical | 是否考虑了方差与显著性? |
| 重学习 Learning-Focused | 是否提取了洞见,而不仅是裁决? |
分析模板
## Analysis: [Experiment Name]
**Goal Comparison:**
| Success Criteria | Required | Actual | Status |
|-----------------|----------|--------|--------|
| [Metric 1] | [Value] | [Value] | ✅/❌ |
| [Metric 2] | [Value] | [Value] | ✅/❌ |
**Hypothesis Status:** [CONFIRMED / REFUTED / INCONCLUSIVE]
**Key Learnings:**
1. [Learning 1]
2. [Learning 2]
3. [Learning 3]
**Surprises:**
- [What we didn't expect]
**New Questions:**
- [Question that emerged]
**Implications for Next Iteration:**
- [How this changes our approach]
九、Phase 7:ITERATE——反馈回路
迭代四步流程
1. 更新世界模型
- 我们现在知道了哪些以前不知道的?
- 这如何改变我们的理解?
- 哪些假设被验证或被推翻?
2. 精炼假设
- 哪些假设应继续探索?
- 哪些应放弃?
- 涌现了哪些新假设?
3. 规划下一轮
- 下一个实验是什么?
- 新目标是什么(如果变了)?
- 需要什么新观察?
4. 决定:继续还是交付
- 我们学得够多了吗?
- 是时候交付并从生产中学习吗?
- 进一步实验还有价值吗?
何时停止迭代
停止当:
- 目标已达成
- 进一步迭代收益递减
- 时间/资源约束要求交付
- 问题已改变(转向)
不要因为以下原因停止:
- 我们感到沮丧
- 我们想回避负面结果
- 实验耗时超出预期
- 我们依恋自己的假设
迭代反模式
不交付的无限迭代 与 不迭代的直接交付 一样糟糕。目标是进步,不是完美。总有一个时点要交付并从生产中学习。
十、Meta:科学应用于科学
这套方法论适用于它自身。在 SKILL.md 中,每完成一次工作流都要追加 JSONL 执行日志;Protocol.md 则明确要求 Science 技能必须能用科学方法改进自身:
- Goal: 提升问题求解有效性
- Observe: 跨领域追踪实验产出
- Hypothesize: 尝试方法论变体
- Experiment: 将变体应用于真实问题
- Measure: 学习率、成功率、迭代速度
- Analyze: 对比方法论版本
- Iterate: 更新 Science 文档
方法论的自我演进在 Meta/ 目录中跟踪,这与 LifeOS 的算法循环(见 ALGORITHM/ideate-loop.md 与 ALGORITHM/optimize-loop.md)一脉相承:系统本身也在不断被优化。
十一、与 LifeOS 技能的集成:Protocol 而非 Service
Protocol.md 提出了一个关键洞见:"技能不调用 Science,技能实现 Science。" 就像 TCP/IP 定义了通信模式而不关心通信内容,Science 定义了迭代模式而不关心应用的领域。二者的区别是:
| 模型 | 描述 | 耦合度 |
|---|---|---|
| 服务(错误) | Development 调用 Science.analyze() | 高——Science 必须了解所有技能 |
| 协议(正确) | Development 实现 ScienceProtocol | 低——技能独立合规 |
协议接口
任何 Science 合规的工作流都表现出如下行为(摘自 Protocol.md 的 TypeScript 接口描述):
interface ScienceProtocol {
// Phase 0: What are we trying to achieve?
goal: {
successCriteria: string[]; // How will we know we succeeded?
measurableIndicators: Metric[]; // What numbers define success?
constraints: string[]; // What are our limits?
antiGoals?: string[]; // What are we NOT trying to do?
};
// Phase 1: What is the current state?
observe(): Observation;
// Phase 2: What might work? (MUST be plural)
hypothesize(): Hypothesis[]; // Minimum 3
// Phase 3-4: Design and run tests
experiment(hypothesis: Hypothesis): ExperimentResult;
// Phase 5-6: What happened? How does it compare?
measure(result: ExperimentResult): Measurement;
analyze(measurement: Measurement, goal: Goal): Analysis;
// Phase 7: What's next?
iterate(analysis: Analysis): NextAction;
}