从「规定工作流程」到「设计智能体环境」
> 随着通用智能体能力的持续提升,自主科学发现的瓶颈正从「规定智能体工作流程」转向「设计智能体环境」。
本文档基于对 EurekAgent 项目的全面审阅,阐述上述论断的含义,以及该项目如何体现这一转向。
---
一、这句话在说什么
旧瓶颈:规定工作流程
典型做法是:拆很多专用角色(文献员、实验员、审稿员)、写死步骤(先 A 再 B 再 C)、为每个领域定制 pipeline。智能体能力弱时,必须靠编排「替它想下一步」。
新瓶颈:设计智能体环境
当 Claude Code 这类通用 CLI 智能体已经能自主读题、写代码、搜网、调试时,再堆 workflow 的边际收益变小。真正决定能否做出 SOTA 的,变成:
- 目标是否被可执行地定义(评什么、怎么比好坏)
- 智能体能否安全、可靠地行动(算力、依赖、提交、反馈)
- 环境是否防 reward hacking、防作弊、防信息泄露
- 多轮探索是否有可恢复的状态与预算
EurekAgent 论文标题 *Agent Environment Engineering is All You Need* 与 README 中的 Environment engineering first,说的正是同一件事。
---
二、EurekAgent 如何体现这一转向
项目架构是「薄编排 + 厚环境」的典型样本。
1. 工作流程刻意做薄
LangGraph 只保留最小闭环:
START -> entry -> prepare -> propose -> implement --+
^ |
+---------- (loop) ----------+
控制器负责:阶段切换、并行 K 路 implement、时间/成本预算、resume、artifact 校验。
不负责:用什么算法、怎么搜文献、怎么写 circle packing 代码——这些交给 off-the-shelf CLI agent + Skills。
README 写得很直白:协调现成 CLI agent 去 propose / implement / iterate,人类介入是可选的。
2. 环境工程做厚
研究者真正要投入的设计,集中在「问题包 + 运行环境」:
| 环境组件 | 作用 |
|---|---|
INSTRUCTION.md / SUBMISSION_FORMAT.md | 定义问题空间与提交契约 |
hidden_eval_dir/evaluate.py | 私有评分器,单一真相来源 |
| 双 Docker 容器(agent / grader) | 智能体看不到、改不了 evaluator |
| Secure grader HTTP 服务 | 分数由服务端写入,智能体只能提交 |
| 工作区目录结构 | inputs/、approach_details/、round_state/ 等构成可观测状态 |
| Hooks + permissions | 防改分、防读密钥、implement 阶段隔离同轮 peer |
| GPU lock 协议 | 资源争用的环境规则,而非 workflow 步骤 |
| Skills(propose / implement / prepare) | 可发现的操作手册,不是硬编码算法 |
| Monitor / TUI / resume | 长跑的可观测性与可恢复性 |
evaluate.py 的 grade_submission 和 is_better,等于定义了这个「科学发现游戏」的奖励函数与比较规则。3. 智能体在环境里「自由探索」,在边界内「被约束」
Implement skill 明确:智能体只在自己的 approach_details/ 里写代码,不能自写 best_result.jsonl;必须通过 eureka_submit.py 走官方 grader。
protect_result_files.py hook 把这条规则变成环境物理定律:改分文件、窥探 peer approach、直接设 CUDA_VISIBLE_DEVICES 都会被 deny。
这不是 workflow 里的「第 7 步调用 grader」,而是环境本身不允许作弊路径存在。
4. 文件系统即状态机 — 环境可验证
artifacts.py 用磁盘 artifact(prepare/complete.json、manifest、best_result.jsonl)驱动路由,而不是控制器解析 agent 的自然语言汇报。
这让 resume、monitor、多轮 ranking 都建立在可机器校验的产出上,而不是「agent 说做完了」。
---
三、更深一层的理解:什么是「环境」
在这个项目里,「环境」至少包含五层,而不只是 Docker:
┌─────────────────────────────────────────────────────────┐
│ 问题层:INSTRUCTION / SUBMISSION_FORMAT / evaluate.py │
├─────────────────────────────────────────────────────────┤
│ 运行时层:Agent + Grader 容器、GPU / venv / MCP 工具 │
├─────────────────────────────────────────────────────────┤
│ 交互协议层:eureka_submit、artifact 契约、Skills │
├─────────────────────────────────────────────────────────┤
│ 治理层:Hooks / permissions、implement 隔离、预算 │
├─────────────────────────────────────────────────────────┤
│ 可观测层:Web monitor、workspace 外的 session 日志 │
└─────────────────────────────────────────────────────────┘
↓
通用 CLI Agent
Workflow 回答:「下一步谁做什么?」
Environment 回答:「在这个世界里,什么行动合法、什么反馈可信、什么算进步?」
EurekAgent 的 propose→implement 循环仍是 workflow,但它极薄;真正承载科学发现能力的是上面五层环境工程。论文主张的转向,正是:workflow 收敛到通用模板,差异化移到环境设计。
---
四、与实验结果的对应关系
README 结果表说明:在 circle packing、Erdős min overlap、TriMul kernel、MLE-Bench 等差异很大的领域,同一套薄 workflow + 不同 evaluate.py / INSTRUCTION.md,就能出 SOTA。
数学任务单次 run API 成本 < $17,也侧面说明:没有为每个任务堆定制 agent 编排,而是靠环境把通用 agent 「接」到问题上。
/generate-inputs skill 进一步把环境搭建产品化:研究者用自然语言描述问题,生成 INSTRUCTION / SUBMISSION_FORMAT / evaluate.py / run.sh——主创作对象从 pipeline 代码变成问题环境包。
---
五、需要保留的 nuance(避免过度解读)
1. Workflow 并未消失,而是被「泛化」了 prepare → propose → implement 仍是固定骨架;变的是各 stage 内部不再微操,而由 Skills + artifact 契约约束。
2. Skills 介于 workflow 与环境之间
它们是注入 workspace 的操作指南(.claude/skills/),更像「环境说明书」而非硬编码节点;但写得好不好,仍影响 agent 行为,属于环境设计的一部分。
3. 环境设计难度被转移,而非消失 README 强调 defensive evaluator 设计(reward hacking、hidden test leakage、score tampering)。瓶颈从「写编排」变成「写好的评分器 + 防作弊 + 资源隔离」——对研究者仍是高门槛,只是门槛类型变了。
4. 仍依赖强 base agent 环境再完善,若 CLI agent 不会写 CUDA kernel、不会读论文,也跑不出 TriMul 结果。这句话成立的前提是「通用智能体能力持续提升」;EurekAgent 是 environment × capable agent 的乘积,不是单靠环境。
5. Controller 仍是必要的「物理定律制定者」 LangGraph、grader server、hooks 不是可有可无的装饰;它们定义了「什么算一次合法实验」。环境设计 ≠ 完全无编排,而是编排退居基础设施,不再承载领域知识。
---
六、总结
> 自主科学发现的竞争点,正从「我设计多聪明的 agent 工作流」转向「我设计多好的 agent 可发现环境」。
EurekAgent 的实证主张是:
- Workflow:固定为 metric-driven 的 propose–implement 循环 + 并行探索 + 预算/resume;足够通用,可跨数学、kernel、ML。
- Environment:问题包(instruction + format + evaluator)+ 安全评分基础设施 + 文件系统状态 + 权限/hooks + 资源协议 + 可观测性;领域知识主要落在这里。
- Agent:commodity(Claude Code 等现成 CLI agent),不绑定特定模型或定制 multi-agent 角色。
对使用者而言,这句话的实践含义是:开一个新科学问题,首要任务是像搭实验室一样搭 EurekAgent 问题目录(尤其 evaluate.py 与 instruction),而不是再写一套 agent 编排。 项目代码结构本身,就是这一论断的物化版本。