EvoScientist: Towards Multi-Agent Evolving AI Scientists for End-to-End Scientific Discovery
Paper: arXiv:2603.08127 Code: EvoScientist/EvoScientist Code reference:
main@b9ad6944(2026-05-23)
1. Motivation (研究动机)
当前 AI Scientist 系统已经能把 LLM 用在 literature review、idea generation、code generation、paper writing 等环节,但多数系统仍是静态、手工设计的 pipeline:每次任务结束后,idea 评审、代码运行日志、失败实验、可复用的数据处理和训练策略都会变成一次性 trace,而不会反过来改变下一轮科研决策。论文把这个缺口概括为:现有系统缺少从 accumulated outcomes and failures 中学习的能力,因此容易重复失败实验、忽略已经验证过的 promising direction,或者继续投入不可执行的 idea。
EvoScientist 要解决的核心问题不是“再做一个会写论文的 agent”,而是把 end-to-end scientific discovery 建模成一个可演化的多智能体学习问题:给定用户目标 ,系统要先提出 idea 与 proposal ,再搜索和执行代码 得到实验报告 ,最后把成功与失败都蒸馏为长期记忆,供未来任务检索。这个目标同时约束了两类质量:一是 idea 的 novelty、feasibility、relevance、clarity;二是 code/experiment 的 execution success rate。
这个问题值得研究的原因在于,科研发现不是一次性问答,而是跨任务、跨迭代的闭环。若 agent 能把“哪些方向值得继续”“哪些假设已经失败”“哪些代码实现路径更容易跑通”显式沉淀下来,就能减少重复试错,把 LLM agent 从静态 workflow 推向类似研究团队的长期经验积累。论文的实证目标也围绕这一点展开:在 30 个 AI research query 上评估 idea generation,在 code execution 上比较 evolution 前后成功率,并用 6 篇 ICAIS 2025 AI Scientist Track 投稿检验 end-to-end 产出。
2. Idea (核心思想)
EvoScientist 的核心 insight 是:把 multi-agent interaction history 作为可检索、可更新的状态,而不是把每轮任务看成无状态调用。Researcher Agent 负责 idea tree search,Engineer Agent 负责 experiment tree search,Evolution Manager Agent 在每轮后把成功方向、失败方向和实验策略分别写入 ideation memory 与 experimentation memory ,让之后的 RA/EA 在生成前先检索历史经验。
关键创新可以概括为三层:第一,用三类角色把科学发现拆成 idea、experiment、evolution;第二,用两个 persistent memory 模块分别服务“想法质量”和“执行可靠性”;第三,用 idea direction evolution、idea validation evolution、experiment strategy evolution 三种自演化机制,把 top-ranked ideas、failed proposals、code search trajectories 转成未来可复用的 prompt context。
与 Virtual Scientist、AI-Researcher、AI Scientist-v2 等固定 pipeline 相比,EvoScientist 的根本差别在于它不是只在单个任务内 proposal→critique→refine,而是把跨任务经验写入可检索记忆。与单纯多 agent 协作相比,它更强调“历史失败也要进入系统状态”:失败 proposal 会通过 IVE 写回 ,失败 logs 和 best code trajectory 会通过 ESE 写回 ,从而让下一轮 idea 与 code generation 都有历史反馈。
3. Method (方法)
3.1 Overall framework:三 agent + 两类 persistent memory
Figure 1 解读:图中左侧是 Researcher Agent 的 idea tree search:从用户目标 出发,检索 literature 与 ideation memory ,生成多个候选 idea,并通过 Elo tournament 选择 top ideas。右侧是 Engineer Agent 的 experiment tree search:从 proposal 出发,检索 experimentation memory ,经历 initial implementation、hyperparameter tuning、proposed method、ablation studies 四个执行阶段。中间的 Evolution Manager Agent 把 top ideas、失败 proposal、实验轨迹写回 /,形成跨任务循环。
形式上,论文把 end-to-end scientific discovery 定义为两阶段 pipeline:Stage 1 将用户目标 变成 idea 和完整 proposal ;Stage 2 搜索并运行可执行代码 ,得到包含 logs、metrics、failure diagnosis 的执行报告 。难点在于同时提升 idea quality 与 execution reliability,因此系统状态必须包括过去任务的成功和失败。
直觉上,EvoScientist 的“演化”并不是梯度训练一个 agent,而是把 agent 运行过程中产生的高价值证据转成 retrieval memory。RA 在提出新 idea 时看到过去的可行方向和失败方向,可以少走重复路线;EA 在写代码前看到过去的数据处理和训练策略,可以减少环境、依赖、超参和评估协议上的低级失败;EMA 则承担经验压缩器的角色,决定哪些 trace 值得长期保存。
3.2 Researcher Agent:ideation memory 与 idea tree search
RA 的输入是用户目标 、检索到的相关文献 、以及 ideation memory 。它先做 embedding-based retrieval: 其中 用 cosine similarity 选出 top- 条最相关 ideation memory。实验设置中 。
接着 RA 进行 propose—review—refine 式的 tree search。每个节点保存一个 idea draft 和对应 review feedback,扩展节点时用反馈生成 refined child ideas:
其中 是候选 idea 上限,实验中 ,并使用 3 个 parallel workers。然后 EvoScientist 用 Elo tournament 做 pairwise ranking,因为 pairwise comparison 比绝对分数更适合处理 LLM judge 的噪声:
并保留 top-3 idea 供 direction summarization:
最后 RA 将 top-1 idea 扩展成 proposal:
Figure 10 解读:这个 prompt 图展示 IDE 如何把 top ideas 压缩成“可复用方向”:输入不是单个最终答案,而是 tournament 中胜出的多个 idea 及其 rationale;输出强调 future user goals 可复用的 research direction、适用场景和避免过度泛化。它对应 中的 positive memory。
Figure 11 解读:这个 prompt 图展示 IVE 如何从失败 proposal 和 execution report 中总结 failed research directions。它的作用不是简单记录“某个实验失败”,而是把失败归因到 idea 层面的不可行假设、评估设计缺陷或方法-数据不匹配,使 RA 在未来检索 时能避开同类路线。
3.3 Engineer Agent:experimentation memory 与 experiment tree search
EA 的输入是 proposal 和 experimentation memory 。它先检索已有执行策略:
其中 同样用 embedding-based retrieval 和 cosine similarity,实验中 。EA 随后在四个实验阶段做 experiment tree search:initial implementation、hyperparameter tuning、proposed method、ablation studies。每个阶段 都会生成代码、运行实验、解析结构化执行结果;若失败,则根据 logs 诊断并修订代码:
这里 是阶段 的第 个 code attempt, 是其结构化 execution result。实验设置中四个阶段的尝试上限分别为 、、、,并使用 4 个 parallel workers。每个阶段完成后,系统选择最佳代码与对应结果,形成阶段历史 ;四个阶段汇总为 execution report:
Figure 12 解读:ESE prompt 要求 EMA 从完整 code search trajectory 与 best-performing implementation 中抽取数据处理策略和模型训练策略。它对应 的更新:不是保存全部代码,而是保存能跨任务迁移的 execution recipe,例如数据清洗、baseline 设置、超参搜索、失败日志诊断和指标对齐方式。
3.4 Evolution Manager:三类 self-evolution
EMA 的任务是把交互历史转为长期知识。论文定义了三种 evolution:
Idea Direction Evolution (IDE) 从 top-ranked ideas 中总结 promising directions: Idea Validation Evolution (IVE) 从 selected proposal 和 execution report 中总结失败方向。如果 EA 在预算内找不到可执行代码,或者实验结果显示 proposed method 低于 baseline,则 proposal 被视作失败或需要负向归因: Experiment Strategy Evolution (ESE) 从四个阶段的 experiment histories 中总结可复用执行策略: 这三者的分工很清楚:IDE 记录“哪些方向值得继续”,IVE 记录“哪些方向已经被执行证据否定或存在不可行缺陷”,ESE 记录“如何把 proposal 变成可跑通实验”。因此 EvoScientist 的 memory 不是统一的 chat history,而是按科研决策功能拆分。
3.5 Released code 实现观察与 paper/code 差异
论文公式与 released code 实现差异:论文中的 、、、、 是 paper-level abstraction;截至 main@b9ad6944,官方仓库更像 productized EvoScientist runtime,包含 DeepAgents/LangGraph 风格的 subagent、middleware、MCP/skills、memory injection、CLI/TUI,而没有同名函数或完整复现实验的 launch config。代码中的 6 个 subagents(plan、research、code、debug、analyze、write)比论文的 3-agent conceptual decomposition 更细;memory middleware 也以 MEMORY.md 注入和抽取的通用机制实现,而不是显式区分 paper 公式中的 / 更新函数。
训练/运行配置来源说明:论文中的实验数字(Gemini-2.5-Pro、Claude-4.5-Haiku、mxbai-embed-large、、、、)来自 arXiv source sections/05-experiments.tex 的 Implementation Details;官方 released repo 在 main@b9ad6944 未提供这些 benchmark launch scripts,因此不能把 repo 默认配置误认为论文实验配置。
Code reference:
main@b9ad6944(2026-05-23) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Agent runtime assembly | EvoScientist/EvoScientist.py | _build_base_kwargs, load_mcp_and_build_kwargs, create_cli_agent, create_deep_agent |
| Subagent loading and delegation | EvoScientist/EvoScientist.py, EvoScientist/subagents/*.yaml | load_subagents, planner-agent, research-agent, code-agent, debug-agent, data-analysis-agent, writing-agent |
| Research/literature role | EvoScientist/subagents/research.yaml, EvoScientist/prompts.py | research-agent, RESEARCHER_INSTRUCTIONS, tavily_search, think_tool |
| Experiment planning and implementation | EvoScientist/subagents/planner.yaml, EvoScientist/subagents/code.yaml | planning stages, success signals, commands/artifacts, code implementation guidelines |
| Persistent memory injection/extraction | EvoScientist/middleware/memory.py | create_memory_middleware, EvoMemoryMiddleware, memory read/inject/extract/merge flow |
| Runtime tools for execution and reflection | EvoScientist/EvoScientist.py, EvoScientist/tools/think.py | create_code_interpreter_middleware, think_tool |
Pseudocode: Researcher Agent / idea tree search
def researcher_agent(goal, literature_retriever, ideation_memory, llm, n_ideas=21, top_k_i=2):
memory_items = ideation_memory.retrieve(goal, top_k=top_k_i, metric="cosine")
papers = literature_retriever.search(goal)
frontier = [llm.propose_idea(goal=goal, papers=papers, memory=memory_items)]
candidates = []
while len(candidates) < n_ideas and frontier:
idea = frontier.pop(0)
review = llm.review_idea(idea, criteria=["novelty", "feasibility", "relevance", "clarity"])
refined = llm.refine_idea(idea, review, papers=papers, memory=memory_items)
candidates.append({"idea": refined, "review": review})
frontier.extend(llm.expand_children(refined, review))
ratings = elo_tournament([c["idea"] for c in candidates], judge=llm.pairwise_judge)
top3 = select_top_k(candidates, ratings, k=3)
proposal = llm.extend_to_proposal(top3[0]["idea"])
return proposal, top3Pseudocode: Engineer Agent / experiment tree search
def engineer_agent(proposal, experiment_memory, code_agent, runner, max_attempts=(20, 12, 12, 18), top_k_e=1):
strategies = experiment_memory.retrieve(proposal, top_k=top_k_e, metric="cosine")
stage_names = ["initial_implementation", "hyperparameter_tuning", "proposed_method", "ablation"]
histories = []
for stage_name, budget in zip(stage_names, max_attempts):
stage_history = []
context = {"proposal": proposal, "stage": stage_name, "strategies": strategies}
for attempt in range(budget):
code = code_agent.implement_or_revise(context=context, history=stage_history)
result = runner.execute(code)
stage_history.append({"code": code, "result": result})
if result.success and result.meets_stage_signal:
break
context["diagnosis"] = code_agent.diagnose_failure(result.logs)
histories.append(select_best_attempt(stage_history))
return summarize_execution(proposal, histories), historiesPseudocode: Evolution Manager / memory update
def evolution_manager(goal, top_ideas, proposal, execution_report, experiment_histories, llm, mi, me):
promising = llm.summarize_idea_directions(goal=goal, top_ranked_ideas=top_ideas)
mi.update(kind="promising_direction", content=promising)
failed = None
if execution_report.no_executable_code or execution_report.proposed_method_underperforms_baseline:
failed = llm.summarize_failed_direction(proposal=proposal, report=execution_report)
mi.update(kind="failed_direction", content=failed)
strategy = llm.summarize_experiment_strategy(
proposal=proposal,
histories=experiment_histories,
fields=["data_processing_strategy", "model_training_strategy", "failure_diagnosis"],
)
me.update(kind="experiment_strategy", content=strategy)
return {"ideation_updates": [promising, failed], "experiment_update": strategy}Pseudocode: released runtime assembly
def create_released_evoscientist_agent(config):
backend = build_composite_backend(
workspace=config.workspace_dir,
skills="/skills/",
memories="/memories/",
)
middleware = [
configurable_model_middleware(),
context_editing_middleware(config.model),
model_fallback_middleware(),
context_overflow_mapper(),
tool_error_handler(),
tool_selector_middleware(config.model),
create_memory_middleware(config.memories_dir, extraction_model=config.model),
create_code_interpreter_middleware(timeout=config.code_interpreter_timeout),
]
subagents = load_subagents("EvoScientist/subagents", tools=["think_tool", "tavily_search"])
return create_deep_agent(
name="EvoScientist",
backend=backend,
tools=["think_tool", "skill_manager"],
subagents=subagents,
middleware=middleware,
)4. Experimental Setup (实验设置)
4.1 Datasets / tasks
论文没有使用单一公开 benchmark,因为 end-to-end scientific discovery 没有现成覆盖完整流程的数据集。作者构造了 multi-level evaluation set:
- Idea Generation:30 个由 experienced AI researchers 提供的 research queries,覆盖 machine translation、software engineering、LLM evaluation、knowledge injection、Text-to-SQL、factual consistency、long-context understanding、alignment、audio foundation models 等 contemporary AI topics;每个 query 在评测时作为 user goal 原样输入。
- Code Generation:以上 idea generation 阶段生成的 research proposal 作为输入,用来评估系统是否能把 proposal 操作化为可执行实验代码。
- End-to-End Scientific Discovery:选择 6 个 research ideas 扩展为完整 manuscripts,并提交 ICAIS 2025 AI Scientist Track 做同行评审。
Figure 3 解读:这张图列出 30 个 evaluation queries。它说明作者不是只在单一任务类型上测 idea generation,而是把 query 分散到 NLP、LLM evaluation、data filtering、alignment、audio foundation model 等不同 AI research 主题,以检验 EvoScientist 的通用科研 ideation 能力。
4.2 Baselines
Idea generation 的自动评测比较 7 个 baseline:4 个 open-sourced systems(Virtual Scientist、AI-Researcher、InternAgent、AI Scientist-v2)和 3 个 commercial systems(Hypogenic、Novix、K-Dense)。Human evaluation 选择 4 个较强/代表性 baseline:InternAgent、AI Scientist-v2、Novix、K-Dense。论文附录说明 baseline 尽可能按原论文或公开文档配置;若公开信息不足,则使用可复现的最接近设置。
4.3 Metrics
- Idea Generation:pairwise comparison,维度为 novelty、feasibility、relevance、clarity;报告 EvoScientist 相对 baseline 的 Win/Tie/Lose 百分比和 Avg. gap。自动评测使用 Gemini-3-flash,human evaluation 使用 3 位 expert annotators。
- Code Generation:execution success rate,即 generated code 在 sandboxed environment 中成功运行并产出 valid output 的 trial 占比。
- End-to-End Scientific Discovery:6 篇 manuscript 的 ICAIS 2025 peer-review 结果,包含 automated AI reviewer 与 official human reviewers 的评审。
- Agreement check:附录报告 human evaluation subset 为 120 个 idea pairs(30 pairs × 4 comparison groups),3 位专家分别在四个维度上评价,用于检验 LLM judge 与 human judgment 的一致性。
4.4 Implementation details
论文实验使用 Semantic Scholar API 做 initial literature review;scientific idea generation 使用 Gemini-2.5-Pro;code generation 使用 Claude-4.5-Haiku;end-to-end manuscript authoring 也使用 Gemini-2.5-Pro;memory indexing/retrieval 通过 Ollama 调用 mxbai-embed-large。核心搜索/执行超参为:,,idea tree search 使用 3 个 parallel workers;,experiment execution 使用 4 个 parallel workers;四个 experiment stages 的最大尝试次数分别为 、、、。
5. Experimental Results (实验结果)
5.1 Idea generation:自动评测主结果
Gemini-3-flash pairwise judge 的结果显示 EvoScientist 对所有 7 个 baseline 的 Avg. gap 都为正,且多数维度带显著性标记()。完整数字如下,格式为 Novelty / Feasibility / Relevance / Clarity 的 Win-Tie-Lose 百分比,最后为 Avg. gap:
- vs Virtual Scientist:96.67-3.33-0.00 / 93.33-6.67-0.00 / 90.00-6.67-3.33 / 96.67-3.33-0.00,Avg. gap +93.34。
- vs AI-Researcher:96.67-3.33-0.00 / 90.00-0.00-10.00 / 86.67-10.00-3.33 / 93.34-3.33-3.33,Avg. gap +87.50。
- vs InternAgent:73.33-16.67-10.00 / 93.33-0.00-6.67 / 86.67-13.33-0.00 / 96.67-3.33-0.00,Avg. gap +83.33。
- vs AI Scientist-v2:63.33-16.67-20.00 / 53.33-6.67-40.00 / 36.67-50.00-13.33 / 56.67-23.33-20.00,Avg. gap +29.17。
- vs Hypogenic:93.33-6.67-0.00 / 83.34-3.33-13.33 / 70.00-23.33-6.67 / 96.67-3.33-0.00,Avg. gap +80.83。
- vs Novix:90.00-6.67-3.33 / 53.33-10.00-36.67 / 46.67-36.66-16.67 / 70.67-10.00-20.00,Avg. gap +46.00。
- vs K-Dense:86.67-3.33-10.00 / 56.67-13.33-30.00 / 43.33-36.67-20.00 / 76.67-13.33-10.00,Avg. gap +54.50。
这些结果支持两个结论:EvoScientist 在 novelty 和 feasibility 上优势最稳定,这与 IDE/IVE 记录可行方向和失败方向一致;relevance/clarity 也多数为正,但面对 AI Scientist-v2、Novix、K-Dense 时 tie 和 lose 比例更高,说明 topic alignment 与表达质量仍受 judge 噪声和 baseline 强度影响。
5.2 Human evaluation:专家评测主结果
Human evaluation 只选 4 个代表性强 baseline,但趋势与自动评测一致:
- vs InternAgent:66.67-23.33-10.00 / 96.67-3.33-0.00 / 90.00-0.00-10.00 / 93.33-6.67-0.00,Avg. gap +84.17。
- vs AI Scientist-v2:73.33-10.00-16.67 / 50.00-16.67-33.33 / 43.33-50.00-6.67 / 53.33-20.00-26.67,Avg. gap +34.16。
- vs Novix:93.33-0.00-6.67 / 56.67-6.66-36.67 / 36.67-60.00-3.33 / 73.33-10.00-16.67,Avg. gap +49.17。
- vs K-Dense:96.67-3.33-0.00 / 53.33-26.67-20.00 / 40.00-43.33-16.67 / 53.34-43.33-3.33,Avg. gap +50.84。
专家评测中 relevance 的 tie 明显更多,特别是 vs AI Scientist-v2、Novix、K-Dense 时 tie 分别达到 50.00、60.00、43.33。这说明“是否贴合 topic”对强系统而言更难拉开差距;但 novelty、feasibility、clarity 仍显示 EvoScientist 的显著优势。
5.3 Code generation:ESE 提升 execution success rate
Figure 2 解读:灰色柱是没有 ESE 的 EvoScientist-ESE,蓝色柱是加入 experiment strategy evolution 后的 EvoScientist。四个阶段都提升:Stage 1 initial implementation 从 29.23% 到 42.93%,Stage 2 hyperparameter tuning 从 48.94% 到 58.62%,Stage 3 proposed method 从 20.33% 到 21.57%,Stage 4 ablation studies 从 39.06% 到 55.12%。全阶段均值从 34.39% 到 44.56%。Stage 3 提升最小,说明真正的新方法实现仍是最难的部分;Stage 4 提升大,说明复用实验策略对 ablation 设计和执行特别有帮助。
5.4 End-to-end scientific discovery:ICAIS 2025 投稿结果
6 篇 EvoScientist-generated papers 均被 ICAIS 2025 AI Scientist Track 接收,其中 2 篇获得奖项:
| Title | Result |
|---|---|
| Adaptive Evidential Meta-Learning with Hyper-Conditioned Priors for Calibrated ECG Personalisation | Best Paper Award |
| Hierarchical Change Signature Analysis: A Framework for Online Discrimination of Incipient Faults and Benign Drifts in Industrial Time Series | AI Reviewer’s Appraisal Award |
| Robust Zero-Shot NER for Crises via Iterative Knowledge Distillation and Confidence-Gated Induction | Accepted |
| Adaptive Log Anomaly Detection through Data-Centric Drift Characterization and Policy-Driven Lifelong Learning | Accepted |
| ConFIT: A Robust Knowledge-Guided Contrastive Framework for Financial Extraction | Accepted |
| Hierarchical Adaptive Normalization: A Placement-Conditioned Cascade for Robust Wearable Activity Recognition | Accepted |
Figure 13 解读:这个 case study 强调 IDE 的价值:RA 反复从 idea memory 检索 direction-level insight,逐步形成 ECG personalization 中“hyper-conditioned priors + calibrated evidential modeling”的方法。Meta-review 肯定其核心贡献有效性和 engineering practicality,但也要求更清晰的 calibration protocol 和 uncertainty communication。
Figure 14 解读:这个 case study 更突出 ESE 的作用:早期 experimentation 中出现的 execution failures 和 configuration-level issues 被总结并复用,使 EA 逐步收敛到更稳健的 industrial time-series drift/fault discrimination pipeline。Reviewer 仍指出 stability gating、metric reporting、baseline fairness 等一致性问题,说明自动科研系统即便能产出接收论文,也需要严格的 protocol audit。
5.5 Ablation:IDE 与 IVE 都有贡献
Ablation 用 Gemini-3-flash 比较 EvoScientist 与移除部分 evolution 的变体:
| Variant vs EvoScientist | Novelty W/T/L | Feasibility W/T/L | Relevance W/T/L | Clarity W/T/L | Avg. gap |
|---|---|---|---|---|---|
| -IDE vs EvoScientist | 16.67/16.67/66.67 | 20.00/30.00/50.00 | 23.33/50.00/26.67 | 23.33/46.67/30.00 | -22.50 |
| -IVE vs EvoScientist | 30.00/26.67/43.33 | 10.00/26.67/63.33 | 30.00/46.67/23.33 | 16.67/46.67/36.67 | -20.00 |
| -all vs EvoScientist | 10.00/10.00/80.00 | 3.33/13.33/83.33 | 16.67/46.67/36.67 | 20.00/46.67/33.33 | -45.83 |
去掉 IDE 或 IVE 都会降低 idea generation;同时去掉二者的 -all 下降最大,尤其 novelty lose=80.00%、feasibility lose=83.33%。这支持作者的主张:positive memory(promising directions)和 negative memory(failed directions)不是冗余模块,而是分别约束探索与避错。
5.6 Limitations and caveats
作者明确限制评测主要集中在 computational research tasks,即假设可通过 simulation/code execution 验证。对材料科学、药物发现等需要物理实验和真实实验室反馈的领域,EvoScientist 还不能直接泛化,需要接入 lab workflows、real-world feedback 和安全约束。伦理上,系统应作为 decision support,而不是替代专家判断;生成的 idea、实验和 manuscript 仍需 human verification,并需要针对 dual-use/misuse、文献偏见和写作偏见做监控。
从 released code 角度看,另一个 reproducibility caveat 是:官方仓库公开了 EvoScientist runtime,但没有把论文中 idea/code benchmark 的完整 launch scripts、evaluation harness 和具体 prompt/evaluation artifacts 都整理成一键复现包。因此当前笔记中的 pseudocode 能映射到公开实现的 agent/memory/subagent runtime,但论文中的 exact benchmark config 仍以 arXiv source 的 Implementation Details 为准。