AI 能不能独立做科研?这个问题从 ChatGPT 出现开始就一直被讨论,但大多数讨论都停留在“AI 能帮我读文献、写代码、润色论文”这个层面。真正的问题是:如果没有人类全程盯着,AI 能不能自己发现问题、设计实验、跑数据、分析结论,最后形成一项站得住脚的研究成果?这就是清华近期备受关注的 ASI-Bench 试图回答的问题。它不是一篇科普文章,而是一个面向“科学自主性”的评测基准,用来衡量 AI 作为 Research Agent 到底能独立走完科研流程的哪一步。
这篇文章会把 ASI-Bench 拆开来看:它要评估什么、为什么传统评测基准不够用、一个科学自主性评测框架一般包含哪些维度和任务类型。同时,我会从工程角度给出自建同类测试环境的完整思路,包括任务数据格式、评测脚本、批量执行方式、结果聚合逻辑和常见坑。如果你以后要做 Agent 评测、给内部模型建能力基线,或者只是想知道“怎么量化 AI 的科研能力”,这篇文章可以直接收藏。
1. ASI-Bench 核心信息速览
先说结论。ASI-Bench 的定位是面向科学自主性的评测基准,核心对象是具备科研执行能力的 Agent 系统,而不是单轮问答模型。它想测的不是“这道题你会不会做”,而是“从一道研究问题出发,你能不能独立完成完整科研链路”。
| 信息项 | 说明 |
|---|---|
| 项目定位 | 科研自主性评测基准,面向 Research Agent |
| 要回答的问题 | AI 能否独立完成科学研究的核心环节 |
| 评估对象 | 科研 Agent、论文级模型、自动推理系统 |
| 区别于传统基准 | 更关注多阶段、长链路、工具调用与决策能力 |
| 典型任务类型 | 假设生成、实验设计、数据推导、结果分析、论文写作 |
| 标注方式 | 通常结合规则校验和模型评审 |
| 硬件要求 | 取决于被测模型,云端 API 或本地多卡均可 |
| 是否支持 API | 基准本身可封装为评测服务,被测模型走接口接入 |
| 是否支持批量任务 | 支持,评测任务天然适合批处理 |
| 适合读者 | LLM 应用开发者、Agent 开发者、评测工程师、科研管理相关技术人员 |
需要说明的是,这里的部分信息来自对 ASI-Bench 名称和论文定位的合理推断。如果你手上有论文全文或官方仓库,属于论文明确给出的参数、数据和方法细节,请以原论文和官方代码为准。下面我展开分析为什么需要这类基准,以及它的评测框架会怎么搭。
2. 为什么需要 ASI-Bench 这类科学自主性评测基准
2.1 传统评测基准的局限
传统基准比如 MMLU、GSM8K、HumanEval,测的是单点能力。MMLU 测知识广度,GSM8K 测数学推理,HumanEval 测代码生成。它们都是“给一个问题,出一个答案,对一下标准结果”的封闭式评测。这种模式对模型能力的横向对比很有用,但和真正的科研工作方式相差很远。
科研是一个链式过程。拿到一个问题之后,你需要:
- 检索和阅读相关文献;
- 识别当前方法存在的问题;
- 提出可验证的科学假设;
- 设计实验来验证假设;
- 编写代码或配置实验环境获取数据;
- 分析数据,判断结果是否支持假设;
- 把结论写成论文,并回应可能的质疑。
传统基准没有覆盖这个链路。它只考核链路中的某个片段,而且片段之间是割裂的。因此模型在 MMLU 上表现好,不代表它能独自推进一项研究。
2.2 Research Agent 需要新的评测维度
最近一两年,研究型 Agent 越来越多。有的 Agent 能读论文库辅助选题,有的能自动写代码跑实验,有的能生成论文初稿。但评测一个 Agent 是否“能科研”,需要一套更完整的指标体系。ASI-Bench 的核心贡献就是把这个“更完整的指标体系”提出来,让评测从“答题正确率”升级为“科研自主度”。
科研自主度可以拆成几个关键维度:
- 任务分解能力:面对一个开放式问题,能否拆出合理的工作步骤;
- 工具调用能力:是否会调用搜索引擎、文献数据库、代码解释器、绘图工具;
- 条件约束能力:在预算、时间、算力资源有限的情况下,能否选择可行方案;
- 推理可追溯性:每一步决策是否有文献依据或逻辑依据;
- 结果可验证性:最终输出能否被独立验证,而不是自说自话。
一个设计良好的评分体系,应该让以上五个维度都有可量化的观测点。
3. ASI-Bench 评测框架的设计思路
关于 ASI-Bench 的具体网络架构和评分权重,我这里没有看到完整论文内容,所以不做编造。但一个面向科学自主性的评测基准,在通用设计思路上通常有这些阶段。
3.1 科学自主性分层
评测基准首先需要定义“自主”的等级。常见分层方法是按人类干预程度划分:
| 层级 | 定义 | 人类参与程度 |
|---|---|---|
| L1 | 工具增强型 | 人类全程决策,AI 只做检索、生成辅助内容 |
| L2 | 局部自主型 | 人类设定目标,AI 完成部分子任务,例如假设生成或实验代码 |
| L3 | 流程自主型 | 人类只提供资源和约束,AI 完成实验设计到结果分析 |
| L4 | 完全自主型 | AI 自主发现问题、设定研究计划、执行并产出论文,人类只做最终确认 |
ASI-Bench 这类基准要测的核心层级大概是 L2 到 L4。评测时会给 Agent 一个研究问题描述、一套可用的工具接口和资源,然后记录它的行为链路,而不是只看最终答案。
3.2 评测任务类型设计
按科研流程划分,任务类型可以包括:
- 文献综述与问题定位:给定一个研究领域,让 Agent 总结研究现状,找出至少一个值得深入的问题。
- 假设生成:给定背景材料和数据,让 Agent 提出可检验的假设,并说明检验方式。
- 实验方案设计:给定研究目标和可用资源,让 Agent 设计实验组、对照组、变量控制方案。
- 数据处理与结果分析:给定一份模拟或真实数据集,让 Agent 完成清洗、统计检验和结论提取。
- 图表解读:给出一张论文图表,让 Agent 解释其含义,并指出可能存在的误导。
- 论文写作与润色:给定研究数据和分析结果,让 Agent 撰写结构化摘要,或完成论文某个章节。
每个任务都要有明确的输入、预期输出格式和评分标准。如果评分标准不明确,模型能力的差异就无法被稳定测量。
4. 一套可落地的 Research Agent 评测数据格式
无论 ASI-Bench 官方如何组织数据,站在工程角度,一个可扩展的评测基准应当使用结构化的任务格式。下面给出一个通用 JSON 任务格式,你可以按自己的项目需要调整。
{ "task_id": "asi_bench_0001", "phase": "experiment_design", "domain": "computational_biology", "difficulty": "medium", "background": "给定一个基因表达数据集,目标是判断某种药物处理是否显著改变特定通路活性。", "question": "设计一个完整的分析流程,包含数据预处理、差异表达分析、通路富集分析和可视化方案。", "resources": [ "data/expression_counts.csv", "data/metadata.csv", "docs/ref_papers.md" ], "constraints": [ "必须给出每一步可执行的代码或伪代码", "必须说明每一步的输入输出格式", "流程总步数不超过 8 步" ], "expected_output": { "type": "markdown", "structure": ["overview", "pipeline_steps", "expected_charts", "quality_control"] }, "judge": { "method": "rule_and_llm", "rules": ["步骤完整性", "合理性", "可执行性"], "llm_system_prompt": "你是一名计算生物学专家,请从方法论合理性角度评价以下实验设计方案。" } }这个格式的好处是:任务创建、模型调用、结果评分三个阶段完全解耦。测试时替换question和judge字段,就能快速扩展新任务。
5. 自建 ASI-Bench 风格评测流水线
拿到上面的任务格式,下一步是搭评测流水线。这里提供一个最小可运行的设计,被评测对象假设是任意支持对话补全的 LLM API。
5.1 评测流水线整体结构
tasks.json -> task_loader(读取任务) -> agent_runner(调用被测模型,收集回复) -> judge(规则评分 + LLM 评审) -> report(汇总输出 CSV/JSON)5.2 Python 评测脚本示例
下面是一个通用评测脚本,你需要按实际模型接口调整请求方式和认证信息。
# eval_pipeline.py # 通用 Research Agent 评测脚本,使用前请替换模型 API 配置 import json import time from datetime import datetime def load_tasks(path: str) -> list: with open(path, "r", encoding="utf-8") as f: return json.load(f) def build_user_prompt(task: dict) -> str: prompt = f"研究背景:{task['background']}\n" prompt += f"研究问题:{task['question']}\n" prompt += "约束条件:\n" for c in task.get("constraints", []): prompt += f"- {c}\n" prompt += "\n请按照 expected_output 的结构输出结果。" return prompt def call_agent(task: dict, api_config: dict) -> str: # 这里替换为目标模型的真实调用方法 # 示例使用的是 OpenAI 兼容接口,实际项目按自己的端点和 key 调整 import openai client = openai.OpenAI( api_key=api_config["api_key"], base_url=api_config["base_url"] ) response = client.chat.completions.create( model=api_config["model_name"], messages=[ {"role": "user", "content": build_user_prompt(task)} ], temperature=0.2, max_tokens=2048 ) return response.choices[0].message.content def run_eval(task_file: str, api_config: dict, output_file: str): tasks = load_tasks(task_file) results = [] start_time = datetime.now() for idx, task in enumerate(tasks, 1): task_start = time.time() try: agent_output = call_agent(task, api_config) success = True error = "" except Exception as e: agent_output = "" success = False error = str(e) elapsed = time.time() - task_start results.append({ "task_id": task["task_id"], "phase": task.get("phase"), "success": success, "elapsed_sec": round(elapsed, 2), "output": agent_output, "error": error }) print(f"[{idx}/{len(tasks)}] {task['task_id']} success={success} time={elapsed:.1f}s") summary = { "total": len(results), "success_count": sum(r["success"] for r in results), "start_time": start_time.isoformat(), "end_time": datetime.now().isoformat() } with open(output_file, "w", encoding="utf-8") as f: json.dump({"summary": summary, "results": results}, f, ensure_ascii=False, indent=2) print(f"评测完成,结果已写入 {output_file}") if __name__ == "__main__": # 实际运行前请替换这些配置 run_eval( task_file="tasks.json", api_config={ "api_key": "YOUR_API_KEY", "base_url": "https://YOUR_ENDPOINT/v1", "model_name": "YOUR_MODEL_NAME" }, output_file="eval_results.json" )5.3 命令行启动评测
# 启动评测 python eval_pipeline.py # 如果只需要跑其中一个阶段 python eval_pipeline.py --filter phase=experiment_design实际项目里可以在脚本里加参数解析,比如task_file、model_name、concurrency、output_dir。
6. 批量任务与并发执行
ASI-Bench 这类评测通常有几十到几百个任务。逐个串行跑会很慢,尤其是本地部署大模型时。正确做法是引入并发执行和失败重试。
6.1 并发评测设计
# batch_runner.py # 批量评测任务的并发执行示例 import json import time from concurrent.futures import ThreadPoolExecutor, as_completed def process_one(task, api_config): # process_one 内部调用 call_agent,见前文 try: output = call_agent(task, api_config) return {"task_id": task["task_id"], "status": "ok", "output": output} except Exception as exc: return {"task_id": task["task_id"], "status": "failed", "error": str(exc)} def run_batch(tasks, api_config, workers=4, max_retry=2): results = [] for attempt in range(max_retry): pending = [t for t in tasks if t.get("_status") != "ok"] if not pending: break with ThreadPoolExecutor(max_workers=workers) as executor: future_map = {executor.submit(process_one, task, api_config): task for task in pending} for future in as_completed(future_map): result = future.result() if result["status"] == "ok": results.append(result) else: task = future_map[future] # 记录重试信息 task["_status"] = "retry" task["_last_error"] = result["error"] # 超过重试次数后放弃 if attempt >= max_retry - 1: results.append({ "task_id": task["task_id"], "status": "failed", "error": result["error"] }) time.sleep(2) # 防止过快请求导致限流 return results6.2 批量评测注意事项
- API 有速率限制时,并发数不要开太大,先试
workers=4; - 本地推理模型时,显存不够就降低并发或改用批量推理;
- 每个任务都要记录
elapsed_sec和status,方便统计超时和失败; - 评测结果分文件保存,一次评测一个文件,避免丢失。
7. 评测结果的判定与质量观察
7.1 评分策略
评分是评测基准的核心,也是争议最大的部分。常见方案有两种:规则评分和模型评分。
规则评分适合有明确答案的任务,比如“流程是否包含差异表达分析”“是否输出可视化代码”。优点是稳定、可复现,缺点是覆盖不了开放性问题。
模型评分适合论文写作、方案合理性这类任务。做法是让一个强 LLM 扮演领域专家,按评分维度输出分数和理由。优点是灵活,缺点是可能存在评分者偏差,因此需要多次采样取平均。
一个稳妥的方案是两者结合:
{ "judge": { "method": "hybrid", "rules": [ {"name": "步骤完整性", "weight": 0.3}, {"name": "可执行性", "weight": 0.3} ], "llm": { "model": "judge_model", "dimensions": ["逻辑性", "创新性", "内容与背景相关性"], "sampling_times": 3 } } }7.2 解读结果时重点观察什么
- 成功率:多少任务没有返回结果或直接报错;
- 平均响应时间:反映 Agent 的推理效率;
- 阶段性失败率:哪个科研阶段失败率最高,说明 Agent 在该能力上存在短板;
- 结果方差:不同任务之间表现波动大不大;
- 幻觉比例:输出内容里存在多少编造的数据或引用。
8. 常见问题与排查方法
自建 Research Agent 评测流水线会遇到各种问题,这里整理一份排查清单。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 评测任务加载失败 | JSON 格式错误或字段缺失 | 检查任务文件并用 json.tool 校验 | 补全必填字段,统一 schema |
| 大量任务超时 | 模型响应过慢或上下文过长 | 查看耗时分布,定位超时任务 | 减小 max_tokens、降低并发或增加超时阈值 |
| 模型接口调用失败 | API key 错误、接口地址不对、限流 | 先用 curl 验证接口连通性 | 检查配置,按说明重试 |
| 输出内容不完整 | 上下文窗口不足 | 检查报错信息里的 token 数 | 截断背景材料或改用支持长上下文的模型 |
| 评分结果不稳定 | 模型评分采样次数不足 | 多次运行对比评分分布 | 增加采样次数,降低 temperature |
| 评测结果无法复现 | 模型设置为非确定性推理 | 固定 seed 和 temperature | 统一推理参数,设置 temperature=0 |
| 本地推理显存不足 | 模型参数量过大 | 查看显存监控日志 | 换小模型或开启量化推理 |
| 批量任务某个阶段卡死 | Agent 进入循环或死锁 | 查看日志中的重复调用 | 增加步数上限、循环检测和超时中断 |
9. 使用边界与合规注意事项
ASI-Bench 这类基准讨论的是“AI 做科研”,但这不意味着 AI 生成的结论可以直接作为科学结论发布。在工程应用和科研流程里,必须明确以下边界。
- 数据授权:评测任务里用到的论文、数据集、图表,必须确认具有合法使用和再分发权限。
- 隐私保护:如果任务数据涉及患者信息、个人信息或未公开实验数据,任何环节都不应脱离授权环境处理。
- 学术诚信:AI 辅助生成论文内容可以,但作者署名、数据真实性、实验可复现性仍是研究者的责任。发布前必须复核 AI 生成的结果,确认没有编造实验数据或虚假引用。
- 版权边界:模型可能从训练数据中学到受版权保护的表达,生成内容用于商用前要做查重和来源核对。
- 测试环境安全:本地部署模型时,做实验和评测的服务器尽量与生产环境隔离,避免测试脚本误操作影响线上服务。
- 避免不当用途:任何将 AI 技术用于伪造数据、规避检测、生成误导性科研内容的行为都不可接受。
评测基准本身是中性工具,衡量 AI 能力上限。技术使用者要在真实科研场景中守住合规底线。
10. 最佳实践:构建高质量 Research Agent 评测
如果你按照 ASI-Bench 的思路自建一套评测体系,下面几点是实际项目中比较有用的做法。
第一,先小规模试跑。不要一上来就设计 500 道题全量跑。先选 20 到 30 道覆盖各阶段的题目,跑通流程后再扩展。
第二,任务难度要有梯度。全部是难题会拉不开模型差距,全部是简单题又会造成分数虚高。按难度分层设计,才能更好地区分模型能力。
第三,评分标准要提前固化。如果评测目标是横向对比模型,评分维度、权重和规则在评测过程中不能随意改动,否则结果不可比。
第四,每道任务要有“参考答案”或“参考评分点”。没有参考信息,模型评分容易天马行空;有参考评分点,才能保证不同模型输出被公平比较。
第五,保留完整日志。Agent 调用历史、模型输出、评分记录、错误信息都要落盘,方便事后复现问题。评测工程最大的坑不是模型不行,而是结果出问题时查不到原因。
第六,做好任务库版本管理。任务文件用 Git 管理,每次改动记录版本。这样模型升级后回测,可以清楚知道基线变化是因为模型还是因为评测任务改了。
11. AI 科研自主性的评测难点
即使是 ASI-Bench 这类基准,要准确衡量 AI 的科研自主性,依然有几个很难绕开的难点。
一是科研任务很难被完全标准化。真实科研充满偶然性,一个实验失败可能转向另一个方向,这个过程中 Agent 的决策是否合理,很难用固定的评分项覆盖。
二是存在数据泄漏风险。如果基准任务基于公开论文数据设计,模型在训练时可能已经见过类似问题,测试结果会被高估。
三是“自主性”和“正确性”不完全等价。一个 Agent 可能做了很多自主决策,但方向全错;另一个 Agent 可能每一步都问人,最终结果反而更可靠。基准需要同时考核自主程度和结果质量。
四是长链路评测的成本问题。完整的科研 Agent 评测需要多次模型调用、工具调用和临时文件读写,单个任务的成本可能是普通问答评测的几十倍。做评测预算时要把这个成本考虑进去。
这些问题不只是 ASI-Bench 一家面临的,整个 Agent 评测领域都在探索更好的方案。
12. 下一步可以怎么做
如果你对 AI 科研自主性感兴趣,建议从两个方向入手。
研究方向:读 ASI-Bench 论文原文,关注它的任务设计、指标体系和实验设置。重点关注它选用了哪些科研领域、哪些任务类型、如何计算综合得分。这些信息能直接用来改进自己的评测思路。
工程方向:用上面的通用评测框架,先搭一个最小验证闭环。找几个测试任务,跑两个能力差距明显的模型,看评测结果能不能稳定区分它们。跑通之后,再逐步扩展任务数量和评分维度。
从实际使用角度看,ASI-Bench 这类基准最大的价值不是给出一个排行榜,而是把“AI 能不能做科研”这个口号式问题,变成了可量化、可比较、可迭代的工程问题。对做 Agent 的人来说,这种转变比争论 AI 是否具备意识更有意义。
先跑通一个最小闭环,再谈完善。这是做评测最实用的起点。