Boltz 大更新实测!!
An open-source AF3 alternative quietly goes commercial.
实测 ITC KD ≈ 9 nM 的高亲和力 binder,模型自己说"我不太确定"。这个数字对所有用 iPTM 筛选设计 binder 的人,都是个问号。
那天晚上我邮箱里跳出来一封 Gabriele Corso 的邮件。
"Hi, I'd like to invite you to the new Boltz API beta…"
附带 100 美元两周 credit、两个文档链接、最后一句 "have any feedback let us know"——就这么短。Boltz API beta 就这么上线了。
老实说有点意外。低调到反常。AI4Bio 今年大新闻一个接一个,AlphaFold 3 发布、Isomorphic Labs 2.1B 融资,每一件都伴随着 Twitter 上铺天盖地的转发。Boltz 这次把开源 AF3 替代品做成完整商业 API、跨过商业化那道槛,按理也不算小事,但发布方式就是邮箱里一封极简短的邀请,没 blog post、没 Twitter thread、没 launch video。
不过 Boltz 一直就是这风格。MIT Wohlwend 实验室那帮人,从 Boltz-1 到 Boltz-2 到 BoltzGen——每一个都是 preprint 一篇、开源 repo 一个,悄悄放出去就完了。这次跨过商业化只是同一节奏的延续,变的只是它现在不再只是 model weights,而是一整套带 token、estimate-cost、idempotency key、Claude Code 和 Codex 官方插件的完整 API。
那邮件里说能做什么?官方原话写了三件事。
Boltz API 给的三件事
第一,结构和结合预测,支持 protein-ligand 亲和力(沿袭 Boltz-2)和全新的 protein-protein 亲和力——后者是 Boltz-2 论文里没有的,对抗体/binder 设计是质变。第二,小分子设计和筛选,"significantly improved over our previously-published Boltz-2 + SynFlowNet workflow"。第三,蛋白设计和筛选,"significantly improved over BoltzGen"——BoltzGen 是他们之前开源的 de novo 蛋白生成模型,API 版本是闭源迭代。
加上 Claude Code 官方插件(boltz-bio/boltz-api-skills marketplace)、Codex 插件、Gemini CLI extension 同步发布。整个 AI4Bio API 赛道里,这是第一家把 agent 作为一等公民写进 onboarding 路径的公司——官方文档第一屏就分了 Scientist / Platform Developer / Agent 三种用户角色,每种角色独立 tab、独立示例。
选 Ty1:要测就测真东西
测评不能用 toy 案例。我选了 Ty1 nanobody + SARS-CoV-2 RBD 复合物——Hanke 等人 2020 年发在 Nature Communications 上那个 alpaca 来源的单域抗体,cryo-EM 结构是 PDB 6ZXN,ITC 实测 KD ≈ 9 nM(估计范围 1-70 nM),假病毒中和 IC50 是 54 nM。
之所以选这个:有 ground truth 结构、有实验亲和力可对照、是真实生物学问题。输入用 Ty1 VHH 118 aa(PDB 6ZXN entity 2 去掉 His-tag)和 SARS-CoV-2 spike 残基 319-541 共 223 aa 的 RBD——保留了 K417、E484、N501 这些 VOC 标志残基用作输出校验锚点。模型 boltz-2.1,3 个 sample。
第零步:跑是真跑了,跑的不是我让它跑的东西
但其实,这不是我的第一次尝试。
beta 拿到的当晚,我让 agent 跑了一个野心更大的工作流:HIV-1 protease + aspirin 的 protein-ligand 复合物预测、20 条 de novo nanobody 设计、5 条 protein library screen、30 条 affinity maturation——四步串成完整 binder discovery pipeline。
agent 给回了完整的 4 步报告,job ID、结构 CIF、metrics JSON、排名表,全套都齐——15 分钟跑完、扣了 0.65 美元 credit、API console 后台 4 个 job 真实存在。看上去什么都对。
直到我打开 CIF 校验。
这些 job 都真跑了。只是 agent 给 API 的 input,跟我让它做的事一点关系都没有。
我打开"HIV-1 protease (99 aa)"那个 entity 的 CIF,链上只有 16 个 CA 原子,序列是 MKTIIALSYIFCLVFA。这串字母我第一眼就觉得眼熟——回头翻 Boltz 文档,它原原本本就是 Get Started 第一个示例代码里的占位符 protein sequence。Aspirin 的 SMILES 也是文档示例里那条 CC(=O)OC1=CC=CC=C1C(=O)O。
MKTIIALSYIFCLVFA)+ 一个 aspirin 分子——这是 Boltz API Get Started 文档示例的原样输出。真实 HIV-1 protease 应有 99 残基、两条对称链、典型的 β-sheet 折叠。API 真跑了,跑的是文档示例。发生了什么一目了然:agent 接到"用 HIV protease 和 aspirin 跑 protein-ligand 预测"这个任务,去翻 Boltz 文档怎么调 API——然后把文档示例里的占位符序列当成 HIV protease 真的填进去了。API 跑了,扣了钱,跑出来一段 16 残基螺旋 + aspirin 的结构。报告里写"HIV-1 protease (99 aa) + Aspirin"。但实际跑的是文档示例。
继续翻其他文件。"Nanobody"那 20 条序列每条只有 14-15 个氨基酸。真正的 VHH nanobody 是 120-130 aa,14-15 aa 是肽段不是抗体。
SNAEKLRELLETRFK、KLVELTLNNLTRKF——14-15 残基序列是肽段,不是 nanobody。同样的 failure mode:agent 调 design endpoint 时把 binder length 参数设错了,API 跑了 9 分钟、产出 20 条肽序列、扣了 credit。报告里写"20 条 de novo nanobody"。"Affinity maturation 一步 iPTM 提升 83%"——这一步看起来太夸张到不像真的。但 reframe 之后能理解:起点是 Step 2 出来的那条 15 aa 肽段,不是任何真实意义上的 nanobody。在 15 aa 肽段上跑 mutation 优化,iPTM 从 0.367 跳到 0.6745 在数学上完全可能——因为起点太弱了,怎么变都会改善。这跟我想象的"在 nanobody 上做 affinity maturation"完全是两件事。
整个 4 步流水线 15 分钟跑完、0.65 美元扣完、4 个 job ID 在 console 里查得到——这些都是真的。但每一步用的 input 都不是我以为的 input。
agent 接到自然语言任务后,在翻译成 API 调用参数那一步静默把我的输入替换成了文档默认值。"HIV protease"被替换成 MKTIIALSYIFCLVFA、"120 aa nanobody"被替换成 15 aa 肽段。API 真跑了,钱真扣了,结果真出了——只是跑的都不是我让它跑的东西。agent 报告里写的 label 是"HIV-1 protease"、"nanobody"、"affinity maturation",听起来跟我说的一样。只有打开 CIF 校验序列长度的时候才看得出来真相。
这次失败给我一个直接的教训:agent 报告里的 label,跟它实际提交给 API 的 input 不是一回事。它给你的报告是它写的故事,而 API 实际收到的 input 可能完全是另一组东西——API 不会告诉你"你给的输入跟你的意图对应不上",它只会忠实地跑你给它的东西。后续所有真实测试我都加了 CIF 链长、N 端序列、地标残基的硬校验脚本——不是为了检查 API,是为了检查 agent 实际提交给 API 的输入跟我让它提交的是不是同一件事。
而且这个教训正好准备了下面 Step 3 的伏笔——同样的 failure mode 在那里以更轻、更不容易察觉的形态出现了一次。
下面是确认 agent 把我的 input 完整、准确传给 API 之后跑出来的真实结果。
第一步:Ty1 + RBD 复合物预测
Job ID sab_pred_9VQct5g7EU0EgpwJpyg5,提交到完成 121 秒,估价 0.075 美元。最佳 sample 拿到 pTM 0.768、iPTM 0.492、complex plDDT 0.894、complex iplDDT 0.816。
第二步:RBD 单链 apo 对照
44 秒,pTM 0.867,plDDT 0.931。RBD 单独能正确折叠,结构完整,作为干净的 de novo 设计靶点输入。
第三步:9 分钟生成 20 条新 nanobody
我用 Boltz 的 protein design endpoint(BoltzGen 的闭源迭代版),让模型针对 RBD 上 Ty1 结合的那块表位生成全新 nanobody binder。目标长度 120 aa——卡在 nanobody 尺寸里。我给 agent 的 prompt 是这样的:
Job ID prot_des_RtWssUlAfGO4P1cVqxYB,跑了 9 分 1 秒,输出 20 条 120 aa 序列。
最让人意外的是序列本身的"形状"。模型生成的不是随机串,是真实可识别的 nanobody 框架。Top 1 序列 TVTLTESGGGTVKVGGSVRLTSNVSGVDFSSYTKSWYRK...GTDLTVVE 跟经典 VHH 框架(QVQLVESGGGLVQPGG...SLRLSC...GTQVTVSS)对比,N 端 ESGGG 模式、FR3 的 GRFTIS、C 端 GT-LTVV 全部识别得出来——只是有大量 framework 位置的取代和 CDR 区的扩展性变异。BoltzGen 升级版在 nanobody-shape space 里采样的能力是真实存在的。
[ASTV]VTLTES 模式、C 端 GT-LTVV——这是 BoltzGen 升级版在 nanobody-shape space 里采样的直接证据。但置信度数字不算好看。Top 1 设计 iPTM 0.353、最小 PAE 9.49 Å、bind_conf 0.065——剩余 19 条更差,iPTM 全部 < 0.18,bind_conf 大多 < 0.01。
要诚实交代一件事。这一步表位约束传递有偏差:我原本指定的是 ACE2 阻断的 8 个关键残基,但实际 job 跑的时候 agent 翻译成了 "0-indexed residues 45-50, 53-54, 98-222 (ACE2 contact region)"——后面那段覆盖了大半个 RBD 的 C 端表面。等于让模型"在 RBD 表面找地方结合",不是"精准打 ACE2 阻断位点"。
这正是第零步同一个 failure mode 的轻量级版本——agent 在自然语言到 API 参数的中间层把约束静默扩展了。Step 0 是把全部 input 替换成文档示例(极端版本),Step 3 是把单个参数(表位列表)从 8 个残基扩张成 130 个残基(温和版本)。两次都是 agent 调用看起来"差不多",但实际"差不少"。两次都只有打开 job 的实际提交参数核对才看得出来。
也因此,top 1 的 0.353 iPTM 不是模型的天花板,是这一次有偏差的输入下的成绩。约束做对了能做到多好,留给下一篇。
那个让人停下来的数字
回到 Step 1 那个 iPTM 0.492。
在 AF3 类模型的常规解读里,iPTM 是衡量蛋白复合物界面预测置信度的指标。社区共识阈值:iPTM 大于 0.7 算"界面可靠",0.5 到 0.7 是"中等可信",低于 0.5 算"界面不可信"。
而 Ty1 是实测 ITC KD ≈ 9 nM 的高亲和力 binder——是 Nature Communications 上有 cryo-EM 单粒子证据的真实抗体,不是计算预测,不是从数据库里挑出来的相对结合,是真东西。
boltz-2.1 看到这条已知 nM 强结合的抗体-抗原复合物,给的界面置信度是 0.492。正好踩在"不可信"的红线上。
两种解读。第一种,模型对抗体-抗原界面系统性低估。AF3 系列模型一个已知短板是训练集里抗体-抗原复合物相对稀疏(公开 PDB 抗体数据偏向少数已研究透的靶点),模型在这类界面上倾向给保守的 iPTM。如果是这种情况,0.492 不代表预测错,只代表模型自己不太确定。第二种,模型预测的结合模式跟 PDB 6ZXN 实际不一样——需要把预测 CIF 跟 6ZXN 对齐算 TM-score 才能判定。
把 Step 3 的设计放进来看,问题更尖锐:实测 nM 的 Ty1 在 boltz-2.1 这里只拿到 iPTM 0.49,已经低于常规的"可靠界面"红线。如果真实的高亲和力 binder 在这个模型里都只能拿 0.49,那 0.7 这个阈值在抗体设计场景下基本是个废线——按它筛选会把整批 design 连同下一个 Ty1 一起扔掉。但反过来也得说清楚:0.35 的 best 设计在同一把尺子下仍然比真 binder 低 0.14,不能因为阈值偏严就把它说成"接近真东西"——iPTM 0.35 就是 iPTM 0.35,模型对它的界面置信度比对 Ty1 还低一截。
这才是这个数字对 AI4Bio 行业的真实含义。现在大量 AI 抗体设计 pipeline 用 iPTM 做筛选阈值,常见做法是 iPTM 大于 0.7 才算"有希望的 binder",低于 0.5 直接扔。如果模型对抗体-抗原界面本身就低估,这种筛选标准会把真实的好 binder 也一起筛掉——而且永远不会知道,因为筛掉的东西没机会被实验验证。
Ty1 这个例子等于把这个问题摆在所有 binder 设计师面前。
我这次没测到的
也得说清楚。
Protein-protein 亲和力预测——Boltz API 最大的新卖点——这一次没拿到数字。predictions:structure-and-binding 返回的 metrics 只包含结构置信度(pTM、iPTM、plDDT、PAE),没有 KD 或 affinity_score 字段。我的 binding 配置在传递过程中出了问题(字段名和约定还在跟 API reference 对),下一篇会补一次完整测试,把 Boltz-2.1 相对公版 Boltz-2 唯一全新的核心能力真正跑出数字来。
上手体验
价格上,0.075 美元跑 3 个 sample、341 残基的复合物,一杯咖啡的钱能跑几十次。两周 100 美元的 beta credit 比想象的耐用得多。9 分钟跑 20 条 de novo 设计也在合理区间。
延迟上,Step 1 用了 121 秒,Step 2 用了 44 秒,Step 3 用了 9 分钟。对结构预测和 protein design 来说都合理。
Agent 友好这件事是写到骨子里的:estimate-cost 是显式步骤,可以先估价再决定提不提交;--idempotency-key 让 retry 不会重复扣费;--raw-output --transform id 让 agent 直接抓 job ID 而不用解析 JSON。这些都是给 agent 用的,不是给 web UI 摆样子的。
但第零步和第三步那两次 agent 偏移提醒我,agent 一等公民不是"完全交给 agent"。科学约束的最后一公里翻译、agent 报告的真实性核验,这两关都还要科学家自己看一眼。
三个并列的发现
Boltz API 作为基础设施是好的:快、便宜、文档清楚、对 agent 真的友好。从开源研究项目到商业 API 的转身做得很专业,融资支撑写在每个细节里。
但有三件事值得放在一起记下来:
模型本身需要谨慎使用。Ty1 那个 iPTM 0.492 是个温和但清晰的信号:用 boltz-2.1 评估抗体-抗原相互作用时,不能简单套用 0.7 的常规阈值。
Agent 中间层会替换参数。第零步是 agent 把整组 input 替换成了文档默认值(API 真跑了,跑的不是我让它跑的东西);第三步是 agent 把单个参数(表位约束)从 8 个残基静默扩张到 130 个。两种 failure mode 共同的根:agent 给你的报告里 label 跟它实际提交给 API 的 input 不是一回事。anti-fake 校验脚本应该是 AI4Bio agent 工作流的标配——不是为了检查 API,是为了检查 agent 实际提交给 API 的输入跟你让它提交的是不是同一件事。
价格便宜到位。0.075 美元跑一次结构预测、9 分钟生成 20 条 de novo 设计、两周 100 美元用不完。这是真的可以拿来日常工作的价格。
下一篇会做三件事:把 Step 1 的预测 CIF 跟 PDB 6ZXN 对齐看到底是校准低还是模式错;真正测到 protein-protein affinity 那个数字;把 de novo 设计的表位约束做对、重跑一次。
价格放在那里,时间还有一周,credit 还很充足。