121

Boltz-2 技术报告精读:亲和力与结构预测能否统一

Boltz-2 首次把结构预测与亲和力预测统一在一个开源模型中。这篇讲清它的方法、真实表现与使用边界。

Boltz-2(MIT 团队,2025)在 Boltz-1 的基础上加入了亲和力预测——这是所有 AF3 级模型此前都不做的事。它的主张是:结构与亲和力可以在一个模型中联合学习,而这个能力对药物发现的价值远高于单纯的结构预测。

为什么亲和力预测是关键一步

# AF3 类模型的定位问题:
#
#   它们回答的是「配体在哪里、以什么姿势结合」
#   而药物发现真正需要的是「这个分子结合得有多强」
#
#   一个能给出完美姿势但不知道亲和力的模型,
#   在虚拟筛选与先导优化中的价值有限 ——
#   因为你无法据此排序候选分子
#
# Boltz-2 的主张:
#   结构与亲和力共享底层的物理规律,
#   联合建模能让两个任务互相促进
#
# 实现:
#   在结构预测的表示之上,
#   加一个亲和力预测头
#   用 ChEMBL、BindingDB 等活性数据训练
#
# 报告的能力:
#   在部分基准上,亲和力预测的相关性
#   接近 FEP 类物理方法,
#   而速度快数个数量级
#
#   → 【这个对比是它最引人注目的宣称】

如何看待「接近 FEP」的宣称

  • 速度对比是真实的:FEP 计算一对分子的相对自由能需要数小时 GPU 时间(见 127《FEP、RBFE 与 ABFE》),而 Boltz-2 是秒级——这个数量级的差异是实在的
  • 准确度对比需要谨慎解读
    • 基准的选择很重要——在与训练数据相似的体系上表现好,不代表在新颖体系上同样好;
    • 数据泄漏的风险:训练数据来自公开活性数据库,测试集中的分子或近似物可能已在训练集中(见 238《PDBbind》);
    • FEP 的优势在于它不依赖该体系的历史数据——对全新骨架同样适用,而 ML 方法在训练分布外会退化。
  • 正确的使用心态把它当作「快速的初筛与排序工具」,把 FEP 当作「关键决策前的验证」——两者互补而非替代;
  • 必做的验证在自家靶点的历史数据上测试它的排序能力,而非直接采信论文基准。

使用

pip install boltz -U

# 结构 + 亲和力预测
# input.yaml:
#   version: 1
#   sequences:
#     - protein:
#         id: A
#         sequence: MKTAYIAKQRQISFVKSHFSRQ...
#     - ligand:
#         id: L
#         smiles: "CC(=O)Nc1ccc(O)cc1"
#   properties:
#     - affinity:
#         binder: L

boltz predict input.yaml --use_msa_server --out_dir results/

# 输出中会多出亲和力预测:
#   affinity_pred_value      预测的结合亲和力
#   affinity_probability_binary   是否结合的概率

import json
with open("results/predictions/x/affinity_x.json") as f:
    aff = json.load(f)

print("预测 log(IC50):", aff["affinity_pred_value"])
print("结合概率:", aff["affinity_probability_binary"])

# 注意单位与尺度:
#   输出的尺度定义见官方文档,
#   【不要直接当作 pIC50 使用】—— 先在已知数据上校准
#
# 校准做法:
#   用该靶点的一批已知活性分子跑预测,
#   拟合预测值与实测 pIC50 的关系,
#   得到该体系上的换算与可信区间

批量筛选的实用流程

# 场景:对 500 个候选分子做排序
#
# 直接跑 Boltz-2 的成本:
#   每个分子数分钟 GPU → 500 个约 1~2 天单卡
#   → 可接受,但不适合十万级筛选
#
# 分级策略:
#   第 1 级:Vina 对 100 万分子粗筛 → 前 1 万
#   第 2 级:GNINA CNN 重打分 → 前 1000
#   第 3 级:【Boltz-2 结构 + 亲和力】→ 前 100
#   第 4 级:FEP 对最终 20~30 个做精确排序
#   第 5 级:药化人工审查
#
# Boltz-2 填补了「对接」与「FEP」之间的空档:
#   比对接准,比 FEP 快数个数量级
#
# 批量运行
import yaml, subprocess, os

def make_input(protein_seq, smiles, out_path):
    cfg = {
        "version": 1,
        "sequences": [
            {"protein": {"id": "A", "sequence": protein_seq}},
            {"ligand": {"id": "L", "smiles": smiles}},
        ],
        "properties": [{"affinity": {"binder": "L"}}],
    }
    with open(out_path, "w") as f:
        yaml.safe_dump(cfg, f)

for i, smi in enumerate(candidate_smiles):
    make_input(target_seq, smi, f"inputs/lig_{i:04d}.yaml")

# 用同一 MSA 缓存可显著加速(避免重复搜索)
subprocess.run(["boltz", "predict", "inputs/",
                "--use_msa_server", "--out_dir", "results/"])

与其它方法的定位

方法 速度 亲和力可靠性 适用规模
对接打分 毫秒~秒 低(见 095《Docking Score》 百万级
CNN 重打分(GNINA) 低到中 十万级
MM/GBSA 分钟 千级
Boltz-2 分钟 中到高(体系相关) 百~千级
FEP / RBFE 小时 十~百级
实验测定 天~周 金标准

局限与注意

  • 训练分布依赖对与训练数据差异大的靶点或化学类型,可靠性下降。全新靶点上要格外谨慎;
  • 不给出误差估计:一个预测值没有配套的不确定度——建议自己用多次采样估计变异性
  • 对细微 SAR 的分辨率:同系列类似物之间的小差异(如一个甲基),预测能否分辨仍需在自家数据上验证;
  • 结构预测的问题依然存在:物理有效性需要 PoseBusters 检查,姿势应与传统对接交叉验证;
  • 不替代实验:所有计算预测都是排序与优先级工具。

它的真正意义

Boltz-2 的重要性不只在技术,更在于「完全开源 + 可商用 + 结构与亲和力一体」这个组合此前不存在。此前工业界要么用受限的 AF3(不能商用),要么用只给结构的开源模型,要么用昂贵的商业平台。Boltz-2 让中小团队第一次能以零许可成本获得这类能力——这对领域的实际影响可能大于其技术指标。

关键要点

  • 首次把结构预测与亲和力预测统一在一个开源可商用模型中;
  • 「接近 FEP」的宣称需谨慎解读——FEP 不依赖该体系的历史数据,对新骨架更稳健
  • 它填补了「对接」与「FEP」之间的空档,适合百~千级的中间筛选层;
  • 输出尺度需在自家已知数据上校准,不要直接当 pIC50 用。

延伸资源