Joseph Viviano 分享了他 15 个月来用 coding agent 驱动科研项目的经验总结。核心前提:研究代码库和工程代码库需求不同。
研究代码库的独特需求
必须满足:
- 高可移植性和可复现性——精确反映论文产出的运行过程
- 易理解——让他人快速上手和 hack
- 正确性——测试、文档、注释、代码和论文本身必须精确匹配
- 你自己完全理解其工作方式
不需要:
- 生产级质量
- 面向长期维护或扩展的复杂抽象
- 处理 API 变更、遗留代码路径等用户支持复杂度
核心工作流
paper.tex / design_doc.md(静态意图)
↓
roadmap.md(线性目标)
↓
task_plan.md(细粒度任务,<20% context window)
↓
实现 + 外部验证
↓
notes.md(发现记录)
↓
定期汇总回高层文档
paper.tex / design_doc.md 捕获要解决的问题、使用的方法、项目架构。agent 会从这里抽取大量假设,所以这份文档要仔细审查。
roadmap.md / task_plan.md 将设计文档线性化为具体任务列表。粒度与项目复杂度成正比——小项目可以跳过这层。目的是给每个 agent 一个 well-scoped 的任务,轻松放入 <20% 的 context window。
notes.md 建设过程中的发现:算法怪癖、库限制、集群陷阱、其他代码库的实现研究。这些笔记应定期 compact,只保留尚未编码进代码库的信息。
关键原则
Git 是 Savegame 每个 TODO 单独 commit,清晰 commit message。Agent 使用 git 比任何研究者都专业。让 agent 驱动 git,而不是你自己做。
Plan Agent ≠ Implement Agent 除非任务简单,否则用独立 agent 做计划和实现。这样 implementation agent 只消费相关 planning context 的子集。
独立 Test Agent 测试由未参与实现的独立 agent 编写,减少 test-cheating 可能性。
Worktrees 并行 多个 agent 在单个项目的并行代码副本中工作,用 worktrees 实现。这是研究者几乎不碰的高级 git 工具,但 agent 可以处理复杂度。
Context 管理是核心技能
- Agent 在 100-300k token 范围表现最好,大 context limit 大多是营销谎言
- AGENT.md 只放通用规则,保持简短
- 一个坏 prompt = 一百行坏代码 = 污染代码库 = 未来 session 难以识别
AGENT.md 通用规则示例
- 不要假设:如果指令不清晰,问澄清问题直到消除所有歧义
- 这是研究代码库,修改代码时不要保留静默 fallback,要 fail loudly
- 代码应该对读者显式,简单模式够用就不用复杂工程模式
- 工作时不要删除旧注释,除非底层逻辑变了且注释错误
- 优先可复现性和清晰度,而非聪明设计和效率
- 设计解决方案时对齐 design_doc.md 和 paper.tex 中的高层计划
- TODO.md 中每个 item 单独 commit
成本控制策略
- 不同产品计费方式不同,比较相似任务的 token 消耗
- 管理好 context 就能限制 token 使用
- 用重推理模型(Opus)做计划,用便宜模型(Sonnet)执行 TODO
- 最小化 planning docs 内容,定期 compact 防止 context bloat
- 定期重构简化代码,防止 context 爆炸(现在花钱省以后的钱)
- 频繁重启 chat,但不要太频繁。最佳性能:<40% context 使用率
并行工作流
多个 agent 处理多个并行问题,每个可以有自己的 subagent:
- 代码库安全漏洞扫描 → 不同 subagent 处理不同模块
- 并行 stream 通过代码库状态和定期更新的 notes.md / plans.md 同步 context
验证策略
AI 在能验证自己做对了时表现最好。理想情况:有可执行测试确保代码正确。
- 独立 test agent + code agent 分离
- Linting、typing、docstrings、assertions 帮助验证代码匹配意图
- 敏感操作(数据库迁移、大文件系统操作)让 agent 输出脚本,你手动验证后执行
论文与代码对齐
研究过程中发现和偏差必然发生。让 agent 做 thorough analysis:
"请分析方法部分和结果部分,与开发的代码库对比。用 subagent 并行工作。确保所有方法细节都在论文中捕获,所有结果都来自论文描述的方法,注意数学实现中的细微偏差。不要直接编辑论文,我们先逐个诊断偏差再决定修复。"
新标准的建立
社区应该提高对「可接受研究代码」的标准:
- 项目从 project plan 开始,最终成为论文本身。design_doc.md 与代码库应有深度连接
- Typing、Comments、Docstrings、Variable Names 不仅帮助 coding agent,也帮助下游用户理解论文如何在代码中反映
- Testing 是 coding agent 的有用约束,也让你对结果有信心
- Thorough Demonstrations 现在可以单次 sitting 完成,帮助读者交互式理解
Warm Start
永远不要从零开始。如果不用 fork,可以提供参考代码库指导方法细节或架构。也可以从 "stubs" 开始——函数/类签名提供高层架构结构,代码细节留空。
练习建议
想练习 agent 驾驭能力?建一个 3D 游戏引擎。比研究代码库复杂 10 倍,需要精确描述行为(不容易编码为测试)、playtest 验证结果。这能锻炼写精确 spec、管理 context、设计验证策略的能力。
Joseph 正在现代化一个经典游戏,这是他以前做梦都不敢在职业生涯之外追求的项目——agent 让这成为可能。