研究状态
AutoResearch 把所有研究状态持久化在磁盘上。这是系统最核心的设计决策之一 — context 会清空,但磁盘不会。
目录结构
.omc/research/
├── pipeline.yaml # 流水线配置(阶段定义、gate 类型)
├── status.yaml # 当前 Pipeline Status
├── contract.md # Research Contract(claim-evidence 契约)
├── ideas/
│ ├── idea-001.md # 候选 idea 卡片
│ ├── idea-002.md # 每个 idea 独立文件
│ └── scores.yaml # Judge 评分记录
├── experiments/
│ ├── exp-001.yaml # 实验配置
│ ├── exp-001-results.md # 实验结果
│ └── baselines.yaml # Baseline 记录
├── training/
│ ├── runs.yaml # 训练运行记录
│ ├── monitoring.yaml # 监控配置
│ └── checkpoints.yaml # Checkpoint 追踪
├── paper/
│ ├── outline.md # 论文大纲
│ ├── sections/ # 各章节草稿
│ └── reviews/ # 审稿意见和修改记录
└── findings.md # 跨阶段关键发现每个文件的作用
status.yaml — 项目仪表盘
这是编排器每次启动时第一个读的文件。它记录了项目的完整状态:
yaml
stage: training
idea: "基于对比学习的细粒度特征解耦"
contract: contract.md
current_branch: feature/contrastive-decouple
baseline: "CUB-200 acc=87.3(base paper 86.8)"
training_status:
server: ic2
gpus: [0, 1, 2]
tmux: train-exp03
wandb_run: abc123def
started: "2025-03-15T14:30:00Z"
next: "等待训练完成,预计 18h"必须及时更新
编排器在每次状态变化时必须立即更新 status.yaml。这是新 session 恢复的唯一依据。
contract.md — Claim-Evidence 契约
这是整个研究的"合同"。一旦确定,所有后续工作都围绕它展开:
markdown
# Research Contract
## Claim
我们的方法通过对比学习解耦细粒度特征,在不增加推理开销的前提下
提升细粒度识别精度。
## Evidence Required
1. CUB-200 数据集上 top-1 accuracy 超过 base paper (86.8%)
2. 推理 FLOPs 不超过 base paper 的 110%
3. 消融实验证明解耦模块的贡献
## Base Paper
- 论文: "Fine-Grained Recognition via ..." (CVPR 2024)
- 代码: github.com/xxx/fine-grained-baseline
- 我们的实验 setting 与其完全一致
## Non-Goals
- 不追求 SOTA(只需证明方法有效)
- 不做多数据集泛化实验(除非审稿人要求)findings.md — 过程发现
跨阶段的关键发现,最新的在前面。这不是实验日志 — 只记录会影响决策的发现:
markdown
# Findings
## 2025-03-16: 学习率 warmup 关键
发现对比损失在前 500 步极不稳定。加 linear warmup 后训练稳定。
已调整 training config。
## 2025-03-15: Base paper 代码有 bug
base paper 的 data augmentation 代码在 resize 后没有归一化。
修复后 baseline 精度从 85.1% 提升到 86.8%(与论文一致)。ideas/ — Idea 管理
每个候选 idea 是一张卡片:
markdown
# Idea Card: contrastive-decouple
## 一句话
通过对比学习让模型自动解耦共性特征和判别性特征
## Base Paper
- 论文: xxx (CVPR 2024)
- GitHub: github.com/xxx
- 代码已确认可用 ✓
## 预估资源
- 模型: ResNet-50 (~25M params)
- 数据: CUB-200 (5994 train / 5794 test)
- GPU: 2×A5000, 约 8h
- 在 24h 预算内 ✓
## Judge 评分
feasibility: 8/10
novelty: 6/10
significance: 7/10
overall: goexperiments/ — 实验记录
已完成实验的正式记录。与 findings.md 的区别:findings 记过程,experiments 记结论。
yaml
# exp-001.yaml
name: "baseline reproduction"
method: "原封不动跑 base paper 代码"
config:
model: resnet50
dataset: CUB-200
epochs: 100
lr: 0.01
batch_size: 32
gpus: 2
server: ic2
wandb_run: baseline_001两层信息架构
| 层 | 载体 | 特点 | 用途 |
|---|---|---|---|
| 工作记忆 | Context 窗口 | 快速、有限、易失 | 当前任务执行 |
| 长期记忆 | .omc/research/ | 持久、无限、可追溯 | 跨 session 状态 |
规则
- 任何需要跨 session 存在的信息 → 写磁盘
- Agent 返回一行摘要到 context,详细结果写磁盘
- 新 session 从磁盘重建状态,不依赖 context 历史
Context 满了怎么办
当 context 接近容量限制时:
- 不要慌 — 所有重要状态都在磁盘上
- 编排器自动触发 compact — 把当前上下文压缩为摘要
- 如果需要新 session,写
HANDOFF.md记录交接信息 - 新 session 读取 status.yaml + contract.md + HANDOFF.md 即可恢复
markdown
# HANDOFF.md(新 session 交接文件)
## 当前进度
- Stage: training
- 实验 exp-003 正在 ic2 上训练,tmux=train-exp03
- 预计还需 6h 完成
## 下一步
1. 检查 tmux 和 wandb 状态
2. 训练完成后进入 analysis 阶段
3. 重点关注 CUB-200 上的 top-1 accuracy
## 需要注意
- 学习率 warmup 已修复(见 findings.md 2025-03-16)
- baseline 精度是 86.8%,不是论文最初报告的 85.1%恢复流程
新 session 启动时:读 status.yaml → 读 contract.md → 读 HANDOFF.md(如果存在)→ 检查远程训练状态 → 继续。整个过程不需要前一个 session 的 context 历史。