
论文链接:arXiv:2609.17523 · ScienceBuddy: Recursive-in-Recursive Self-Improvement for Interactive Scientific Agents
团队背景:PhAI Labs(斯坦福、牛津、清华、复旦等联合团队)
做过复杂垂直领域(尤其是生命科学、材料、药理等)Agent 的同学,大多踩过一个极度痛苦的坑:
写通用代码或找 Bug,我们有 SWE-bench 和单元测试(Unit Test),跑一次就知道通没通;做网页爬虫或 Web 任务,有确定性的 DOM 树和操作回调。但一旦进入科研和专业探索场景,AI 面对的是一个"无实时真值(No Immediate Ground Truth)"的世界。
你让模型去分析一个单细胞转录组数据、排查一个分子生物学实验步骤,或者从 500 篇论文与生信数据库中挖掘 JAK1 的耐药机制:
- 长长流程极易断链:调用三四个生信工具(如 Scanpy、Broad Repurposing Hub、UniProt)之后,上下文就脏了,不是参数格式传错,就是开始幻觉伪造数据库字段。
- 缺乏硬性评测闭环:科研探索往往是渐进式的,研究员自己一开始都不知道标准答案,无法直接塞入传统 RL 的二元打分(0/1)里。
- 优化手段陷入两难:要么靠工程师手工肉身调优几千字的 System Prompt,维护成本爆炸;要么试图端到端做全参数微调/RL,但只要外界工具接口微调或上下文调度一改,模型策略立刻失效。
最近 PhAI Lab 发布的 ScienceBuddy 工作台及其开源论文,给出了一个极具参考价值的破局思路:双层递归自我改进(Recursive-in-Recursive Self-Improvement, RinR)。
他们把整个 Agent 系统拆成了两层:外层冻结 Harness 训模型,内层冻结模型改 Harness。更关键的是,他们把科学家日常的交互、追问、挑刺,直接沉淀为可重放的工程资产。
本文将摒弃空洞的理论吹捧,从实际架构和 Harness 工程实现角度,深度拆解这套系统的核心亮点与设计细节。
核心亮点:双层递归架构(RinR)如何打破僵局?
许多团队在做 Agent 进化时,容易把"提示词优化"和"模型训练"混为一谈。ScienceBuddy 最大的架构贡献,是把 Agent 系统的状态空间显式拆分为两个正交的维度:
- 模型权重(Model Policy, θ):负责基础常识理解、长文本推理、单步工具调用生成的条件概率分布。
- 运行脚手架(Harness, H):负责环境感知、系统级 Instructions、可复用技能库(Scoped Skills)、上下文管理策略(Context Management)以及工具调用规范。
1. 内层递归(Inner Recursion):固定模型,演化程序与技能
在这一阶段,任务模型 θk(如 Qwen3.5-4B)被完全冻结。
- 独立辅助诊断模型(论文中采用 GPT-6 Astra)审查近期失败轨迹和研究员的纠偏反馈。
- 针对未达标的任务细则,提出极度克制、边界严格受限的局部代码/文本修改(一次只允许修改一条指令,或者增删改一个独立的 Scoped Skill)。
- 修改后的候选 Harness 必须在固定的配对开发集(Paired Development Set)上运行,只有在满足约束且平均得分提升( ΔS>0)时,才会被采纳合并为子代。
2. 外层递归(Outer Recursion):固定脚手架,强化学习更新模型
当内层迭代选出最优脚手架 Hk∗ 后,将 Harness 完全固定。
- 环境自适应难度校准(Environment Augmentation):由于 Harness 的升级会让一部分简单任务变得轻而易举,系统会通过脚本合成或混入干扰项,动态增加任务环境的计算深度与复杂度。
- GRPO 强化学习 :使用固定 Harness 执行采样,生成新鲜的 On-policy Rollouts,基于任务自适应细则打分(Rubric Reward)进行多轨迹组内归一化优势计算,更新模型得到 θk+1。
3. 实验数据印证了什么?
论文公布的消融和整体数据相当硬核:
- 只改 Harness(模型不改一砖一瓦) :仅通过演化 Instructions 和 9 个 Scoped Skills,首答成功率直接从 31.1% 暴拉到 51.1%,净增 20 个百分点!
- 只改模型(Harness 固定不变) :通过 Rubric-GRPO 训练,问题的解答覆盖度(Pass@4)从 48.3% 提升到 67.8%。
- 三轮完整 RinR 循环 :最终在涵盖文献问答(LitQA2)、生信数据库检索(DbQA)、实验步骤排障(ProtocolQA)以及全基因组关联分析(GWAS)的真实任务上,综合准确率从 42.2% 跃升到 73.3%,其中 33.3% 的难题被彻底攻克,而能力回退(Catastrophic Regression)仅有 2.2%。
深度拆解:科研 Agent Harness 应该怎么搭?
从 ScienceBuddy 的实践中,我们可以提炼出构建垂直领域 Agent Harness 的四大核心模块设计。
1. 将非结构化对话沉淀为"Harbor Task"标准格式
很多开发者做 Agent,喜欢直接把聊天历史全部打包存进向量数据库。但在科研中,研究人员的对话往往是非线性的(例如:"把前面那个图里的靶点重新查下,先做关联性分析,机制先放放")。
ScienceBuddy 引入了 Harbor Task 抽象,将一次交互转化为标准的可执行资产:
Px=⟨Ix,Ax,Ex,C(x)⟩
- Ix(Reconstructed Instruction):重构后的清晰指令,剔除聊天中的口语碎碎念,保留纯粹的科学目标。
- Ax(Assets):环境输入资产,如 FASTA 序列文件、GWAS 汇总统计表、荧光显微图片等。
- Ex(Environment):隔离的沙盒运行环境,预置 Python/R/Bash 与领域数据湖。
- C(x)(Rubric):根据交互意图抽取的打分细则。
下面是一个标准的 Harbor Task 目录组织规范参考:
bash
task_0192_jak1_interaction/
├── instruction.md # 提取后的规范化任务描述
├── task.toml # 执行配置 (超时时间、GPU资源、依赖库)
├── environment/
│ └── assets/ # 输入数据 (单细胞矩阵、临床表型表等)
│ ├── sc_matrix.h5ad
│ └── patient_meta.csv
└── tests/
└── test_rubric.py # 自动化评分脚本 (状态断言与结果提取)
2. 模块化与受限的 Scoped Skill 架构设计
不要试图写一个两万字的超级 System Prompt,也不要让 Agent 拥有重写底层调度逻辑的权限。ScienceBuddy 的做法是:将能力解耦成插拔式的微技能(Scoped Skills)。
每个 Skill 必须高度内聚,专注解决一个确定性的执行步骤。以下是基于 Python 的 Harness 核心组件设计模式示例:
python
from pydantic import BaseModel, Field
from typing import List, Dict, Callable, Optional
import subprocess
class ScopedSkill(BaseModel):
name: str = Field(..., description="技能唯一标识")
description: str = Field(..., description="何时触发该技能及前置条件")
procedure_rules: List[str] = Field(..., description="执行规范与严格约束")
example_snippet: Optional[str] = Field(None, description="少样本执行参考")
class AgentHarness(BaseModel):
version: str
system_instructions: List[str]
skills: Dict[str, ScopedSkill]
max_execution_budget: int = 15
def format_prompt(self, current_task: str) -> str:
"""组合轻量级上下文与精准路由的技能库"""
prompt = ["### 系统核心指令:"]
prompt.extend([f"- {inst}" for inst in self.system_instructions])
prompt.append("\n### 可用执行技能库 (Scoped Skills):")
for name, skill in self.skills.items():
prompt.append(f"#### 技能: {name}")
prompt.append(f"描述: {skill.description}")
prompt.append("执行规范:")
prompt.extend([f" * {rule}" for rule in skill.procedure_rules])
if skill.example_snippet:
prompt.append(f"代码模式参考:\n```python\n{skill.example_snippet}\n```")
prompt.append(f"\n### 当前待处理科研任务:\n{current_task}")
return "\n".join(prompt)
# 一个典型的生信数据湖检索 Skill 定义
bio_retrieval_skill = ScopedSkill(
name="bounded_datalake_lookup",
description="当需要从本地冷数据湖中检索基因组变异或已知靶点信息时使用",
procedure_rules=[
"严禁一次性读取全表!必须先使用 parquet 元数据查看列名与行数",
"查询基因坐标前,必须使用 cytoband 工具确认基因组参考版本 (hg19 或 GRCh38)",
"如果 search_datalake 返回记录为空,如实汇报 'No Dedicated Record',严禁模型联想脑补"
],
example_snippet="import pyarrow.parquet as pq\nschema = pq.read_schema('/opt/data/lake/hubs.parquet')\nprint(schema.names)"
)
3. 任务自适应 Rubric:解决没有 Ground Truth 的奖励稀疏难题
在数学或算法刷题中,答案对就是 1,错就是 0。但在科研中,一个复杂的探究可能包含:
- 是否遵循了指定生信流程的统计学规范?
- 代码是否无 Runtime Error 顺利退回?
- 产生的结论是否被提取的数据证据显式支撑?
- 是否生成了符合科学论文发表标准的结构化结果表?
ScienceBuddy 的打分机制采用了细粒度加权细则矩阵(Rubric Matrix):
Rx(τ)=∑c∈C(x)wc(x)∑c∈C(x)wc(x)⋅vc(x,τ)
- 确定性条件(如:必须输出特定命名的 CSV 结果文件、Python 执行无语法抛错):直接用测试脚本做硬断言(Deterministic Assertion)。
- 科学推断条件(如:对异常通路信号的生信合理解释):交给固定的裁判模型(Fixed Judge)按 0 到 1 打分。
| 评估维度 (Criterion) | 判定手段 (Evaluator) | 典型权重 ( wc) | 评价目的与防护重点 |
|---|---|---|---|
| 可执行性校验 | Shell / Python 自动化脚本 | 0.25 | 验证输出的分析脚本语法正确,无 NaN 污染或断点退出 |
| 数据源合规性 | 正则匹配 / 日志拦截 | 0.20 | 确保所有分析基于挂载数据湖的真实返回,杜绝模型幻觉 |
| 研究设计分层 | 规则引擎 + 语义判别 | 0.25 | 验证先做主效应与关联分析,再开展机制推演的流程顺序 |
| 结论证据对齐 | Fixed LLM Judge (严格约束) | 0.30 | 报告中的每一个量化数值,必须在执行日志中有对应的原始打印 |
4. 审计与交互:Chat、Trajectory、Compute 的三重视图解耦
传统的对话 UI 是给普通聊天准备的,科研人员根本无法信任一个黑盒文本框。ScienceBuddy 在工作台层面实现了一个至关重要的设计:多维状态分离。
- Chat 视图:纯粹的人机交互界面,仅呈现自然语言结论、结论图表和交互输入。
- Trajectory 视图 :单向不可变的事件日志流,精确展示模型的 ReAct 状态变化(Reasoning → Action → Observation)。
- Compute / Results 面板 :直接将底层容器环境暴露给研究员。每一个
query_uniprot或searchDataLake的调用入参、执行耗时、原始 JSON 返回,都可以被逐行审计。
这种设计不仅是工程交互的升级,更是高质量监督数据的天然过滤器------只有研究员点击确认并在下游分析中采纳的执行链路,才会被打上正向标签存入自进化经验池。
工程启示:构建垂直领域 Agent 的未来路径
从 PhAI Lab 这篇论文和工作台中,我们可以看到垂类 AI Agent 正在发生的技术范式转移:
- 告别纯 Prompt 工程,走向"程序元编程(Procedural Harness Optimization)"
模型的底层权重决定了它的通用能力下限,但 Harness 架构才决定了它在复杂专业场景落地的上限。把提示词和规则抽象成具有生命周期管理、测试集回归校验的模块化软件代码,是避免 Agent 劣化崩溃的唯一解法。 - "交互流"才是垂类模型后训练的核心壁垒
科研或专业领域没有现成的高质量 RL 环境。用户在界面上的每一次重跑、否定、追加约束,都是极其昂贵的真实偏好数据。搭建一个让用户愿意深度使用的工作台,将其转化为 Harbor Tasks 标准协议,实际上是在低成本、规模化地"印刷"领域内不可替代的训练集。 - 分层解耦的自进化节奏
不要试图在动态的上下文中同时调整 Harness 和梯度。采用"内层快迭、轻量搜索 Harness 规则,外层稳步收敛、拉升基础模型推理泛化度"的双层解耦策略,成本远低于大范围模型重训,稳定性却显著高于单一提示词迭代。
如果你正在构建法律、医疗、金融或科研等需要长程复杂探索的 Agent,不妨参考 ScienceBuddy 的架构,停下无休止拼接 System Prompt 的手工劳动,搭建属于你自己的 Harness 进化闭环。