ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Claude挖掘噬菌体DNA新酶系统:10次重跑全失败,AI科研可复现性警钟

Claude挖掘噬菌体DNA新酶系统:10次重跑全失败,AI科研可复现性警钟 1. 这件事到底发生了什么先把这个标题拆开看。核心信息其实就三层第一有人用 Claude 去做噬菌体 DNA 里的新酶系统挖掘而且挖到了跟 CRISPR 类似的东西第二Anthropic 自己复现的时候把同一个任务重跑了 10 次结果 10 次全都没命中第三这件事本身比AI 发现新酶更值得聊因为它暴露了一个很现实的问题——大模型在科研场景里的可复现性到底靠不靠谱。我先把结论摆前面这不是AI 不行也不是AI 要取代生物学家而是一次非常典型的单次惊艳、多次翻车的案例。它真正有价值的地方是逼着我们把AI 辅助科研从抽奖式使用拉回到工程化使用。噬菌体 DNA 是什么概念噬菌体是专门感染细菌的病毒基因组通常很小几万到几十万个碱基对但里面塞满了各种军备竞赛演化出来的工具酶。CRISPR-Cas 系统最早就是从细菌和噬菌体的免疫对抗里被发现的。所以在噬菌体 DNA 里找类 CRISPR 新酶系统这个方向本身逻辑是通的——噬菌体为了对抗细菌的防御系统会编码各种反防御蛋白而这些蛋白往往和核酸酶、解旋酶、核酸结合模块相关。你要找的新酶系统大概率就藏在这些功能未知的开放阅读框里。那 Claude 在这里扮演什么角色不是它自己去测序、去跑凝胶电泳而是让它做序列层面的模式识别和功能推断给它一段噬菌体基因组让它找出可疑的基因簇、推断蛋白结构域、给出可能的催化机制假设、甚至设计验证实验。这类任务对语言模型来说本质上是长上下文里的弱信号检索 领域知识推理。问题就出在这。Anthropic 重跑 10 次全错过说明这个任务对模型来说不是稳定能力而是概率事件。第一次命中可能是提示词、上下文顺序、采样温度、甚至模型内部随机性共同凑出来的结果。换一次运行同样的输入模型走了另一条推理路径就绕过了正确答案。这件事对做 AI for Science 的人是一个警钟你不能把一次成功的 demo 当成可交付的方法。科研里最忌讳的就是我跑出来一次因为生物学实验本身就讲究重复性你用一个不可重复的工具去辅助一个要求可重复的领域中间那道缝必须补上。2. 为什么重跑 10 次全错过反而是最有价值的信息2.1 单次命中背后的随机性来源很多人看到10 次全错过第一反应是模型变笨了或者Anthropic 在自黑。但从工程角度看这 10 次失败才是真实基线那 1 次成功才是异常值。大模型做序列分析时随机性来源至少有这几个采样温度只要不是贪心解码每次输出都会不同。科研任务里温度设 0.7 和设 0结果可能天差地别。上下文顺序噬菌体基因组动辄几万 token你把目标基因簇放在 prompt 开头还是结尾模型的注意力分配完全不同。这就是经典的lost in the middle现象。提示词措辞你问这段序列里有没有类似 CRISPR 的系统和问请逐帧扫描并列出所有可能的核酸酶模块模型走的推理链完全不一样。思维链长度让模型先输出推理过程再给结论和直接要答案命中率能差出好几倍。我自己的经验是做这类大海捞针式的序列挖掘温度必须压到 0 到 0.2而且要把候选区域显式地切出来喂给模型而不是让它在一个巨大基因组里自己找。你让模型在 5 万个碱基里找信号等于让一个人在图书馆里凭记忆找一句话它大概率会给你一个看起来合理的答案而不是正确答案。2.2 科研场景对可复现的硬要求生物学实验有个铁律一次结果不算结果至少三次独立重复。这不是形式主义是因为生物系统噪声太大。你做一个酶活实验今天阳性明天阴性太正常了可能是试剂批次、温度、pH、甚至操作手法的问题。AI 辅助科研如果引入了一个每次都不一样的环节那整个流程的可复现性就被破坏了。你没法在论文方法部分写我们用 Claude 跑了一次它找到了。审稿人第一个问题就是换个模型、换个时间、换个提示词还能找到吗所以 Anthropic 重跑 10 次这个动作本质上是在做鲁棒性测试。结果告诉我们当前这类模型在开放式序列功能发现任务上鲁棒性不达标。这不是否定 AI而是明确了边界——它适合做假设生成不适合做假设验证适合做候选排序不适合做唯一裁决。2.3 这件事对普通开发者的启示你可能不做生物但你一定做别的领域。这个案例的通用教训是任何依赖大模型做发现类任务的场景都必须把单次输出降级为候选之一然后用确定性手段去交叉验证。比如你用 Claude 做代码审计找漏洞它报了一个 SQL 注入你不能直接信得手动确认。你用 Claude 做日志异常检测它标了一个可疑 IP你得去查原始日志。模型负责缩小搜索空间人或者确定性程序负责最终判定。这个分工一旦搞反就会出问题。3. 如果我来复现这个任务会怎么搭流程既然标题里提到了 Claude、CRISPR、DNA、酶这些关键词我就按用大模型辅助噬菌体基因组挖掘这个场景给一套可落地的流程。这套流程的核心思想是把模型的随机性关进笼子里用工程手段换稳定性。3.1 数据准备先把基因组切成可管理的块噬菌体基因组虽然小但直接整条塞进 prompt 也不是好主意。我的做法是从公共数据库拿到目标噬菌体的全基因组 FASTA。用 Prodigal 或 GeneMark 做基因预测拿到所有 ORF 的蛋白序列。用 HMMER 对每个蛋白跑 Pfam 或 NCBI CDD 注释先把有已知结构域的标出来。把功能未知但含有核酸结合/核酸酶相关结构域的 ORF 单独拎出来作为重点候选集。这一步的意义是不要让模型做它不擅长的全基因组扫描而是让它做它擅长的候选精排。你先把 5 万碱基缩到 20 个候选蛋白再让模型逐个分析命中率会高得多。# 基因预测示例 prodigal -i phage.fasta -a proteins.faa -o genes.gbk -p meta # 结构域注释示例 hmmscan --domtblout domains.tbl Pfam-A.hmm proteins.faa3.2 提示词设计把找变成判断这是最关键的一步。很多人失败就失败在提示词太开放。差的提示词这段噬菌体 DNA 里有没有类似 CRISPR 的新酶系统好的提示词下面是一个噬菌体蛋白序列。请完成三件事第一列出它可能包含的结构域及其位置第二判断它是否可能具有核酸酶或核酸结合功能给出理由第三如果可能推测它属于哪类已知系统如 HNH、RuvC、Cas 相关等。如果不确定明确说不确定不要编造。看出区别了吗后者把任务拆成了可验证的子步骤而且给了模型说不确定的出口。模型最怕的就是被逼着给一个确定答案它就会硬编。3.3 多次采样 投票用数量换稳定既然单次不可靠那就跑多次。我的做法是温度设 0.2对同一个候选蛋白跑 10 次。每次让模型输出结构化的 JSON{domain: [...], function: ..., confidence: 0-1}。统计 10 次结果里哪些判断是一致的哪些是飘的。只保留一致性超过 70% 的判断进入下一轮。import json from collections import Counter def aggregate_runs(runs): domain_votes Counter() for r in runs: for d in r[domain]: domain_votes[d] 1 threshold len(runs) * 0.7 stable [d for d, c in domain_votes.items() if c threshold] return stable这套逻辑说白了就是三个臭皮匠。单次模型可能跑偏但 10 次里如果有 7 次都指向同一个结构域那这个信号就值得信。反过来如果 10 次结果五花八门那说明这个候选本身信号就弱直接降级。3.4 确定性验证把模型输出接回真实工具模型说这个蛋白可能有 HNH 核酸酶结构域你不能就这么信。下一步必须用确定性工具验证用 HMMER 单独比对 HNH 的 HMM 模型看 E-value。用 AlphaFold 或 ESMFold 预测结构看有没有典型的核酸酶折叠。用 Foldseek 在 PDB 里搜结构相似性。只有模型判断和确定性工具判断同时指向一个方向这个候选才进入实验验证清单。这一步是整个流程的安全阀没有它前面所有工作都是空中楼阁。4. 实操中踩过的坑和排查技巧4.1 模型幻觉结构域怎么破最常见的坑是模型会编造一个听起来很专业但根本不存在的结构域名字。比如它可能说这个蛋白含有 Cas12-like RuvC 结构域但你用 HMMER 一跑E-value 是 3.5等于没信号。排查方法很简单任何模型提到的结构域必须能在 Pfam 或 InterPro 里查到对应的条目。查不到直接判为幻觉。我一般会维护一个白名单只允许模型从白名单里选结构域不允许它自由发挥。4.2 长序列截断导致信号丢失噬菌体蛋白一般不长200 到 500 个氨基酸居多但偶尔有超过 1000 的。如果你用的模型上下文有限长蛋白会被截断关键结构域可能正好在被截掉的那段。解决办法是滑窗把长蛋白切成 300 氨基酸的窗口重叠 100每个窗口单独分析最后合并结果。这样虽然调用次数多了但不会漏。4.3 提示词里的诱导性提问这是最隐蔽的坑。如果你在提示词里写这个蛋白是不是 CRISPR 相关酶模型会倾向于回答是因为它被你的措辞带偏了。这叫确认偏误。正确做法是中性提问请判断这个蛋白的功能类别选项包括核酸酶、解旋酶、核酸结合蛋白、结构蛋白、未知。 把 CRISPR 从选项里拿掉看模型自己会不会往那个方向靠。如果它主动提那才是真信号。4.4 常见问题速查表问题现象可能原因排查动作10 次结果全不一样温度太高或提示词太开放温度降到 0.2任务拆细模型总说是提示词有诱导性改中性提问去掉倾向词结构域查不到模型幻觉白名单约束HMMER 验证长蛋白分析不全上下文截断滑窗切分重叠合并结果无法复现缺少固定随机种子固定 seed记录完整 prompt5. 这套方法能迁移到哪些场景别以为这只跟生物有关。这套多次采样 投票 确定性验证的框架可以搬到很多领域。代码漏洞挖掘让模型对同一段代码跑 10 次标出可疑行取交集。交集里的漏洞才值得人工确认。单次报的漏洞大概率是误报。日志异常检测同一批日志跑多次让模型标异常时间点取高频交集。这样能过滤掉模型随机发挥的部分。文献信息抽取让模型从同一篇论文里抽实验参数跑多次取一致值。不一致的字段标记为需人工核对。合同条款审查同一份合同跑多次标风险条款取交集。交集外的单次命中降级为提示。核心逻辑是一样的大模型是概率机器你要用统计手段把概率信号变成稳定信号。单次输出永远只是一个样本不是结论。6. 我个人的几点实操体会第一不要把模型的第一次成功当成能力。我第一次用模型做序列分析时它一次就命中了一个已知的核酸酶我当时觉得太神了。后来重跑发现它 10 次里只对了 2 次。那 2 次成功让我误判了它的真实水平。现在我养成的习惯是任何新任务先跑 10 次看稳定性再决定要不要用。第二提示词的价值被严重低估。同一个模型同一个任务提示词从找找看改成逐项判断并给出置信度命中率能从 20% 提到 60% 以上。这不是玄学是因为你把一个模糊任务变成了结构化任务模型有了明确的输出空间。第三确定性工具永远是最后一道防线。模型可以帮你从 1000 个候选缩到 20 个但最后那 20 个必须用 HMMER、BLAST、结构预测这些确定性方法过一遍。模型负责广撒网确定性工具负责精准收网两者缺一不可。第四记录完整的运行参数。温度、seed、prompt 原文、模型版本一个都不能少。不然你下次想复现自己的结果都做不到。我现在每个任务都会存一个run_config.json把所有这些参数固化下来。第五接受模型会错这个前提。Anthropic 重跑 10 次全错过不是丢人的事是诚实的事。做 AI 辅助科研最怕的不是模型错而是你不知道它什么时候会错。把失败案例公开出来比只展示成功案例有价值得多。这个方向后续还能怎么扩展我觉得有两个点值得做一是把多次采样投票做成标准化的 pipeline 工具让不写代码的生物学家也能用二是研究不同模型在同一个任务上的错误模式是否互补如果 Claude 错的地方 GPT 对那多模型集成可能比单模型多次采样更有效。这两个方向我都在试有结果再聊。
返回列表