跳转至

BixBench 基准测试分析报告

仓库:https://github.com/Future-House/BixBench 数据集:https://huggingface.co/datasets/futurehouse/BixBench 论文:https://arxiv.org/abs/2503.00096

BixBench 是 FutureHouse 与 ScienceMachine 合作发布的计算生物学 Agent 基准。它以真实发表的 Jupyter notebook 研究项目为基础,考察大模型 Agent 在「数据探索 → 多步分析 → 结果解释」链路上的能力。本报告从两个维度解析:任务(Task)工具(Tools)


一、任务(Tasks)的具体内容

1.1 数据集规模

  • 60 个 capsule(即 60 份真实、已发表的生物信息学研究 notebook + 原始数据包)。
  • 每个 capsule 对应一份 .zip,解压后包含 Data/ 目录(任务输入数据)和相关元信息。原始 Notebook/*.ipynb 在下发给 Agent 之前会被删除(见 bixbench/generate_trajectories.py:155_extract_and_process_files),避免泄露解法。
  • 205 道问题(v1.5,全部位于 HuggingFace 的 train split),每道问题绑定到一个 capsule,由领域专家依据原 notebook 的结论编写。
  • 问题在数据集中的字段包括:question_idquestionideal(正确答案)、distractors(干扰项,用于 MCQ)、data_folder(指向所属 capsule zip)、capsule_uuid、以及可选的 eval_mode(评分方式)。

1.2 三种问答模式

bixbench/models.py 中的 CapsuleSettings.mode 枚举定义:

模式 系统提示(data-analysis-crow/src/fhda/prompts.py) 题目形态 答案约束
open CAPSULE_SYSTEM_PROMPT_OPEN 开放式问答 纯文本答案,用 <answer>…</answer> 包裹
mcq CAPSULE_SYSTEM_PROMPT_MCQ 4 个选项的多项选择题(随机打乱) 单字母 <answer>A</answer>
hypothesis CAPSULE_SYSTEM_PROMPT_HYPOTHESIS 给出一个假设,Agent 判断真伪 <answer>True</answer>False

MCQ 模式可选择加入 Refusal Optioninclude_refusal_option)——第 5 个选项固定为 Insufficient information to answer the question。由 bixbench/utils.py:randomize_choices 产生,代码用此机制衡量模型"知道自己不知道"的能力。

1.3 两种评测范式

BixBench 同时提供:

  1. Zero-shot 基线generate_zeroshot_evals.py + bixbench/zero_shot.py) 只给 LLM 问题和选项,直接回答。不看数据,用作下限参考。
  2. Agentic 评测bixbench/generate_trajectories.py) 把 Agent 丢进一个含原始数据的 Jupyter notebook 环境里,限制最多 max_steps(配置里是 20–40)步工具调用,由 Agent 自己写代码、跑结果、提交答案。

1.4 任务下发的提示链(Chain-of-Thought Scaffold)

data-analysis-crow/src/fhda/prompts.py 定义,Agent 每次被要求按 4 个阶段思考(都会以 <analysis_planning> 标签预先规划):

  1. Load Data and Perform Descriptive Statistics(加载数据 + 描述统计)
  2. Develop Analysis Plan(制定分析方案)
  3. Execute Analysis Plan(写代码执行)
  4. Conclude and Submit Answer(归纳并提交)

此外还叠加通用指引 GENERAL_NOTEBOOK_GUIDELINES: - 单元格要小、通过索引编辑修 bug 而非追加; - 假设常用包已装好,遇报错才用 pip/mamba 安装; - 只能新建 代码单元格,不能写 markdown; - 可通过 %%bashsubprocess 执行 shell; - 默认避免画图:avoid_images=True 时叠加 AVOID_IMAGES 指令,要求用 table/print 代替。

当语言设为 R 时,还会追加 R_SPECIFIC_GUIDELINES(强制使用 tidyverse、显式 pkg::fn() 命名空间、ggplot2 画图等)。

1.5 评分机制

bixbench/graders.pybixbench/prompts.py 定义了 3 种评分器(由 evaluation_mode 字段选择):

evaluation_mode 逻辑
str_verifier 归一化后精确匹配(去除非字母数字、转小写)。MCQ 默认使用。
range_verifier 目标是 (lower, upper) 元组,数值答案落入即正确。
llm_verifier 由另一个 LLM(通常 gpt-4oclaude-3-5-sonnet)读取 OPEN_ENDED_GRADING_PROMPT,输出 <grade>correct/incorrect/refused</grade>。开放式问答默认使用。

MCQ 的"拒答选项"会被识别为 refused,从而区分"答错"与"主动承认不会"。

统计指标(bixbench/utils.py:compute_metrics)包含 Accuracy、Precision(不算拒答)、Coverage(答题率)。

1.6 后处理与多样性分析

bixbench/postprocessing.py + v1.5_paper_results.yaml 提供: - Majority Vote(k=5):同一模型跑 5 次副本,取多数票,用于复刻论文。 - Image vs. No-image 对比:带图/不带图的两版结果对比。 - Refusal vs. No-refusal 对比:有无 refusal 选项的 MCQ 准确率差异。 - Zero-shot 基线一起画在图里做对照。

配置中列出的对比组包括: claude_image_mcq_with_refusal4o_image_mcq_with_refusalclaude_no_image_mcq_with_refusal4o_no_image_mcq_with_refusal 等。


二、工具(Tools)的具体内容

Agent 接入的工具链完全由依赖库 fhdadata-analysis-crow v1.5.0)的 NBEnvironment / DataAnalysisEnv 暴露,而不是 BixBench 仓内直接写死。实现见 src/fhda/notebook_env.py:159-169

self.tools = [
    Tool.from_function(self.edit_cell),
    Tool.from_function(self.list_workdir),
    Tool.from_function(self.submit_answer),
]
if self.allow_download_from_gcs:
    self.tools.append(Tool.from_function(self.download_from_bucket))

即 Agent 默认只有 3 个工具(开启 GCS 下载后为 4 个)。工具签名如下:

2.1 edit_cell(contents: str, idx: int | None = None) -> str

  • 向 notebook 追加或覆盖一个代码单元格(不支持 Markdown)。
  • idx=None 时追加新单元格;给定索引则覆写对应单元格。
  • 每次成功调用后会自动从头到尾执行整个 notebook(Docker 内 jupyter nbconvert --to notebook --execute --inplace --allow-errors,本地模式则用 AsyncKernelClient 依次 execute),并把新产生的 outputs 写回;错误不中断执行,而是作为 cell output 返回给 Agent。
  • 执行超时 EXEC_TIMEOUT = 1200 秒;超时即强制结束回合。
  • 单 cell 输出长度被截断到 NB_OUTPUT_LIMIT = 3000 字符,两端各留 1500,中间以 <...output limited...> 省略。

2.2 list_workdir() -> str

  • 递归列出工作目录(capsule 数据 + 当前 notebook + 生成的中间文件),以嵌套 JSON 返回。
  • Agent 通过这个工具"看见"可用的原始数据文件名。

2.3 submit_answer(answer) -> str

  • 结束回合并记录答案。DataAnalysisEnv.submit_answer(覆盖基类)会把 state.answer 设好后立刻 close() 容器/内核,保证一次性提交。
  • 不同任务模式下答案格式受 prompt 约束:
  • open<answer>短答</answer>
  • mcq<answer>A/B/C/D/E</answer>
  • hypothesis<answer>True/False</answer>

2.4 download_from_bucket(bucket_path, path_in_workspace) -> str(可选)

默认 关闭allow_download_from_gcs=False)。当任务的数据放在 GCS 上时才暴露,作用是从桶里把目录拉到本地 /workspace。BixBench 官方任务把数据以 HuggingFace .zip 形式预下发,不依赖此工具。

2.5 底层执行环境(工具之外的"隐性能力")

虽然只暴露 3 个显式工具,但因为 edit_cell 运行的是一个完整 Jupyter 内核,Agent 事实上可以:

  • 执行任意 Python 代码(默认 kernel),通过 %%bashsubprocess、或以 ! 前缀执行任意 shell 命令;
  • 切换到 R(通过 %%R cell magic,或直接用 R kernel,配置 NBLanguage.R + USE_R=true);
  • 按需 pip/mamba 安装包(Docker 镜像中预装常见生物信息学/科学计算栈:matplotlib、scikit-learn、seaborn、statsmodels、nbformat、jupyter 等,由 pyproject + kernel_requirements.txt 给出);
  • 调用专业生物信息学工具。Prompt (BASH_TOOL_USAGE) 明确提示可用:
  • BUSCO(通过 udocker + ezlabgva/busco:v5.8.0_cv1 容器镜像)
  • mafft、clipkit、fastqc、iqtree、metaeuk、perl、phykit 等命令行工具。

容器镜像为 futurehouse/bixbench:aviary-notebook-envfhda/config.py),工作目录挂载在 /workspace。容器生命周期由 NBEnvironmentState.start_container / close 管理。

2.6 环境返回的观察(Observation)

NBEnvironment.get_env_state_msg 把 notebook 当前状态渲染成 Markdown(utils.view_notebook)回传给 Agent: - 每个 cell 前有 ### Cell i: 标题; - 代码单元格 + 输出原文; - 图片输出转成 base64 并以占位符 <n> 引用,真正的 image payload 通过 aviaryEnvStateMessage.images 字段传递给支持多模态的模型; - 表格/HTML 被过滤以避免 token 爆炸(JUPYTER_TABLE_OUTPUT_TYPES_TO_IGNORE)。

配置项 avoid_images=True 会在提示中叫模型"少画图、多用表格",配合关闭图片上下文节省成本。


三、Agent 与 Rollout 配置速查

来自 bixbench/run_configuration/*.yaml

典型值
agent.agent_type ReActAgent(claude 默认)或 SimpleAgent(4o 默认)
agent.agent_kwargs.llm_model.name gpt-4oclaude-3-5-sonnet-latestclaude-3-7-sonnet-20250219(底层通过 litellm 走,任意 LiteLLM 支持的模型都能接)
rollout.max_steps 20 (4o) / 40 (claude)
rollout.batch_size 4–24
rollout.rollout_type aviary(使用 ldp.alg.rollout.RolloutManager)、vanillacustom
notebook.language python / r
notebook.use_docker true(默认走 Docker)
capsule.mode open / mcq / hypothesis
capsule.include_refusal_option true / false
capsule.avoid_images true / false

替换 Agent 的入口在 bixbench/generate_trajectories.py:334custom_rollout 函数——重写该方法即可接入自定义 Agent,产物仍通过 postprocessing.py 评测。


四、要点提炼

  1. 任务形态:205 条来自 60 个真实研究的生物信息学问题,支持开放式 / 多选 / 假设验证三种形式;MCQ 可带/不带 refusal 选项。
  2. 任务难度源:不在"问对哪个选项",而在"能否从原始 .zip 数据出发,自主写/跑 Python/R/bash、排查报错、选择合适统计/生信工具链、推导结论"。
  3. 工具集极简:只有 edit_cell + list_workdir + submit_answer 三个显式工具(可选 download_from_bucket)。真正的"工具"是一整套 Dockerized Jupyter 环境 + 预装的生信命令行栈,通过 edit_cell 进入。
  4. 评分开放str_verifier / range_verifier / llm_verifier 三种模式并存,MCQ 默认字符串匹配,开放题默认 LLM 评分。
  5. 复刻友好:所有配置 YAML 化,可直接 python bixbench/generate_trajectories.py --config_file … + python bixbench/postprocessing.py --config_file … 产出论文里的柱状图和 majority-vote 曲线。