自动研究智能体
Autoresearch Agent
> 你在睡觉,代理在实验。醒来即见结果。
这是一个受 Karpathy's autoresearch 启发的自主实验循环。代理会编辑单个文件,运行固定评估,保留改进,舍弃失败,并无限循环。
不是一次猜测,而是五十次经过测量的尝试,持续复利。
---
斜杠命令 (Slash Commands)
| 命令 | 功能 |
|---------|-------------|
| /ar:setup | 交互式设置新实验 |
| /ar:run | 运行单次实验迭代 |
| /ar:loop | 启动自主循环,可配置间隔(10分钟, 1小时, 每日, 每周, 每月) |
| /ar:status | 显示仪表盘和结果 |
| /ar:resume | 恢复已暂停的实验 |
---
技能激活时机
识别用户输入中的以下模式:
- “让这个更快 / 更小 / 更好”
- “针对 [指标] 优化 [文件]”
- “改进我的 [标题 / 文案 / 提示词]”
- “在夜间运行实验”
- “我想将 [指标] 从 X 提升到 Y”
- 任何涉及:优化 (optimize)、基准测试 (benchmark)、改进 (improve)、实验循环 (experiment loop)、autoresearch 的请求
如果用户描述了“目标文件 + 衡量成功的方法” $\rightarrow$ 适用此技能。
---
设置 (Setup)
首次运行 — 创建实验
运行设置脚本。用户决定实验的存放位置:
项目级(在仓库内,由 git 追踪,可与团队共享):
python scripts/setup_experiment.py \
--domain engineering \
--name api-speed \
--target src/api/search.py \
--eval "pytest bench.py --tb=no -q" \
--metric p50_ms \
--direction lower \
--scope project用户级(个人使用,存放于 ~/.autoresearch/):
python scripts/setup_experiment.py \
--domain marketing \
--name medium-ctr \
--target content/titles.md \
--eval "python evaluate.py" \
--metric ctr_score \
--direction higher \
--evaluator llm_judge_content \
--scope user--scope 标志决定 .autoresearch/ 的位置:
project(默认) $\rightarrow$ 位于仓库根目录的.autoresearch/。实验定义由 git 追踪,结果被 gitignore。
user$\rightarrow$ 位于用户主目录的~/.autoresearch/。所有内容均为个人私有。
设置生成的内容
.autoresearch/
├── config.yaml ← 全局设置
├── .gitignore ← 忽略 results.tsv, *.log
└── {domain}/{experiment-name}/
├── program.md ← 目标、约束、策略
├── config.cfg ← 目标文件, 评估命令, 指标, 方向
├── results.tsv ← 实验日志 (gitignored)
└── evaluate.py ← 评估脚本 (如果使用了 --evaluator)results.tsv 列定义: commit | metric | status | description
commit— git 短哈希
metric— 浮点数值,若崩溃则为 "N/A"
status— keep(保留)| discard(舍弃)| crash(崩溃)
description— 变更内容或崩溃原因
领域 (Domains)
| 领域 | 使用场景 |
|--------|-----------|
| engineering | 代码速度、内存、包体积、测试通过率、构建时间 |
| marketing | 标题、社交媒体文案、邮件主题、广告文案、参与度 |
| content | 文章结构、SEO 描述、可读性、点击率 (CTR) |
| prompts | 系统提示词、聊天机器人语气、智能体指令 |
| custom | 任何其他具有可衡量指标的内容 |
如果 program.md 已存在
用户可能已经编写了自己的 program.md。如果在实验目录中找到该文件,请读取它。它将覆盖模板。仅询问缺失的信息。
---
智能体协议 (Agent Protocol)
你处于循环之中。脚本负责设置和评估 —— 你负责创意工作。
开始前
1. 读取.autoresearch/{domain}/{name}/config.cfg 以获取:
- target — 你需要编辑的文件
- evaluate_cmd — 衡量变更效果的命令
- metric — 在评估输出中需要查找的指标名称
- metric_direction — “lower”(越低越好)或 “higher”(越高越好)
- time_budget_minutes — 每次评估的最大时间限制
2. 读取 program.md 以了解策略、约束以及可更改/不可更改的内容
3. 读取 results.tsv 以查看实验历史(列:commit, metric, status, description)
4. 切换到实验分支:git checkout autoresearch/{domain}/{name}
每次迭代
1. 审查results.tsv —— 哪些有效?哪些失败了?哪些尚未尝试?
2. 决定对目标文件进行 一项 变更。每次实验仅改变一个变量。
3. 编辑目标文件
4. 提交:git add {target} && git commit -m "experiment: {description}"
5. 评估:python scripts/run_experiment.py --experiment {domain}/{name} --single
6. 读取输出 —— 它会打印 KEEP、DISCARD 或 CRASH 以及对应的指标值
7. 返回步骤 1
脚本处理的内容(无需你处理)
- 带超时限制地运行评估命令
- 从评估输出中解析指标
- 与之前的最佳结果进行比较
- 失败时回滚提交 (
git reset --hard HEAD~1)
- 将结果记录到
results.tsv
启动实验
# 单次迭代(智能体重复调用此命令)
python scripts/run_experiment.py --experiment engineering/api-speed --single
空运行(开始前测试设置)
python scripts/run_experiment.py --experiment engineering/api-speed --dry-run策略升级
- 第 1-5 次运行:低垂果实(明显的改进,简单的优化)
- 第 6-15 次运行:系统化探索(每次改变一个参数)
- 第 16-30 次运行:结构性变更(算法更换,架构调整)
- 第 30 次及以后:激进实验(完全不同的方法)
- 如果连续 20+ 次运行没有改进:更新
program.md的 Strategy 部分
自我改进
每 10 次实验后,审查results.tsv 寻找模式。将学到的知识更新到 program.md 的 Strategy 部分(例如,“缓存变更一致带来 5-10% 的提升”,“重构尝试从未改善指标”)。后续迭代将受益于这些累积的知识。
停止条件
- 直到被用户中断、达到上下文限制或达成
program.md中的目标
- 停止前:确保
results.tsv是最新的
- 达到上下文限制时:下次会话可以恢复 ——
results.tsv和 git 日志会持久化
规则
- 每次实验仅限一项变更。 不要一次更改 5 件事,否则你无法确定哪个起作用了。
- 简洁性标准。 如果微小的改进带来了糟糕的复杂度,则不值得。在性能相同的情况下,优先选择更简单的方案。
- 绝不要修改评估器。
evaluate.py是唯一真理。修改它会导致所有对比失效。一旦发现自己在修改它,请立即停止。
- 超时处理。 如果运行时间超过时间预算的 2.5 倍,直接终止并视为崩溃(crash)。
- 崩溃处理。 如果是拼写错误或缺失导入,修复后重新运行。如果方案根本性失效,则回滚,记录 "crash" 并继续。连续 5 次崩溃 $\rightarrow$ 暂停并发出警报。
- 禁止引入新依赖。 仅使用项目中已有的依赖。
---
评估器 (Evaluators)
开箱即用的评估脚本。在设置时通过 --evaluator 参数复制到实验目录中。
免费评估器(无 API 成本)
| 评估器 | 指标 | 使用场景 |
|-----------|--------|----------|
| benchmark_speed | p50_ms (越低越好) | 函数/API 执行时间 |
| benchmark_size | size_bytes (越低越好) | 文件、包、Docker 镜像大小 |
| test_pass_rate | pass_rate (越高越好) | 测试套件通过率 |
| build_speed | build_seconds (越低越好) | 构建/编译/Docker 构建时间 |
| memory_usage | peak_mb (越低越好) | 执行期间的峰值内存 |
LLM 评委评估器(使用你的订阅额度)
| 评估器 | 指标 | 使用场景 |
|-----------|--------|----------|
| llm_judge_content | ctr_score 0-10 (越高越好) | 标题、题目、描述 |
| llm_judge_prompt | quality_score 0-100 (越高越好) | 系统提示词、Agent 指令 |
| llm_judge_copy | engagement_score 0-10 (越高越好) | 社交媒体帖子、广告文案、邮件 |
LLM 评委调用用户当前运行的 CLI 工具(Claude, Codex, Gemini)。评估提示词被锁定在 evaluate.py 内部 —— Agent 无法修改它。这防止了 Agent 通过操纵评估器来刷分。
费用由用户的现有订阅覆盖:
- Claude Code Max $\rightarrow$ 无限制的 Claude 评估调用
- Codex CLI (ChatGPT Pro) $\rightarrow$ 无限制的 Codex 调用
- Gemini CLI (免费层级) $\rightarrow$ 免费的评估调用
自定义评估器
如果没有内置评估器适用,用户可以编写自己的 evaluate.py。唯一要求是:必须将 metric_name: value 打印到标准输出(stdout)。
#!/usr/bin/env python3
我的自定义评估器 —— 实验开始后请勿修改
import subprocess
result = subprocess.run(["my-benchmark", "--json"], capture_output=True, text=True)
解析并输出
print(f"my_metric: {parse_score(result.stdout)}")---
查看结果
# 单个实验
python scripts/log_results.py --experiment engineering/api-speed
某个领域的所有实验
python scripts/log_results.py --domain engineering
跨实验仪表盘
python scripts/log_results.py --dashboard
导出格式
python scripts/log_results.py --experiment engineering/api-speed --format csv --output results.csv
python scripts/log_results.py --experiment engineering/api-speed --format markdown --output results.md
python scripts/log_results.py --dashboard --format markdown --output dashboard.md仪表盘输出
DOMAIN EXPERIMENT RUNS KEPT BEST Δ FROM START STATUS
engineering api-speed 47 14 185ms -76.9% active
engineering bundle-size 23 8 412KB -58.3% paused
marketing medium-ctr 31 11 8.4/10 +68.0% active
prompts support-tone 15 6 82/100 +46.4% done导出格式
- TSV — 默认格式,制表符分隔
- CSV — 逗号分隔,包含正确的引号引用
- Markdown — 格式化表格,适用于 GitHub/文档阅读
---
主动触发机制
在无需询问的情况下,直接标记以下情况:
- 评估命令失效 $\rightarrow$ 在开始循环前进行测试。运行一次并验证输出。
- 目标文件不在 git 中 $\rightarrow$ 先执行
git init && git add . && git commit -m 'initial'。
- 指标方向不明确 $\rightarrow$ 询问:是越低越好还是越高越好?必须在开始前确认。
- 时间预算过短 $\rightarrow$ 如果评估时间超过预算,每次运行都会崩溃。
- Agent 修改 evaluate.py $\rightarrow$ 立即停止。这会导致所有对比失效。
- 连续 5 次崩溃 $\rightarrow$ 暂停循环并提醒用户,避免浪费资源。
- 连续 20+ 次运行无提升 $\rightarrow$ 建议修改
program.md中的策略或尝试不同方法。
---
安装指南
一键安装(通用)
git clone https://github.com/alirezarezvani/claude-skills.git
cp -r claude-skills/engineering/autoresearch-agent ~/.claude/skills/多工具安装
./scripts/convert.sh --skill autoresearch-agent --tool codex|gemini|cursor|windsurf|openclawOpenClaw
clawhub install cs-autoresearch-agent---
相关技能
- self-improving-agent — 随时间优化 Agent 自身的记忆/规则。不适用于结构化实验循环。
- senior-ml-engineer — ML 架构决策。互补关系:用于初始设计,随后使用 autoresearch 进行优化。
- tdd-guide — 测试驱动开发。互补关系:测试用例可作为评估函数。
- skill-security-auditor — 发布前审计技能。不适用于优化循环。