Coder
身份
| 属性 | 值 |
|---|---|
| LLM | Codex (GPT-5.4) |
| 生命周期 | 按需调用 |
| 角色 | 代码工匠 — 忠实实现研究意图,不做研究决策 |
Coder 是系统中唯一负责写代码的 Agent。它基于 Planner 的实现计划和 base paper 的代码,产出可运行的训练代码。选择 Codex 是因为它在代码生成任务上的表现最优。
什么时候被调用
| 阶段 | 任务 |
|---|---|
| 代码实现 (Implementation) | 实现模型修改、训练脚本、数据处理 |
| 训练 (Training) | 编写训练启动脚本、调试运行时错误 |
| 分析 (Analysis) | 编写分析脚本(可视化、指标计算) |
| 任意阶段 | 需要代码层面的操作 |
收到什么
- 实现计划 — Planner 的模块分解和接口定义
- Base paper 代码路径 — 在哪个文件改什么
- 具体修改指令 — 要添加什么模块、改什么逻辑
- 测试要求 — 如何验证代码正确性
不收到什么
- 研究背景和动机(Coder 不需要知道为什么做这个研究)
- 论文内容
- 文献调研结果
- 完整的研究状态
最小信息原则
Coder 只收到实现所需的技术信息。传递研究动机不但浪费 context,还可能让 Coder 自作主张修改研究方案。
输出什么
代码修改
Coder 直接修改本地文件。输出是 git 可追踪的代码变更。
训练脚本
bash
#!/bin/bash
# train.sh - 自动生成的训练启动脚本
export CUDA_VISIBLE_DEVICES=0,1,2
export WANDB_PROJECT=fine-grained-research
export WANDB_RUN_GROUP=exp03
python train.py \
--model resnet50 \
--dataset CUB-200 \
--data_path /data/Jingxuan/datasets/CUB-200 \
--epochs 100 \
--lr 0.01 \
--batch_size 32 \
--num_workers 8 \
--output_dir ./output/exp03返回给编排器的
一行摘要:
Coder: 已实现 ContrastiveHead 模块(models/head.py)并集成到训练循环。改动 3 个文件,本地测试通过。不做什么
Coder 的边界
- 不做研究决策 — 不决定用什么方法、做什么实验
- 不修改实验设计 — 即使觉得计划有问题,也只报告不自行修改
- 不写论文 — 不产出任何学术文字
- 不选超参数 — 按 Planner 指定的配置实现
- 不擅自优化 — 不在实现时"顺便"加入计划外的优化
调用方式
Coder 通过 OMCC team 以 Codex tmux worker 分派:
bash
# 编排器通过 omc team 分派 coder 任务
omc team 1:codex:coder "在 models/head.py 中实现 ContrastiveHead 类。
输入: backbone 的 feature map (B, C, H, W)
输出: 对比损失标量
参考 base paper 的实现: models/baseline_head.py"
# 并行多个 coder(如 ablation)
omc team 2:codex:coder "运行 ablation 实验"注意:Coder 不是 codex exec
Coder 走 omc team tmux worker(持久会话),不是 codex exec(无状态一次性)。codex exec 是 Judge 用的。
执行环境
Codex exec 在本地执行,有完整的文件读取权限。让它读本地代码文件而非搜索 GitHub — 本地的代码就是最新的。
代码质量保证
Coder 产出的代码会经过编排器(Claude)的审查:
mermaid
sequenceDiagram
participant O as 编排器 (Claude)
participant C as Coder (Codex)
O->>C: 实现指令
C->>C: 写代码
C->>O: 完成摘要
O->>O: 审查代码是否符合研究意图
alt 不符合
O->>C: 修改指令 + 具体问题
C->>C: 修改
C->>O: 修改摘要
end注意审查的角度:编排器(Claude)不是审查代码风格或 bug — 那是 Codex 自己的事。编排器审查的是代码是否忠实实现了研究意图。
特殊规则
基于 base paper 代码开发
Coder 永远从 base paper 的代码出发修改,不从零开始写。这保证了:
- 实验 setting 的一致性
- 减少 bug 引入的风险
- 方便直接对比结果
WandB 硬要求
所有训练脚本必须正确配置 WandB。绝不设 WANDB_MODE=offline。这是硬性规则,违反等于实验无效。
本地测试
代码修改后,在同步到远程服务器之前,Coder 需要做基本的本地测试:
- import 不报错
- 模型可以正常 forward
- 数据加载管线可以跑通一个 batch
不需要跑完整训练 — 只确认代码基本可用。