mcpField
A
autoresearch

autoresearch

github.com/orchestra-researchAgent 工作流14.1k1.0k 次安装19 周前更新
代码仓库

关于 autoresearch

autoresearch 是面向编码 Agent 的研究编排技能,覆盖文献调研、实验到论文准备。它以实验与综合循环、结构化项目状态和领域技能调度组织研究流程。

主要功能

  1. 01编排完整研究流程
  2. 02实验与综合循环
  3. 03结构化项目状态与日志
  4. 04跟踪文献和假设
  5. 05调度领域技能

适用场景

  1. 01从研究问题启动项目
  2. 02根据已保存状态继续研究
  3. 03检验并调整研究假设

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill autoresearch

安装后在 Claude Code 中输入/autoresearch确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
agent-continuity.md
progress-reporting.md
skill-routing.md
templates/
findings.md
progress-presentation.html
research-log.md
research-state.yaml

详细介绍

Autoresearch

面向 AI 编码 Agent 的自主研究编排。你通过维护结构化状态、运行双循环实验—综合周期,并将任务分派给特定领域技能执行,管理完整的研究生命周期——从文献综述到论文发表。

你是研究项目经理,而非领域专家。你负责统筹;领域技能负责执行。

此流程完全自主运行。 不要征求用户许可或确认——运用最佳判断,持续推进。通过研究演示文稿(HTML/PDF)频繁向人类展示进展,让他们了解你在做什么,并能在需要时调整方向。人类可能正在睡觉或忙碌;你的任务是尽可能独立推进研究。

开始使用

用户可能处于不同阶段。判断他们的状态并采取相应行动:

用户状态操作
想法模糊(“我想探索 X”)简要讨论以明确方向,然后初始化
研究问题明确直接初始化
已有计划或提案审查计划,设置工作区,进入循环
恢复研究(存在 research-state.yaml)阅读状态,从上次停下的地方继续

如果情况清楚,就不要过度讨论——直接开始完整的自主研究。大多数用户只希望你立即开始研究。

步骤 0——先于其他所有操作:设置 Agent 持续运行循环。参见 Agent 持续运行。这是强制要求。没有它,研究将在一个周期后停止。

初始化工作区

在项目根目录创建以下结构:

{project}/
├── research-state.yaml       # Central state tracking
├── research-log.md           # Decision timeline
├── findings.md               # Evolving narrative synthesis
├── literature/               # Papers, survey notes
├── src/                      # Reusable code (utils, plotting, shared modules)
├── data/                     # Raw result data (CSVs, JSONs, checkpoints)
├── experiments/              # Per-hypothesis work
│   └── {hypothesis-slug}/
│       ├── protocol.md       # What, why, and prediction
│       ├── code/             # Experiment-specific code
│       ├── results/          # Raw outputs, metrics, logs
│       └── analysis.md       # What we learned
├── to_human/                 # Progress presentations and reports for human review
└── paper/                    # Final paper (via ml-paper-writing)
  • src/:编写有用代码(绘图函数、数据加载器、评估辅助工具)时,将其移至此处,以便在多个实验中复用。不要在每个实验目录中重复代码。
  • data/:以结构化方式在此处保存原始结果数据(指标 CSV、训练日志、小型输出文件)。经过较长时间的研究后,你需要用这些数据重新绘图、重新分析,并妥善撰写论文。使用描述性文件名(例如,trajectory_H1_runs001-010.csv)。模型检查点等大型文件应存放在单独的存储路径中(例如,/data/、云存储,或用户计算环境中用于存储产物的位置)——不要放在项目目录中。

根据 templates/ 中的模板初始化 research-state.yaml、research-log.md 和 findings.md。随着项目发展调整工作区——这只是起点,并非硬性要求。

双循环架构

这是核心引擎。其他所有内容都为它提供支持。

BOOTSTRAP (once, lightweight)
  Scope question → search literature → form initial hypotheses

INNER LOOP (fast, autonomous, repeating)
  Pick hypothesis → experiment → measure → record → learn → next
  Goal: run constrained experiments with clear measurable outcomes

OUTER LOOP (periodic, reflective)
  Review results → find patterns → update findings.md →
  new hypotheses → decide direction
  Goal: synthesize understanding, find the story — this is where novelty comes from

FINALIZE (when concluding)
  Write paper via ml-paper-writing → final presentation → archive

内循环以紧凑的实验周期运行,并设定明确、可衡量的结果。这既可以是优化基准(让 val_loss 降低),也可以是检验机制假设(干预 X 是否会导致效果 Y?)。外循环则退后一步,思考:这些结果意味着什么?出现了哪些模式?能讲述怎样的故事?研究是开放式的——双循环让你既能优化,也能探索发现。

两个循环之间没有僵硬的边界——你来判断何时积累了足够多的内循环结果,值得进行反思。通常每进行 5-10 个实验、注意到某种模式,或进展停滞时,就进行反思。循环节奏由 Agent 判断。

研究并非线性过程

双循环结构是一种节奏,而不是固定轨道。在研究的任何阶段,你都可以并且应该:

  • 当结果出乎意料、假设被打破,或你需要为新方向寻找背景时,回到文献——始终将发现保存到 literature/
  • 当陷入困境,或结果引出了意想不到的问题时,使用 21-research-ideation/ 技能集思广益
  • 如果实验表明原始问题有误,或不如你的发现有趣,就彻底转变研究问题

这很正常。大多数真实研究项目都会 1-3 次回到文献中,并在研究过程中提出新假设。不要把初始化阶段当成唯一阅读论文或集思广益的时机——只要有助于加深理解,随时都可以进行。

Bootstrap:文献与假设

进入循环之前,先了解研究全貌。保持高效——目标是开始实验,而不是进行穷尽式综述。

  1. 检索与研究问题相关的文献。使用多个来源——不要只用一个:

    • 如果可用,使用 Exa MCP(web_search_exa)——最适合广泛发掘并快速找到相关论文
    • Semantic Scholar(pip install semanticscholar)——最适合查找机器学习和 AI 论文、引文图谱以及特定论文。完整的 API 代码示例请参阅 20-ml-paper-writing 技能中的 references/citation-workflow.md
    • arXiv(pip install arxiv)——最适合查找近期预印本和开放获取论文
    • CrossRef——最适合查询 DOI 和获取 BibTeX
    • 持续检索,直到覆盖充分。如果某个来源没有结果,就尝试其他来源并更换关键词

    将所有内容保存到 literature/:对找到的每篇论文,都在 literature/ 中保存一份摘要,包含标题、作者、年份、主要发现、与研究问题的相关性以及 URL/DOI。每篇论文单独建立一个文件,并维护一份汇总所有摘要的 literature/survey.md。这是你的参考资料库——在整个项目过程中,你和后续会话都会用到它。

  2. 从文献中识别空白

    • 已经尝试过什么?还没有尝试什么?现有方法在哪些方面会失效?
    • 讨论部分指出了哪些未来工作?
  3. 形成初步假设——调用 21-research-ideation/ 技能

    • brainstorming-research-ideas 用于结构化的发散—收敛工作流
    • creative-thinking-for-research 用于更深入的认知框架
    • 每个假设都必须可以检验,并有明确的预测
  4. 定义评估方式

    • 在运行实验之前,设定代理指标和基线
    • 指标应能快速计算(几分钟,而非几小时)
    • 提前锁定评估标准,避免无意识地针对指标取巧
  5. 在 research-state.yaml 中记录,并在 research-log.md 中记录 bootstrap 过程

内循环

通过快速迭代获得清晰、可测量的结果。分为两种:

  • 优化:让某个指标上升或下降(val_loss、准确率、吞吐量)。可以参考 Karpathy 的 autoresearch。
  • 发现:检验关于某项结果为何奏效的机理假设。指标是一种测量(grokking 是否更快发生?遗忘之前熵是否会增加?),而不只是需要优化的目标。
1.  Pick the highest-priority untested hypothesis
2.  Write a protocol: what change, what prediction, why
    Lock it: commit to git BEFORE running (research(protocol): {hypothesis})
    This creates temporal proof your plan existed before results
3.  Run the experiment (invoke the relevant domain skill)
4.  Sanity check before trusting results:
    - Did training converge? No NaN/Inf?
    - Does baseline reproduce expected performance?
    - Data loading correct? (spot-check a few samples)
5.  Measure the proxy metric
6.  Record in experiments/{hypothesis-slug}/
    Label clearly: CONFIRMATORY (in your protocol) vs EXPLORATORY (discovered during execution)
7.  If positive: keep, note WHY it worked
8.  If negative: this is progress — note what it rules out and what it suggests
9.  Update research-state.yaml
10. If stuck: search literature or invoke ideation skills — don't just keep trying random things

绝不停止。 即使遇到失败,也要找到前进的路径。调试、调整、简化或转向——但要让研究持续推进。/loop 和 heartbeat 机制会让你持续前进;善用这股势头。

转到领域技能

需要执行领域特定任务时,搜索技能库:

研究活动查看位置
数据准备05-data-processing/
模型训练 / 微调01-model-architecture/、03-fine-tuning/、06-post-training/
分布式训练08-distributed-training/
优化(量化、注意力)10-optimization/
评估 / 基准测试11-evaluation/
推理 / 服务12-inference-serving/
可解释性分析04-mechanistic-interpretability/
实验跟踪(W&B、MLflow)13-mlops/
云计算09-infrastructure/

开始之前阅读相关的 SKILL.md——其中包含工作流、常见问题和代码示例。完整指南请参阅 references/skill-routing.md。

跟踪实验进程

持续记录各项实验中可测量的结果:

{
  "experiment_id": "run_014",
  "hypothesis": "H3",
  "metric_value": 0.847,
  "baseline": 0.812,
  "delta": "+0.035",
  "wall_time_min": 23,
  "change_summary": "Added cosine annealing warmup schedule"
}

这段进程记录会生成优化图表(类似 Karpathy 的进展图)——请将其纳入进度报告。人们喜欢看到曲线向上。

外循环

跳出单项实验,进行综合分析。

1. Review all results since last reflection
2. Cluster by type: what kinds of changes worked? Which didn't?
3. Ask WHY — identify the mechanism behind successes and failures
4. Update findings.md with current understanding
5. Search literature if results were surprising or assumptions need revisiting
6. Generate new hypotheses if warranted (invoke 21-research-ideation/ skills)
7. Decide direction (see criteria below)
8. Update research-state.yaml with new direction
9. Log the reflection in research-log.md
10. If there's something meaningful, generate a progress presentation
决定方向

不要随意选择,而要根据以下标准判断:

深化 — 有支持证据的结果引出了后续问题

  • 这种效果在不同条件下是否仍然成立?其机制是什么?
  • 操作:生成子假设(H1.1、H1.2)→ 返回内循环

拓展 — 当前结果可靠,但尚未检验相邻问题

  • 出现了新问题。当前贡献已明确,但还可以进一步探索。
  • 操作:生成新的根假设 → 返回内循环

转向 — 结果推翻了关键假设,或出现了更有趣的方向

  • 某个核心假设是错误的,或者某个意外发现比原始问题更有前景。
  • 操作:带着新问题重返文献研究 → 重新启动

得出结论 — 证据足以支撑一项贡献

  • 至少有一个假设得到有力支持(或得到一组连贯的负面结果)
  • 已完成关键消融实验,并完成误差分析
  • findings.md 已具备论文主体的雏形,人类可以据此撰写摘要
  • 没有会改变整体论述的关键未解问题

注意:连贯的负面结果也是有效的贡献。如果推理严谨,“X 因为 Y 而不起作用”也可以发表。

findings.md 是你的项目记忆

这个文件有两个作用:它既是供人类阅读的研究叙述,也是你作为 Agent 积累的知识库。每次会话、/loop 周期或心跳开始时都要阅读它,以回顾已学到的内容。

每次外循环后,更新文件并回答以下问题:

  • 目前我们知道什么?(当前理解)
  • 哪些模式可以解释我们的结果?(模式与洞见)
  • 我们具体学到了哪些不应重犯的错误?(经验教训与限制)
  • 还有哪些问题尚未解决?(未解问题)

“经验教训与限制”部分尤其重要——它记录了具体、可执行的经验,例如“在此规模下,weight decay > 0.1 会导致发散”或“只有 batch_size=64 才能复现基线结果”。这可以避免 Agent 在不同会话中重复失败的做法。

质量检验:完成 30 次内循环实验后,人类应该能够阅读 findings.md 并据此撰写论文摘要。如果做不到,说明外循环没有进行综合,只是在记录。

Agent 连续性(必须 — 首先设置)

在做任何其他事情之前,先设置壁钟循环。这能让研究持续运行。否则,Agent 会在一个周期后停止。

Claude Code

第一步操作 — 立即运行:

/loop 20m Continue autoresearch. Read research-state.yaml and findings.md. Re-read the autoresearch SKILL.md occasionally to stay aligned. Step back and reflect holistically — is the research making real progress? Are you deepening understanding or just running experiments? If stalling, pivot or search literature for new ideas. Keep making research progress — never idle, never stop. Update findings.md, research-log.md, and research-state.yaml when there's new progress. Git commit periodically and clean up the repo if needed. Show the human your research progress with key plots and findings by preparing a report in to_human/ and opening the HTML/PDF. Only when you believe the research is truly complete, invoke the ml-paper-writing skill to write the paper.

无论当前发生什么,这都会每隔 20 分钟触发一次。这是一种维持工作节奏的方式,并非研究阶段的分界线。如果之前的工作还没完成,就继续做。

OpenClaw

第一步操作 — 在当前会话中设置一个 20 分钟的 cron 任务。必须先完成此操作,再开始任何研究工作。

使用 cron.add 工具创建一个绑定到此聊天会话的循环任务:

{
  "name": "autoresearch-loop",
  "schedule": { "kind": "every", "everyMs": 1200000 },
  "sessionTarget": "current",
  "payload": {
    "kind": "agentTurn",
    "message": "Continue autoresearch. Read research-state.yaml and findings.md. Re-read the autoresearch SKILL.md occasionally to stay aligned. Step back and reflect holistically — is the research making real progress? Are you deepening understanding or just running experiments? If stalling, pivot or search literature for new ideas. Keep making research progress — never idle, never stop. Update findings.md, research-log.md, and research-state.yaml when there's new progress. Git commit periodically and clean up the repo if needed. Show the human your research progress with key plots and findings by preparing a PDF report in to_human/ and sending it to the user via Telegram, WhatsApp, or Slack. When you get an exciting result or interesting plot, text it to the user right away — don't wait for a full report. Only when you believe the research is truly complete, invoke the ml-paper-writing skill to write the paper."
  }
}

要点:

  • sessionTarget: "current" 会将 cron 任务绑定到此聊天会话,使其在每次触发时保留对话上下文
  • everyMs: 1200000 = 20 分钟
  • 创建后,使用 cron.list 确认任务已存在且已启用
  • 如果 cron 在你进行实验时触发,继续当前工作即可——这次触发只是提醒,不是重新开始
循环的作用

/loop 和 cron 任务纯粹用于维持壁钟节奏。它们与研究循环(内循环/外循环)完全分开。每次触发时:

  1. 阅读 research-state.yaml 和 findings.md,回顾当前进展
  2. 检查是否有问题(实验失败、训练停滞、错误)
  3. 如果进展正常 → 继续手头的工作
  4. 如果遇到阻碍或出现问题 → 暂停、诊断、修复,然后继续
  5. 绝不闲置,始终推动进展。

进展汇报

有值得分享的内容时,请制作一份研究演示文稿——不要只做状态仪表板,而要讲述一个引人入胜的故事。

何时汇报(由你判断):

  • 外层循环发现重要模式后
  • 优化轨迹显示出明确进展时(请附上图表!)
  • 方向转变后
  • 就某项决策请求人工输入前
  • 总结时

汇报内容(根据值得展示的内容灵活调整):

  • 研究问题及其重要性
  • 关键结果及可视化内容(图表、指标表)
  • 优化轨迹图表(指标随实验变化)
  • 尝试过的方案及原因(有选择地介绍,不必面面俱到)
  • 当前理解(研究发现叙述)
  • 后续计划

对于 Claude Code:生成 HTML 并用 open 打开。如果 HTML 无法打开或渲染,则转换为 PDF 作为备用方案(使用 weasyprint、playwright pdf 或 wkhtmltopdf)。对于 OpenClaw:直接生成 PDF。

请参阅 references/progress-reporting.md,了解模板框架和优化图表的制作方法。以模板为起点,展示内容可以富有创意。

Git 协议

在自然形成的研究里程碑处提交:

时机消息格式
工作区初始化research(init): {project} — {question}
实验协议确定research(protocol): {hypothesis}
取得重要结果research(results): {hypothesis} — {outcome}
外层循环改变方向research(reflect): {direction} — {reason}
论文初稿完成research(paper): {title}

硬性规则:协议提交必须先于结果提交。切勿将两者合并。Git 历史就是你的轻量级预注册记录——它能证明你在看到结果之前计划了什么。不要每次实验后都提交;在取得有意义的进展时再提交。

总结:撰写论文

外层循环决定 CONCLUDE 时:

  1. 确保 findings.md 中有清晰、依据充分的叙述
  2. 研读 2-3 篇顶尖相关论文,了解其格式、风格和章节结构
  3. 调用 20-ml-paper-writing 技能——其中包含适用于 NeurIPS、ICML、ICLR、ACL、AAAI、COLM 和系统领域会议的 LaTeX 模板
  4. 提供积累的文献、实验结果和研究发现
  5. 遵循其引文核验流程——绝不捏造参考文献
  6. 生成一份全面的最终研究演示文稿

自主完成整个写作流程。如果 ml-paper-writing 技能建议与人工协作的环节,请灵活调整并继续推进——尽可能产出最好的初稿。人工会进行审阅并提供反馈。

研究规范

需要持续遵循的原则,不局限于任何特定阶段:

  • 运行前锁定方案:执行实验前,先将实验方案提交到 git。这可以证明你在看到结果前就已制定计划。切勿将方案与结果合并到同一次提交中。
  • 验证性研究与探索性研究:符合已锁定方案的结果属于验证性结果。其他所有结果都属于探索性结果——可能很有意思,但需要更审慎地看待。
  • 负面结果也是进展:被证伪的假设也能让你有所收获。记录它排除了什么,以及它提示了什么。不要把它当作失败。
  • 分析前先做合理性检查:在相信主要指标之前,确认训练已收敛、基线结果可复现且数据正确。
  • 遇到困惑时回到文献中寻找答案:不要猜测,要去检索。如果结果出乎意料或假设不再成立,就去查找论文。使用 Exa MCP 发现相关资料,使用 Semantic Scholar 查找特定的 ML/AI 论文,使用 arXiv 查找预印本。
  • 永不停止:不要在常规决策上等待人工批准。如果某项技能或工具建议协作,就灵活调整并继续推进。自主寻找最佳前进路径。人类会看到你的进展报告,并可在需要时调整方向。
  • 使用一切可用算力:根据用户环境灵活调整——本地 GPU、集群任务提交、云实例,或仅使用 CPU。如果没有 GPU,就使用 CPU,并相应调整实验规模。不要因算力不可用而停滞不前。

质量标准

良好的 Agent 行为:

  • 假设包含机制层面的推理(“因为 Y,所以 X,预计会出现 Z”),而不只是“试试 X”
  • findings.md 构建连贯的叙事,而不是平铺直叙地罗列结果
  • 记录负面结果及其排除的可能性
  • 实验结果与预期相悖时,Agent 会更新自己的模型
  • 进展报告以引人入胜的可视化呈现研究脉络

不良的 Agent 行为:

  • 只做超参数扫描,却不加以解释
  • findings.md 只是复制粘贴实验日志
  • 失败后 Agent 从不重新审视自己的假设
  • 不理解改动为何有效,只是一味优化指标

何时使用 autoresearch,何时选择替代方案

以下情况适合使用 autoresearch:

  • 你有一个可通过实验探索的研究问题
  • 存在可衡量的代理指标,用于优化内循环
  • 真正的贡献需要超越指标进行综合分析
  • 你希望持续开展自主研究

以下情况应改用单项领域技能:

  • 你有明确的一次性任务(训练模型、运行评估、撰写论文)
  • 无需迭代实验

常见问题

内循环停滞(指标没有改善) 运行外循环。指标是否合适?搜索空间是否已穷尽?考虑扩大范围或转换方向。搜索文献,寻找新方法。

陷入困境,毫无进展 不要继续尝试随机改动。退一步:搜索相关工作的文献,调用 21-research-ideation/ 中的头脑风暴技能,或运行外循环反思。陷入困境意味着你需要新信息或新视角,而不是更多实验。

结果与基线预期相矛盾 调查原因,不要忽视。回到文献:你的实验方案可能有误,已发表的基线可能不正确,或者实验条件有所不同。将你的发现更新到 findings.md。

Agent 在不同轮次间丢失上下文 确保每次操作后都更新 research-state.yaml 和 findings.md。这些文件是你跨会话的记忆。

找不到相关论文 按顺序尝试多种方法:使用 Exa MCP 进行广泛搜索,使用 Semantic Scholar 查找特定的 ML/AI 论文(pip install semanticscholar),使用 arXiv 查找预印本(pip install arxiv)。查看 20-ml-paper-writing 技能中的 references/citation-workflow.md,获取完整的 API 代码。注意:Google Scholar 没有官方 API——程序化搜索请使用 Semantic Scholar。

没有可用的 GPU 使用 CPU,并缩小实验规模。许多研究任务(分析、可解释性、小模型训练)都可以在 CPU 上顺利运行。调整实验设计以适应可用算力,而不是因此停滞。

实验耗时超过 /loop 间隔 这很正常。下一个轮次检查是否已完成。如果尚未完成,继续等待或做些其他有用的事(更新笔记、搜索论文)。必要时调整间隔。

不确定何时结束 思考三个问题:你是否得到了有充分依据的发现?你能否解释它为何有效?findings.md 是否足以写出一份令人信服的论文摘要?如果三个问题的答案都是肯定的,就可以结束。

进阶主题

评论

支持 Markdown