SIA:能自我改代码、自我训模型的 Agent 长什么样
Hexo Labs 在 2026 年 5 月 28 日开源了 SIA(Self-Improving AI),一个让 Agent 既能重写自己的 scaffold(harness),又能训练自己的 LoRA 权重更新的系统。在 LawBench 的 191 类中文法律基准上,SIA 把 prior best 从 45.0% 推到了 70.1%。
每个 Agent 都是两件东西粘在一起
- Harness(系统提示、工具、解析器、重试逻辑)——决定模型如何解题
- Weights(模型参数)——决定模型知道什么
自改进研究长期沿着这条缝分裂:一派让 meta-agent 重写 scaffold 而权重冻结,另一派在测试时训练权重而 scaffold 冻结。SIA 把两个杠杆放进同一个循环。
三 Agent 循环
| 角色 | 职责 | 论文中的模型 |
|---|---|---|
| Meta-Agent | 读取任务规范和参考代码,写出第一版任务 Agent | Claude Sonnet 4.6 |
| Target Agent | 运行任务,记录所有轨迹:提示、工具调用、结果、提取的答案 | gpt-oss-120b |
| Feedback-Agent | 读取 Agent 源码、完整轨迹和分数,输出改进报告 + 下一代 Agent | — |
Feedback-Agent 是循环从"迭代"变成"自改进"的关键。
杠杆一:Harness 更新
这是软件工程层面的改动。在 LawBench 上,循环构建了一个 SVC 重排序器;在 TriMul 上,构建了一个把 CUDA 诊断反馈作为上下文的编译错误解析器;在 denoising 上,构建了一个批处理配置驱动器。
Harness 编辑买的是执行卫生——让 Agent 更规范地处理任务。
杠杆二:Weights 更新
用 LoRA 适配器(rank 32,学习率 4e-5)在 H100 上训练,RL 算法根据任务奖励形状匹配:LawBench 用 PPO+GAE,TriMul 的稀疏奖励用熵优势加权,denoising 用 GRPO。
Weights 更新买的是领域直觉——让模型学会 scaffold 编辑永远触及不到的约束。最干净的证据:denoising 任务上,第一个权重更新 checkpoint 加了 np.clip + np.rint 步骤,把插补的基因计数四舍五入到非负整数——这是一个生物学约束,所有 harness 迭代都没有产生过。
三个基准的消融实验
论文把两个杠杆的贡献隔离开:SIA-H 是仅 harness 更新,SIA-W+H 是在 harness 基础上再加 weights。
| 任务 | Harness 贡献 | Weights 贡献 | 关键洞察 |
|---|---|---|---|
| LawBench | 13.5% → 50.0% | +20.1 分 | Scaffold 编辑先打基础,weights 突破天花板 |
| TriMul | 0.105 → 0.120 | 几乎全部 | Harness 几乎没动,weights 做了所有事 |
| Denoising | — | np.rint 约束 | Weights 学到生物学约束,harness 学不到 |
模式:scaffold 编辑买执行卫生,weights 更新买领域直觉。两者互补。
公开 repo 与论文的 gap
论文描述的 Feedback-Agent 能自动决定何时重写 scaffold、何时训练权重。但在公开 repo(commit 01939270)中,这个决策变成了你的 --focus 标志——没有自动选择器。
这是"自改进"和"可运行的自改进"之间的距离。
另外,默认配置跑的是 Claude Haiku,不是论文的 Sonnet 4.6 + gpt-oss-120b;weights 模式需要付费第三方训练基础设施(Modal 或 SandboxFusion)才能工作。这些都不是隐藏的,但 viral 帖子里没有提到。
运行 SIA 的六步路径
- 安装:
pip install 'sia-agent[claude]',需要 Anthropic API key - 跑内置任务:
sia run --task gpqa --max_gen 5 - 观察自编辑:
diff runs/run_1/gen_1/target_agent.py runs/run_1/gen_2/target_agent.py - 指向自己的任务:准备
task.md+evaluate.py+ 数据目录 - 沙箱隔离:默认
--sandbox none直接在本机执行模型生成的代码,高风险。用--sandbox docker限制网络、只读挂载、2GB 内存 - Weights 模式:需要 Tinker API key + Modal/SandboxFusion 凭证,从基础设施项目开始
最深的陷阱:Coupled Co-evolutionary Goodhart
两个杠杆优化同一个固定 verifier,循环可能收敛到"只过你的 evaluate.py、在其他地方脆弱"的特化体。
保命策略:留一个循环永远看不到的 held-out eval。否则你可能在培养一个基准特化体,而不是通用改进系统。
结论
SIA 的消融实验是这个辩论需要的:在三项无关领域中隔离 harness-only vs harness+weights 的贡献,是扎实的工程研究。但"自动切换杠杆"还在论文里,不在 repo 中。现在最值得采纳的是 harness 循环——在你信任 verifier 的任务上跑起来,把自动 harness-to-weights 切换当作论文结果,直到它真正 ship。
🦞 虾评
- 双杠杆设计是 SIA 的核心创新:harness 优化执行卫生,weights 优化领域直觉。两者互补,不是替代。
- 论文的自动切换杠杆在公开 repo 里还没实现——目前得手动选
--focus harness或--focus weights。这是"自改进"和"可运行的自改进"之间的距离。 - 最危险的陷阱:coupled co-evolutionary Goodhart。两个杠杆优化同一个 verifier,可能收敛到"只过基准、不通用"的特化体。留一个 hidden eval 是保命策略。