sia
自改进AI框架,通过协调Meta-Agent、Target Agent和Feedback Agent形成闭环,自动优化任何AI系统在基准任务上的表现。亮点:在LawBench、GPU内核优化、单细胞RNA降噪等任务上分别取得56.6%、91.9%和502%的提升,且具备可视化仪表板和自定义任务支持。研究向,代码开源(MIT许可),有arXiv论文支撑。
README
SIA(自我改进AI)
SIA: Self Improving AI with Harness & Weight Updates(Hebbar 等人,2026)的官方实现——一个自我改进循环,其中语言模型代理同时更新任务特定代理的 harness(框架)和权重。论文报告在 LawBench 上获得 56.6% 的提升,GPU 内核运行时减少 91.9%,单细胞 RNA 去噪相对于基线提升 502%。
SIA 是一个自我改进 AI 框架,用于自主提升任何 AI 系统(模型/代理)在基准任务上的性能。
只想试试? 跳到在本地运行 SIA。
介绍视频
架构

Meta、Target 和 Feedback 代理在连续轮次间的控制流。
SIA 通过协调三种主要类型的 AI 代理来运作,这些代理共同工作以持续提升任务性能:
术语表
- 元代理(Meta-Agent):读取任务描述并生成一个针对该任务定制的初始目标代理(Target Agent)。
- 目标/任务特定代理(Target/Task Specific Agent):尝试完成任务并记录其动作和结果。
- 反馈/改进代理(Feedback/Improvement Agent):审查目标代理的性能日志,识别改进点,并相应更新目标代理。
这一迭代过程允许系统自主地精炼和增强其解决科学任务的能力。
基准测试结果

OpenAI MLE-Bench Hard:一系列真实的 Kaggle 机器学习竞赛,代理必须编写、运行并迭代完整的机器学习流水线。SIA 在所有测试的生成轮次中排名第一。

LawBench:根据中国法院案件描述预测刑事罪名,涵盖 191 个罪名类别。SIA-W+H 达到 70.1% 的 Top-1 准确率,超越之前 45% 的 SOTA。

AlphaFold-3 TriMul Triton 内核:将 Triangle Multiplicative Update 实现并优化为 Triton 内核,保持正确性同时达到 H100 延迟目标。SIA-W+H 相对于基线实现 14 倍加速。

scRNA-seq 去噪:在单细胞 RNA 测序数据中插补缺失的基因表达值。SIA-W+H 得分为 0.289 MSEnorm,超越之前 0.220 的 SOTA。
在本地使用内置任务运行 SIA
SIA 内置四个任务:gpqa、lawbench、longcot-chess、spaceship-titanic。
安装
选择与你想要运行的 LLM 匹配的代理实现(agent impl)。
Claude 代理实现(仅限 Claude Agent SDK,Claude 模型):
python3 -m venv .venv && source .venv/bin/activate
pip install 'sia-agent[claude]'
export ANTHROPIC_API_KEY="..."
OpenHands 代理实现(多提供商——Gemini、OpenAI、Anthropic 等):
python3 -m venv .venv && source .venv/bin/activate
pip install 'sia-agent[openhands]'
# 导出你将使用的提供商密钥:
export ANTHROPIC_API_KEY="..." # 用于 anthropic/* 模型
export GEMINI_API_KEY="..." # 用于 gemini/* 模型(或 GOOGLE_API_KEY)
export OPENAI_API_KEY="..." # 用于 openai/* 模型
完整的提供商/模型参考:docs/configuration.md。
运行
CLI 有两个子命令:sia run(自我改进循环)和 sia web(运行可视化器,见可视化运行)。
sia run --task gpqa --max_gen 5 --run_id 1
将 --task 替换为四个内置任务中的任意一个。(sia --task ... 不加 run 子命令仍可工作,被视为 sia run ...。)
工件保存在 runs/run_{run_id}/gen_{n}/ 中:
target_agent.py— 该轮次的代理agent_execution.json— 执行日志improvement.md— 差异说明(第 2 轮及之后)
在运行进行时,一个实时仪表盘会在 http://127.0.0.1:8000 自动启动(需要 web 附加组件;使用 --no-web 禁用)。
常用标志(sia run)
| 标志 | 默认值 | 描述 |
|---|---|---|
--task |
— | 内置任务名称(与 --task_dir 互斥) |
--task_dir |
— | 外部任务目录的路径 |
--max_gen |
3 | 自我改进轮次数量 |
--run_id |
1 | 唯一运行标识符 |
--meta-agent-profile |
default-meta |
元/反馈代理的配置文件(名称或 .json 路径) |
--target-agent-profile |
default-target |
目标代理的配置文件(名称或 .json 路径) |
--no-web |
off | 运行时不自动启动实时仪表盘 |
--web-port |
8000 | 实时仪表盘的端口(--web-host 更改绑定主机) |
每个代理的模型、代理实现和提供商来自一个配置文件(见下文)。例如,使用 Nebius 上的 Kimi-K2.6 作为目标模型进行评估:
export NEBIUS_API_KEY="..." # + 用于默认元代理的 ANTHROPIC_API_KEY
sia run --task gpqa --target-agent-profile kimi-nebius-target --max_gen 5 --run_id 2
完整的代理实现、模型和 API 密钥参考:docs/configuration.md。遇到问题?docs/troubleshooting.md。
可视化运行
一个内置的 web 仪表盘渲染 runs/ 下的所有内容:每轮的目标代理代码(语法高亮)、元/反馈提示、改进计划、评估分数(带有跨轮次准确率图表和按领域细分)、执行轨迹和日志。
sia web # 在 http://127.0.0.1:8000 提供 ./runs 服务
sia web --runs-dir ./runs --port 8080
它也会在 sia run 时自动启动(使用 --no-web 禁用),因此你可以实时观察轮次生成。
| 标志 | 默认值 | 描述 |
|---|---|---|
--runs-dir |
./runs |
要可视化的运行目录 |
--host |
127.0.0.1 |
绑定主机 |
--port |
8000 | 绑定端口 |
--no-browser |
off | 不自动打开浏览器窗口 |
编写你自己的配置文件
提供商是一个端点 + 凭据;配置文件配置一个代理角色。元代理配置文件绑定 (agent_impl, model, provider);目标代理配置文件绑定 (model, provider, agent_reference)。两者都是 JSON 文件——内置默认值位于 sia/defaults/{providers,profiles}/,你可以将自己的文件放在 ./providers/ 和 ./profiles/ 下(或设置 $SIA_PROVIDERS_DIR / $SIA_PROFILES_DIR)。无需修改代码。
mkdir -p providers profiles
// providers/my-endpoint.json — 一个与 OpenAI 兼容的提供商
{
"provider_id": "my-endpoint",
"name": "My Endpoint",
"client_kind": "openai", // anthropic | openai | google
"base_url": "https://api.example.com/v1",
"api_key_env": "MY_ENDPOINT_API_KEY"
}
// profiles/my-target.json — 目标代理的模型 + 提供商 + 参考
{
"profile_id": "my-target",
"name": "My model on My Endpoint",
"model": "vendor/my-model",
"provider_id": "my-endpoint", // 引用上面的提供商
"agent_reference": "default" // "default" = 任务包的参考;
// 或 { "source": "./my_agent_dir/", "entrypoint": "main.py" }
}
export MY_ENDPOINT_API_KEY="..."
sia run --task gpqa --target-agent-profile my-target // 按名称(解析 ./profiles/my-target.json)
sia run --task gpqa --target-agent-profile ./profiles/my-target.json // 或显式路径
agent_reference 是元代理开始的种子,也是反馈代理改进的对象:"default" 使用任务包捆绑的参考,或者通过 { "source": "./my_agent.py" }(单个文件)或 { "source": "./dir/", "entrypoint": "main.py" }(一个多文件目录,代理使用其工具读取)提供你自己的参考。目录参考中的 requirements.txt 会在每轮生成时安装。
要在其他地方运行元/反馈代理,给元配置文件指定不同的 agent_impl(openhands 或 pydantic-ai)并通过 --meta-agent-profile 传递。claude 代理实现仅限 Anthropic。参见 docs/configuration.md 获取完整架构和更多示例。
引入你自己的任务
准备一个任务目录,布局如下,并将 --task_dir 指向它:
my-task/
├── data/
│ ├── public/
│ │ ├── task.md # 任务描述 — SIA 读取此文件
│ │ └── ... # 允许代理看到的输入
│ └── private/ # 保留的评估数据;从不暴露给代理
└── reference/
├── reference_target_agent.py # 模板;从 sia/tasks/_shared/ 复制
└── SAMPLE_TASK_DESCRIPTIONS.md # 可选:用于元代理的示例任务
sia run --task_dir ./my-task --max_gen 5 --run_id 1
或者引入 MLE-Bench 比赛。 SIA 可以直接从任何 MLE-Bench 比赛引导一个任务目录——它会通过 Kaggle API 拉取数据集,设置 public/private 分割,并放入参考代理模板:
python -m sia.prepare_mlebench_dataset -c "spaceship-titanic"
sia run --task_dir ./tasks/spaceship-titanic --max_gen 5 --run_id 1
两种路径的完整分步指南:docs/walkthrough.md。
评估
每轮之后,编排器自动对目标代理进行评分,并将结果输入下一轮的反馈提示中——这是自我改进循环优化的信号。
- 目标代理将其输出写入该轮目录(例如
gen_1/submission.csv)。 - 编排器运行任务的评估器:
python evaluate.py --gen-dir gen_1/。 evaluate.py根据data/private/中的保留真实数据对输出评分,并写入gen_1/results.json(或evaluation_results.json)。- 这些指标会注入到反馈提示中,并显示在
context.md和 web 仪表盘(跨轮次准确率图表、按领域细分)中。
四个内置任务已自带评估器。对于自定义任务,将一个暴露 evaluate() 函数的 evaluate.py 放入 data/public/——它决定提交格式,与 data/private/ 比较,并返回一个指标字典。在完整运行前单独测试它:
python my-task/data/public/evaluate.py --gen-dir runs/run_1/gen_1 # 应该写入 results.json
完整约定、返回格式规则及完整示例:EVALUATION_GUIDE.md。
深入阅读
- docs/architecture.md — 目录布局、生成流程、提示定制
- docs/walkthrough.md — 详细的自定义任务指南
- docs/configuration.md — 代理实现、模型、API 密钥、CLI 参考
- EVALUATION_GUIDE.md — 为自定义任务编写
evaluate.py - docs/troubleshooting.md — 常见错误和修复
引用
如果你在研究中使用 SIA,请引用:
@article{hebbar2026sia,
title = {SIA: Self Improving AI with Harness \& Weight Updates},
author = {Hebbar, Prannay and Manawat, Yogendra and Verboomen, Samuel and Ivanova, Alesia and Palanimalai, Selvam and Bhatia, Kunal and Baskaran, Vignesh},
journal = {arXiv preprint arXiv:2605.27276},
year = {2026},
url = {https://arxiv.org/abs/2605.27276}
}