32 分钟不是完成科研:多智能体读脑图谱,突破在哪里?

本文解读OpenAI与PerturbAI等合作的多智能体系统,利用GPT-Rosalind框架在32分钟内完成小鼠脑基因扰动数据(770万细胞)的分布式分析。重点不在于全自动科研,而在于将大规模生物数据解释任务拆解为可并行、可追溯证据的子单元。系统未替代实验,而是加速假设生成与线索梳理,强调中间分析过程的可验证性、任务划分合理性及开放程度边界。

32 分钟不是完成科研:多智能体读脑图谱,突破在哪里?

在这里插入图片描述

封面为 AI 生成的概念示意,不是论文原图、真实脑组织影像或实验结果。

  • 系列:AI 前沿观察:人物、突破与证据
  • 解读日期:2026-10-22
  • 资料截止:2026-10-22 15:27(北京时间)

如果数千个 AI 智能体只用 32 分钟,就能梳理一份庞大的脑科学数据,我们应该惊讶什么?是模型终于能“独立做科研”,还是科研流程中的某个环节开始出现新的组织方式?

10 月 21 日,OpenAI 公布了与 PerturbAI、Scripps Research 合作的研究:利用基于 GPT-Rosalind 的多智能体系统,解释一份已经存在的小鼠脑基因扰动数据,整理潜在研究线索。32 分钟是团队报告的这次并行分析用时,不是从实验设计到机制验证的全过程。官方研究介绍

对应预印本实际上已于 10 月 16 日发布。因此,这篇文章解读的是近期公告,不是宣称今天刚诞生了一篇新论文。预印本摘要与发布日期

这次被加速的,究竟是什么?

先把“做实验”和“解释实验”分开。

本项目使用的脑图谱来自既有实验。数据卡显示,它包含约 770 万个细胞的记录,研究者通过大规模 CRISPR 干预和单核 RNA 测序,观察基因改变后不同细胞的表达变化。可以粗略理解为:先对生物系统施加扰动,再测量它如何响应。AI 并没有在半小时内完成这些生物实验。原始数据卡

预印本摘要描述的分工是:让多个智能体分别研究实验的不同部分,再汇总解释。作者报告,系统在没有获得原研究文稿的情况下恢复了其中一些结论,并尝试预测留出的扰动效果。研究摘要

我的理解是,这更像把一项庞大的资料解读工作拆给多个分析员,而不是让一个模型凭空发现生命规律。 每个分析单元都需要回到数据和文献,最后留下的也应当是可以追查、质疑和检验的解释。

值得关注的不是“人多”,而是任务怎样拆

多智能体本身并不保证高质量。把同一个问题问一千遍,可能只会得到一千份相似答案。

这个案例给科研工作者的启发,是优先寻找有独立分析意义的任务单元。对于这类数据,基因扰动与细胞类型提供了自然的划分维度。一个合理的问题是:能否让每份解释都对应明确的观察对象,而不是让所有智能体泛泛讨论整个项目?

作者公开的仓库提供了智能体框架、报告语料和用于论文分析的材料;其中,基于已保存结果重建分析,与重新调用模型生成结果,是两种不同的操作。公开展示服务也不包含重新计算统计量所需的全部原始数据。这些区别提醒我们:“可以浏览输出”“可以复算已有结果”和“能够独立重跑”,不是同一个开放程度。作者代码仓库

对研究者而言,比“用了多少个智能体”更有意义的问题,是中间证据是否足够完整,足以让另一个人定位某条结论究竟从何而来。

三个容易被标题掩盖的边界

第一,墙上时钟的时间,不等于总科研成本。 32 分钟很醒目,但并行运行会把许多计算任务压在同一时间段内。理解这类结果时,应分别检查并发规模、累计模型调用、数据准备和人工审核投入。团队对人工耗时的估计,也不能直接当作同条件计时实验的结果。这里提出的是阅读比较结果的方法,不是断言论文没有考虑这些因素。

第二,专家更喜欢一份报告,不等于报告里的机制已经被证实。 摘要报告了盲评专家对多智能体解释的偏好。它能支持“报告有研究参考价值”的判断,却不能替代后续实验。表述完整、引用丰富和生物学正确性,需要分别检验。预印本摘要

第三,多个公开入口,不等于多个独立研究团队已经复现。 官方博客、作者仓库和预印本属于同一研究工作的不同材料,不能累加成三次外部验证。实验室目前也将该工作列在 bioRxiv 预印本栏目;不应把它介绍成已经完成同行评审的定论。Jin Lab 论文列表

科研读者可以从哪里开始?

不必第一天就追求上千个智能体。更有价值的起点,是选择一个自己熟悉、能够判断对错的小任务。

例如,固定一个数据子集,让单智能体和分工明确的多智能体使用相同工具与总预算。提前写清楚评价标准:哪些结论能被数据直接支持,哪些需要文献补充,哪些只是合理猜测。不要等读完结果后,才挑选对某种方案有利的指标。

还可以抽取几条看起来最有说服力的结论,逐层回查数据、分析步骤和原始引用。一个小而扎实的核验,往往比统计“生成了多少页报告”更能检验科研价值。这是本文提出的后续实验思路,并非已经完成的复现结果。

对这个案例,我更期待看到两个后续信号:独立数据上的表现,以及预先提出的线索经新实验验证后的结果。前者关乎能否推广,后者关乎是否真正推动发现。

今天可以得出什么判断?

这项工作的意义,不是已经证明科研可以全自动完成,而是展示了一条值得认真研究的路径:把大规模数据的解释拆成可并行处理、可保留证据的工作单元。

“更快形成值得验证的问题”和“已经给出可靠答案”,中间仍有一段路。 分清这段距离,既不会低估进展,也不会把一个有希望的研究方向提前写成终局。

参考资料与阅读范围

  1. OpenAI:Using thousands of AI agents to uncover new leads in biological data,2026-10-21;已阅读公告正文。
  2. Sun 等:Distributed AI agents enable comprehensive discovery of biological insights at scale,2026-10-16,bioRxiv 预印本;已核对原站检索返回的摘要、日期与作者信息,全文页面访问受限,本文不据此声称完成了方法和补充材料审阅。
  3. 作者代码与分析仓库:distributed_agent,已阅读 README;本文没有下载完整数据或运行复现实验。
  4. PerturbAI Brain-Wide In Vivo CRISPR Atlas 数据卡,已核对数据规模、测量方式与字段说明。
  5. Jin Lab:Papers and Preprints,用于交叉核对论文归属与预印本状态,不构成独立实验验证。

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zzj_tju

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值