experiment-design · git:20260428.bf023ec · 2026-04-28 · sha256 d8fa46cb7089434e
experiment-design git:20260428.bf023ecA
Immutable. This exact content never changes and is served at /api/v1/blob/d8fa46cb7089434e.
--- name: experiment-design description: > 当 Supervisor 说"设计个实验""怎么验证这个 idea", 或 autoresearch 判断某个 developing/validated idea 需要实验验证时, 为 idea 设计完整实验方案 argument-hint: "<idea> [constraints]" allowed-tools: Read, Write, Edit, Glob, Grep --- ## Purpose experiment-design 是 MindFlow 从 idea 到实验的桥接技能。给定一个 status 为 `developing` 或 `validated` 的研究 idea,它综合 idea 的 hypothesis、历史记忆中的有效方法与失败方向,为其设计完整的实验方案,并按 `Templates/Experiment.md` 格式写入 `Experiments/` 目录。 实验方案覆盖六个核心模块: | 模块 | 内容 | | :--- | :--- | | **Variables** | 自变量 / 因变量 / 控制变量 | | **Baseline** | 对比方法与来源 | | **Metrics** | 可量化的评估指标 | | **Steps** | 具体执行步骤 | | **Expected Outcome** | 假设成立与不成立两种情况 | | **Risk & Mitigation** | 主要风险点与应对方案 | ## Steps ### Step 1:读取目标 Idea 笔记,验证 status 用 Read 打开 `idea` 参数指向的 `Ideas/xxx.md` 文件。重点提取以下字段: - `title`:idea 标题 - `hypothesis`:核心假设(实验围绕此展开) - `status`:当前状态——**必须为 `developing` 或 `validated`,否则立即停止执行并告知 Supervisor** - `tags`:所属 domain / 领域关键词 - `related_papers`:引用的 Paper 笔记列表 - idea 正文中的 Motivation、approach sketch(有助于确定 Variables 和 Steps) 若文件不存在,停止并告知 Supervisor,不继续执行。 ### Step 2:检索历史记忆 读取 `skills/5-evolution/memory-retrieve/SKILL.md`,按其 Steps 执行,scope 设为 `effective-methods` + `failed-directions`,query 使用 idea 的 hypothesis 和 tags 关键词。 从检索结果中识别: - **可复用的有效方法**:可直接借鉴到本实验的 baseline 选取、metric 设计、实验步骤 - **需要规避的失败方向**:历史上已被证明无效或高风险的路径,列入 Risk & Mitigation 若记忆文件不存在或无相关条目,跳过此步,在实验方案中注明"无历史记忆参考"。 ### Step 3:设计实验方案六部分 综合 Step 1 的 idea 内容、Step 2 的历史记忆、以及可选的 `constraints` 参数,逐一设计以下六个模块: #### Variables(变量设计) - **自变量(Independent Variable)**:实验中主动改变的因素,直接对应 hypothesis 中的核心机制 - **因变量(Dependent Variable)**:被测量的结果变量,必须对应具体 Metric - **控制变量(Controlled Variable)**:需要保持不变的条件(数据集、随机种子、训练轮数等),避免混淆变量 #### Baseline(对比方法) 列举 2-4 个 baseline,每个 baseline 注明: - 方法名称和来源论文(引用 `[[Papers/xxx]]`) - 选取理由(为何是公平的对比) 若 `constraints` 中含"纯理论推导",可省略实验 baseline,改为理论分析对比。 #### Metrics(评估指标) 列举 2-4 个指标,每个指标必须满足: - **可量化**:有明确的数值定义,可从实验结果直接计算 - **与 hypothesis 直接相关**:能判断假设是否成立 - 注明主指标(primary metric)和辅助指标(secondary metrics) **禁止**使用无法量化的描述性指标(如"效果更好"、"更鲁棒")——必须转化为具体数值(如"success rate ↑ X%"、"BLEU-4 score")。 #### Steps(执行步骤) 按时间顺序列出 4-8 个可执行步骤,每步包含: - 具体操作(做什么、用什么工具/数据集/框架) - 预期产出(checkpoint、日志、中间结果) 若有 `constraints`(如"单卡 A100"),在 Steps 中体现对应的资源配置。 #### Expected Outcome(预期结果) 必须包含**两种情况**: - **假设成立(Hypothesis Confirmed)**:若 hypothesis 正确,主指标应呈现什么数值趋势?给出定量预期(如"success rate 比 baseline 提升 ≥5%") - **假设不成立(Hypothesis Refuted)**:若 hypothesis 错误,结果会呈现什么模式?此时应如何解读——是放弃 idea、修正 hypothesis、还是设计后续实验? #### Risk & Mitigation(风险与应对) 列举 2-3 个主要风险,每条注明: - 风险描述(什么可能出错) - 发生概率(high / medium / low) - 应对方案(如何规避或补救) 优先纳入 Step 2 中识别的历史失败方向作为风险条目。 ### Step 4:按模板创建实验文件 读取 `Templates/Experiment.md`,以其格式为基础,在 `Experiments/` 目录下创建新文件。 文件命名规则:`Experiments/YYYY-MM-DD-<IdeaTitle>.md`(日期为今天,IdeaTitle 取 idea 的 `title` 字段,去除空格和特殊字符)。 Frontmatter 字段填写: - `title`:实验标题(可与 idea title 相同或更具体) - `idea`:`"[[Ideas/xxx]]"`(关联源 idea) - `tags`:从 idea 继承 - `status`:设为 `planned` - `date_created`:今天日期 正文按 Step 3 的六模块内容填充各 section,具体对应: - `## Objective`:填写来自 hypothesis 的实验目标(1-3 句话) - `## Setup`:从 Variables(控制变量)和 Steps(环境要求)提取 - `## Method`:填写 Steps(执行步骤)和 Baseline - `## Results`:留空(实验完成后由 experiment-track 填写) - `## Analysis`:留空 - `## Insights`:留空 - `## Next Steps`:填写 Expected Outcome 中"假设不成立"情况下的后续路径 在文件末尾额外追加一个 `## Design Notes` 节,包含 Variables 完整设计、Metrics、Expected Outcome(两种情况)、Risk & Mitigation,以保留完整实验设计细节。 ### Step 5:在 Idea 笔记中追加实验链接 用 Edit 在源 Idea 文件(`Ideas/xxx.md`)末尾追加以下格式的链接节: ```markdown ## Experiments - [[Experiments/YYYY-MM-DD-IdeaTitle]] — <一句话说明这个实验验证什么> ``` 若 Idea 文件中已有 `## Experiments` 节,在该节末尾追加新条目,不重建整个节。不修改 idea 的 `hypothesis` 字段或任何其他已有内容。 ### Step 6:追加日志 用 Edit(若文件不存在则先 Write)将以下 log entry 追加到 `Workbench/logs/YYYY-MM-DD.md`: ```markdown ### [HH:MM] experiment-design - **input**: [[Ideas/xxx]] - **output**: [[Experiments/YYYY-MM-DD-IdeaTitle]] - **hypothesis**: <一句话复述 idea 的 hypothesis> - **primary-metric**: <主指标名称> - **key-risk**: <最高优先级风险一句话> - **status**: success ``` 若日志文件不存在,先创建文件(一级标题 `# YYYY-MM-DD`),再追加 entry。 ## Verify - [ ] `Experiments/YYYY-MM-DD-<IdeaTitle>.md` 已创建,frontmatter status 为 `planned` - [ ] Variables(自变量 / 因变量 / 控制变量)均非空 - [ ] Baseline 列举了至少 2 个对比方法 - [ ] Metrics 均为可量化指标(有具体数值定义) - [ ] Expected Outcome 包含假设成立和不成立两种情况 - [ ] 源 Idea 文件已追加实验链接 - [ ] 日志已追加到 `Workbench/logs/YYYY-MM-DD.md` ## Guard - **Metrics 必须可量化**:任何无法直接计算数值的指标必须被拒绝或转化。若无法为某个 hypothesis 找到可量化的 metric,停止执行并告知 Supervisor。 - **不修改源 Idea hypothesis**:`hypothesis` 字段属于 idea-generate / idea-evaluate 的职责范围,experiment-design 只读取,绝不修改。 - **status 校验为硬性前置条件**:若 idea 的 status 不是 `developing` 或 `validated`,立即停止,不执行任何写入操作。告知 Supervisor 当前 status 及建议(如先执行 idea-evaluate)。 - **不伪造历史记忆**:Step 2 的记忆检索若无结果,如实说明,不编造相关历史经验。 - **语言规范**:中文正文 + 英文技术术语(模型名、数据集名、benchmark 名、metric 名保持英文,不翻译)。 ## Examples **示例:为 VLA 相关 idea 设计实验** 假设 Idea 文件为 `Ideas/VLA-GoalConditionedRecovery.md`,其关键字段为: - `status: developing` - `hypothesis`: "在 VLA 策略中引入 goal-conditioned recovery module,可以在 distribution shift 情境下显著减少 task failure" - `tags`: [VLA, robot-learning, recovery] 执行过程: 1. Read `Ideas/VLA-GoalConditionedRecovery.md` — 确认 status=`developing`,提取 hypothesis 和 approach sketch(在 OpenVLA 基础上增加一个轻量 recovery head,输入 current state + goal image,输出 recovery action sequence) 2. 执行 memory-retrieve(scope: effective-methods + failed-directions)— 检索到一条 effective-methods 条目:"reward shaping 在 manipulation task 上比直接 BC 收敛更稳定";检索到一条 failed-directions 条目:"直接 fine-tune 整个 VLA 做 recovery 导致 catastrophic forgetting" 3. 设计六模块方案: **Variables** - 自变量:是否附加 goal-conditioned recovery module(w/ recovery vs. w/o recovery) - 因变量:task success rate、recovery success rate(从 failure state 恢复后完成任务的比例) - 控制变量:base VLA 权重(OpenVLA-7B frozen)、训练数据集(Bridge v2)、随机种子(固定 3 个种子取均值) **Baseline** - `OpenVLA`(`[[Papers/2403-OpenVLA]]`):无 recovery 机制的原始模型,直接对比 - `SayCan + replanning`(`[[Papers/2204-SayCan]]`):基于 LLM replanning 的 failure recovery,代表现有主流方案 **Metrics** - 主指标:task success rate on out-of-distribution perturbation test set(扰动后成功率,%) - 辅助指标:recovery trigger precision(正确识别 failure state 的精度)、extra inference latency(ms/step) **Steps** 1. 在 OpenVLA 基础上添加轻量 recovery head(2 层 MLP),仅 head 参数可训练,base VLA frozen(规避历史失败方向:catastrophic forgetting) 2. 构建 recovery training set:从 Bridge v2 中提取 failure trajectory,标注 recovery action 3. 训练 recovery head,单卡 A100,训练 10 epoch,保存 checkpoint 4. 在 Bridge v2 OOD test split(加入随机扰动)上评估 task success rate 5. 与两个 baseline 在相同 test split 上对比 **Expected Outcome** - 假设成立:w/ recovery 的 task success rate 比 OpenVLA baseline 在 OOD test set 上提升 ≥5%(绝对值),recovery trigger precision ≥ 80% - 假设不成立:若提升 < 2% 或 recovery trigger precision < 60%,说明轻量 head 表达能力不足;下一步应扩大 recovery module(考虑增加 cross-attention 层)或重新审视 failure detection 的 feature 设计 **Risk & Mitigation** - 风险 1:recovery training set 规模不足,head 过拟合(medium)→ 先做数据增强(random crop + color jitter),不足时考虑 synthetic failure generation - 风险 2:OOD test set 与 training distribution 差距过大,base VLA 本身失败率过高掩盖 recovery 效果(medium)→ 分层分析:分别报告 mild / severe OOD 扰动下的指标 - 风险 3:recovery head 增加推理延迟超出实时控制要求(low)→ 提前 profile latency;若超标改用 distillation 压缩 head 4. Read `Templates/Experiment.md` → Write `Experiments/2026-03-28-VLA-GoalConditionedRecovery.md`,填入上述方案,status=`planned` 5. Edit `Ideas/VLA-GoalConditionedRecovery.md` — 追加: ```markdown ## Experiments - [[Experiments/2026-03-28-VLA-GoalConditionedRecovery]] — 验证 goal-conditioned recovery module 在 OOD 扰动下的 task success rate 提升 ``` 6. Edit `Workbench/logs/2026-03-28.md` — 追加 log entry,primary-metric: task success rate on OOD test set,key-risk: recovery training set 规模不足导致过拟合