来自麻省理工和AI制药公司 Recursion 的结构与结合亲和力预测模型Boltz-2,解决小分子药物发现的关键问题
1. Boltz-2介绍
文章来源:http://jeremywohlwend.com/assets/boltz2.pdf
开源代码来源:https://github.com/jwohlwend/boltz
该AI模型由麻省理工学院计算机科学与人工智能实验室与上市AI制药公司Recursion一起开发,双方在Boltz-1的基础之上,通过改进和拓展性能而来。
简单来说,Boltz 与 AlphaFold3 一样,均是一种全原子共折叠模型,它将蛋白质折叠或结构预测的概念扩展到DNA、RNA、配体中。该模型不仅可以预测分子相互作用的 3D 结构,还可用于分子设计等下游任务。Boltz-2将亲和力预测与结构建模相结合,提高了预测结构的物理真实感。
Boltz-2 在一个大型数据集上进行了训练,该数据集结合了500万个结合亲和力测量值、分子动力学模拟和蒸馏数据,这些方法显著提高了预测结构的物理真实感。
在标准 FEP+ 亲和力基准测试中,Boltz-2 实现了 0.62 的平均 Pearson相关系数,能够与可开源 FEP 流程 OpenFE 相媲美。但在速度方面,Boltz-2 只需 20 秒即可计算出结合亲和值,比当前FEP预测快1000倍!
在表示学习方面,亲和力预测建立在驱动共折叠过程的潜在表示之上。这种表示本质上编码了关于生物分子相互作用的丰富信息。因此,Boltz-2在结合亲和力预测方面的改进是由结构建模的进步所推动的。这些进步源于:(1)扩展训练数据,超越静态结构,包括实验和分子动力学集合;(2)显著扩大多样模态下的蒸馏数据集;(3)通过基于实验方法、用户定义的距离约束和多链模板集成来增强用户控制。
整体解析:
这段文字主要讨论了Boltz-2在结合亲和力预测方面的改进与其背后的驱动因素。首先提到的是表示学习的重要性,其中潜在表示(latent representation)是亲和力预测的核心,它能够捕捉生物分子相互作用的关键信息。接着指出,Boltz-2的性能提升得益于结构建模的进步,而这些进步来源于三个方面:一是扩展了训练数据的范围,使其不仅限于静态结构,还包括实验数据和分子动力学模拟数据;二是通过增加蒸馏数据集的规模和多样性来提高模型的泛化能力;三是通过引入用户自定义参数(如实验方法和距离约束)以及多链模板集成,增强了模型的灵活性和可控性。这表明,Boltz-2不仅在算法层面有所改进,还在数据和用户交互方面进行了优化。
Boltz-2药物发现的重要场景
Boltz-2对亲和力的准确预测,使得它可用于药物发现的重要场景:
苗头化合物发现(Hit discovery):该模型在高通量筛选中区分结合剂(binders)与诱饵(decoys),并在MF-PCBA基准测试中实现了显著的富集增益 [Buterez等, 2023],其表现优于对接(docking)和机器学习(ML)方法。具体来说,该模型的任务是从高通量筛选(high-throughput screens)中识别出真正的结合剂(binders),同时排除非活性分子(decoys)。通过使用MF-PCBA基准测试对该模型进行评估,结果表明它在富集增益(enrichment gains)方面表现优异。富集增益是指模型能够以更高的比例挑选出真正有活性的分子,相较于随机选择或传统方法更具优势。此外,该模型的表现超越了传统的对接(docking)方法以及基于机器学习(ML)的方法,体现了其在药物筛选中的潜力。
苗头化合物到先导化合物以及先导化合物优化(Hit-to-lead and lead optimization): 是药物发现和开发过程中的两个关键阶段。首先,“Hit-to-lead” 指的是在初期筛选中找到具有活性的化合物(称为“hit”),然后通过进一步的化学修饰和生物学测试,将这些“hit”转化为更具潜力和选择性的候选分子,即“lead”。接下来,“lead optimization” 是对这些先导化合物进行优化的过程,通过对化合物的结构进行调整,提高其药效、选择性、代谢稳定性等特性,以使其更接近成为临床试验中的候选药物。这两个阶段是药物研发的重要步骤,为后续的临床研究奠定基础。
从头生成(de-novo Generation):De-novo Generation(从头生成)与生成模型相结合 [Cretu et al., 2024],Boltz-2 能够发现新的结合剂。在针对 TYK2 靶点的前瞻性筛选中,该流程能够生成多样化、可合成的高亲和力结合剂,这一点通过绝对结合自由能 (ABFE) 模拟 [Wu et al., 2025] 估算得出。这种方法特别适用于发现针对特定靶点(如 TYK2)的新结合剂(binders)。文中提到,该流程不仅能够生成多样化的分子,还确保这些分子具有高亲和力(high-affinity),并且可以通过化学手段合成(synthetizable)。为了验证这些分子的实际效果,研究团队使用了绝对结合自由能(ABFE)模拟来评估分子与靶点之间的结合强度。这种结合强度是药物设计中的关键指标,直接反映了分子作为潜在药物的潜力。
Boltz-2的改进及对比优势
与Boltz-1相比,Boltz-2在跨模态的晶体结构预测方面有所改进,特别是在抗体-抗原复合物等具有挑战性的目标上表现尤为突出。当与分子动力学模拟进行基准比较时,Boltz-2在预测关键动态特性(如均方根波动RMSF)方面的性能可以与近期的专用模型(例如AlphaFlow [Jing et al., 2024] 和 BioEmu [Lewis et al., 2025])相媲美。
2. 安装及应用
安装:
创建一个conda环境,boltz-2
conda create -n boltz-2 python=3.12
激活环境,后续在环境中操作。
conda activate boltz-2
方法1:创建一个新的python环境(比如使用conda),使用pip安装:
pip install boltz -U
方法2:下载并安装最新版本:
git clone https://github.com/jwohlwend/boltz.git
cd boltz; pip install -e .
使用推理:
boltz predict input_path --use_msa_server
input_path 应指向一个 YAML 文件,或用于批量处理的 YAML 文件目录,描述您想要建模的生物分子及其预测的属性(例如亲和力)。要查看所有可用选项:boltz predict --help;有关这些输入格式的更多信息,请参阅我们的预测说明。默认情况下,boltz 命令将运行模型的最新版本。
YAML 格式更加灵活,允许更复杂的输入,尤其是共价键相关的输入。YAML 的架构如下:
sequences:- ENTITY_TYPE:id: CHAIN_ID sequence: SEQUENCE # only for protein, dna, rnasmiles: 'SMILES' # only for ligand, exclusive with ccdccd: CCD # only for ligand, exclusive with smilesmsa: MSA_PATH # only for proteinmodifications:- position: RES_IDX # index of residue, starting from 1ccd: CCD # CCD code of the modified residuecyclic: false- ENTITY_TYPE:id: [CHAIN_ID, CHAIN_ID] # multiple ids in case of multiple identical entities...
constraints:- bond:atom1: [CHAIN_ID, RES_IDX, ATOM_NAME]atom2: [CHAIN_ID, RES_IDX, ATOM_NAME]- pocket:binder: CHAIN_IDcontacts: [[CHAIN_ID, RES_IDX/ATOM_NAME], [CHAIN_ID, RES_IDX/ATOM_NAME]]max_distance: DIST_ANGSTROM- contact:token1: [CHAIN_ID, RES_IDX/ATOM_NAME]token2: [CHAIN_ID, RES_IDX/ATOM_NAME]max_distance: DIST_ANGSTROMtemplates:- cif: CIF_PATH # if only a path is provided, Boltz will find the best matchings- cif: CIF_PATHchain_id: CHAIN_ID # optional, specifiy which chain to find a template for- cif: CIF_PATHchain_id: [CHAIN_ID, CHAIN_ID] # can be more than onetemplate_id: [TEMPLATE_CHAIN_ID, TEMPLATE_CHAIN_ID]
properties:- affinity:binder: CHAIN_ID
sequences
输入中每个唯一的链/分子都有一个条目。每个聚合物实体都表示为ENTITY_TYPE
、protein
或dna
,rna
并具有一个sequence
属性。非聚合物实体用ENTITY_TYPE
等于表示ligand
,并具有smiles
或ccd
属性。CHAIN_ID
是每个链/分子的唯一标识符,如果结构中存在多个相同的实体,则应将其设置为列表。对于蛋白质,msa
默认情况下需要键,但可以通过传递--use_msa_server
标志来省略,该标志将使用 mmseqs2 服务器自动生成 MSA。如果您希望使用预先计算的 MSA,请使用msa
属性,该属性MSA_PATH
指示包含该蛋白质 MSA 的文件的路径。如果您希望明确运行单序列模式(通常不建议这样做,因为它会损害模型性能),您可以使用该蛋白质的特殊关键字(例如: ).a3m
来实现。对于自定义 MSA,您可能希望向模型指示配对键。您可以使用 CSV 格式(而不是 a3m)来实现此目的,其中包含两列:包含蛋白质序列和 ,其中 是一个唯一标识符,指示每个蛋白质链在 CSV 文件中的匹配行。empty
msa: empty
sequence
key
字段modifications
为可选字段,用于指定聚合物中的修饰残基(protein
,dna
或rna
)。position
字段指定残基的索引(从 1 开始),ccd
为修饰残基的 CCD 代码。此字段目前仅支持 CCD 配体。 标志cyclic
应用于指定环状聚合物链(而非配体)。
constraints
是一个可选字段,允许您指定有关输入结构的附加信息。
-
该
bond
约束指定两个原子之间的共价键(atom1
和atom2
)。目前仅支持CCD配体和规范残基,CHAIN_ID
指的是上面设置的残基的id,RES_IDX
是残基的索引(从1开始)(配体为1),ATOM_NAME
是标准化的原子名称(可以在RCSB网站上该组件的CIF文件中验证)。 -
约束
pocket
指定与配体结合的残基,其中binder
表示与口袋(可以是分子、蛋白质、DNA 或 RNA)结合的链, 表示contacts
与口袋结合的链和残基索引列表(从 1 开始)。该模型目前仅支持指定单条链(以及其他链中binder
任意数量的残基)。contacts
templates
是一个可选字段,允许您为预测指定结构模板。您至少必须提供结构模板的路径,该路径必须以 CIF 文件的形式提供。如果您希望明确定义 YAML 中的哪些链应该使用此 CIF 文件进行模板化,您可以使用该chain_id
条目来指定它们。无论是否提供一组 ID,Boltz 都会从提供的模板中找到最佳匹配的链。如果您希望自己明确定义映射,可以提供相应的 template_id。请注意,只有蛋白质链可以进行模板化。
properties
是一个可选字段,用于指定是否要计算亲和力。如果启用,您还必须提供与要计算亲和力的小分子对应的 chain_id。只能指定一个分子进行亲和力计算,并且该分子必须是配体链(不能是蛋白质、DNA 或 RNA)。
version: 1
sequences:- protein:id: [A, B]sequence: MVTPEGNVSLVDESLLVGVTDEDRAVRSAHQFYERLIGLWAPAVMEAAHELGVFAALAEAPADSGELARRLDCDARAMRVLLDALYAYDVIDRIHDTNGFRYLLSAEARECLLPGTLFSLVGKFMHDINVAWPAWRNLAEVVRHGARDTSGAESPNGIAQEDYESLVGGINFWAPPIVTTLSRKLRASGRSGDATASVLDVGCGTGLYSQLLLREFPRWTATGLDVERIATLANAQALRLGVEERFATRAGDFWRGGWGTGYDLVLFANIFHLQTPASAVRLMRHAAACLAPDGLVAVVDQIVDADREPKTPQDRFALLFAASMTNTGGGDAYTFQEYEEWFTAAGLQRIETLDTPMHRILLARRATEPSAVPEGQASENLYFQmsa: ./examples/msa/seq1.a3m- ligand:id: [C, D]ccd: SAH- ligand:id: [E, F]smiles: 'N[C@@H](Cc1ccc(O)cc1)C(=O)O'
例如,要使用 10 个回收步骤和 25 个样本(AlphaFold3 的默认参数)预测结构,请使用:
boltz predict input_path --recycling_steps 10 --diffusion_samples 25
选项 | 类型 | 默认 | 描述 |
--out_dir | PATH | ./ | 保存预测的路径。 |
--cache | PATH | ~/.boltz | 下载数据和模型的目录。BOLTZ_CACHE如果设置,将使用环境变量作为绝对路径 |
--checkpoint | PATH | 没有任何 | 可选检查点。默认使用提供的 Boltz-2 模型。 |
--devices | INTEGER | 1 | 用于预测的设备数量。 |
--accelerator | [gpu,cpu,tpu] | gpu | 用于预测的加速器。 |
--recycling_steps | INTEGER | 3 | 用于预测的回收步骤数。 |
--sampling_steps | INTEGER | 200 | 用于预测的采样步骤数。 |
--diffusion_samples | INTEGER | 1 | 用于预测的扩散样本的数量。 |
--max_parallel_samples | INTEGER | 5 | 并行预测的最大样本数。 |
--step_scale | FLOAT | 1.638 | 步长与扩散过程采样分布的温度有关。步长越低,样本间的多样性越高(建议在 1 到 2 之间)。 |
--output_format | [pdb,mmcif] | mmcif | 用于预测的输出格式。 |
--num_workers | INTEGER | 2 | 用于预测的数据加载器工作者的数量。 |
--method | 字符串 | 没有任何 | 用于预测的方法。 |
--preprocessing-threads | INTEGER | multiprocessing.cpu_count() | 用于预处理的线程数。 |
--affinity_mw_correction | FLAG | FALSE | 是否将分子量校正添加到亲和力值头。 |
--sampling_steps_affinity | INTEGER | 200 | 用于亲和力预测的采样步骤数。 |
--diffusion_samples_affinity | INTEGER | 5 | 用于亲和力预测的扩散样本数量。 |
--affinity_checkpoint | PATH | 没有任何 | 可选的亲和性检查点。默认使用提供的 Boltz-2 模型。 |
--max_msa_seqs | INTEGER | 8192 | 用于预测的 MSA 序列的最大数量。 |
--subsample_msa | FLAG | FALSE | 是否对 MSA 进行子采样。 |
--num_subsampled_msa | INTEGER | 1024 | 要进行子采样的 MSA 序列的数量。 |
--no_trifast | FLAG | FALSE | 是否不使用 trifast 内核进行三角更新。 |
--override | FLAG | FALSE | 如果发现,是否覆盖现有预测。 |
--use_msa_server | FLAG | FALSE | 是否使用 msa 服务器生成 msa。 |
--msa_server_url | 字符串 | https://api.colabfold.com | MSA 服务器 URL。仅当设置了 --use_msa_server 时使用。 |
--msa_pairing_strategy | 字符串 | greedy | 使用的配对策略。仅当设置了 --use_msa_server 时才使用。选项包括“greedy”和“complete”。 |
--use_potentials | FLAG | FALSE | 是否使用推理时间潜力运行原始 Boltz-2 模型。 |
--write_full_pae | FLAG | FALSE | 是否将完整的 PAE 矩阵保存为文件。 |
--write_full_pde | FLAG | FALSE | 是否将完整的 PDE 矩阵保存为文件。 |
亲和力输出中有两个主要预测:affinity_pred_value 和 affinity_probability_binary。它们在截然不同的数据集上进行训练,并采用不同的监督方法,因此应在不同的情况下使用。affinity_probability_binary 字段应用于从诱饵中检测结合剂,例如在发现目标化合物阶段。其值范围为 0 到 1,表示预测配体为结合剂的概率。affinity_pred_value 旨在测量不同结合剂的特定亲和力,以及这种亲和力如何随着分子的细微修改而变化。这应该用于配体优化阶段,例如从目标化合物到先导化合物和先导化合物优化。它将结合亲和力值报告为 log(IC50),该值源自以 μM 为单位测量的 IC50。有关如何运行亲和力预测和解析输出的更多详细信息,请参阅我们的预测说明。
输出:
out_dir/
├── lightning_logs/ # Logs generated during training or evaluation
├── predictions/ # Contains the model's predictions├── [input_file1]/├── [input_file1]_model_0.cif # The predicted structure in CIF format, with the inclusion of per token pLDDT scores├── confidence_[input_file1]_model_0.json # The confidence scores (confidence_score, ptm, iptm, ligand_iptm, protein_iptm, complex_plddt, complex_iplddt, chains_ptm, pair_chains_iptm)├── affinity_[input_file1].json # The affinity scores (affinity_pred_value, affinity_probability_binary, affinity_pred_value1, affinity_probability_binary1, affinity_pred_value2, affinity_probability_binary2)├── pae_[input_file1]_model_0.npz # The predicted PAE score for every pair of tokens├── pde_[input_file1]_model_0.npz # The predicted PDE score for every pair of tokens├── plddt_[input_file1]_model_0.npz # The predicted pLDDT score for every token...└── [input_file1]_model_[diffusion_samples-1].cif # The predicted structure in CIF format...└── [input_file2]/...
└── processed/ # Processed data used during execution
该predictions
文件夹为每个输入文件包含一个唯一的文件夹。输入文件夹包含diffusion_samples
按置信度分数排序的 output_format 格式的预测结果,以及包含置信度模型和亲和度模型预测结果的附加文件。该processed
文件夹包含模型在推理过程中使用的已处理输入文件。
输出置信度.json
文件包含特定样本的各种聚合置信度得分。文件结构如下:
{"confidence_score": 0.8367, # Aggregated score used to sort the predictions, corresponds to 0.8 * complex_plddt + 0.2 * iptm (ptm for single chains)"ptm": 0.8425, # Predicted TM score for the complex"iptm": 0.8225, # Predicted TM score when aggregating at the interfaces"ligand_iptm": 0.0, # ipTM but only aggregating at protein-ligand interfaces"protein_iptm": 0.8225, # ipTM but only aggregating at protein-protein interfaces"complex_plddt": 0.8402, # Average pLDDT score for the complex"complex_iplddt": 0.8241, # Average pLDDT score when upweighting interface tokens"complex_pde": 0.8912, # Average PDE score for the complex"complex_ipde": 5.1650, # Average PDE score when aggregating at interfaces "chains_ptm": { # Predicted TM score within each chain"0": 0.8533,"1": 0.8330},"pair_chains_iptm": { # Predicted (interface) TM score between each pair of chains"0": {"0": 0.8533,"1": 0.8090},"1": {"0": 0.8225,"1": 0.8330}}
}
confidence_score
,ptm
分数plddt
(及其界面和单个链类似物)的范围是[0, 1],其中值越高表示置信度越高。pde
分数的单位是埃,其中值越低表示置信度越高。
输出亲和性.json
文件的组织如下:
{"affinity_pred_value": 0.8367, # Predicted binding affinity from the enseble model"affinity_probability_binary": 0.8425, # Predicted binding likelihood from the ensemble model"affinity_pred_value1": 0.8225, # Predicted binding affinity from the first model of the ensemble"affinity_probability_binary1": 0.0, # Predicted binding likelihood from the first model in the ensemble"affinity_pred_value2": 0.8225, # Predicted binding affinity from the second model of the ensemble"affinity_probability_binary2": 0.8402, # Predicted binding likelihood from the second model in the ensemble
}
亲和力输出中有两个主要预测:affinity_pred_value
和affinity_probability_binary
。它们在截然不同的数据集上进行训练,并采用不同的监督方法,因此应该在不同的情境中使用。添加评论更多操作
该affinity_probability_binary
字段应用于检测结合物和诱饵,例如在发现目标物阶段。其值范围为 0 到 1,表示预测配体为结合物的概率。
旨在affinity_pred_value
测量不同结合剂的特异性亲和力,以及其如何随着分子的微小修改而变化。这应该用于配体优化阶段,例如命中到先导化合物和先导化合物优化。它报告的结合亲和力值为log(IC50)
,源自于IC50
测量的μM
。值越低,预测的结合力越强,例如:
- IC50 10−9M⟶我们的模型输出 −3(强亲和力分子)
- IC50 10−6M⟶我们的模型输出 0(中等亲和力分子)
- IC50 10−4M⟶我们的模型输出 2(弱亲和力)
kcal/mol
您可以使用y --> (6 - y) * 1.364
模型y
的预测将模型的输出转换为 pIC50 。
3. 使用示例
下载boltz程序包:
git clone https://github.com/jwohlwend/boltz.git
使用examples中的affinity计算实例:
cd boltz
boltz predict ./examples/affinity.yaml --use_msa_server
初次运行,会下载解压CCD data,在/home/user/.boltz/mols目录下,大小1.8G,包含45227个mol文件。
然后会下载 Boltz-2 weights,在 /home/user/.boltz目录下,名称为boltz2_conf.ckpt,大小2.3G。
affinity预测,首次会下载affinity weights在/home/user/.boltz目录下,名称boltz2_aff.ckpt,大小2.1G。
错误提示1:RuntimeError: PytorchStreamReader failed
原因1:主要是weights文件不完整,可以提前下载放在/home/user/.boltz下。下载URL在/boltz/src/boltz/main.py文件中,如下:
CCD_URL = "https://huggingface.co/boltz-community/boltz-1/resolve/main/ccd.pkl"
MOL_URL = "https://huggingface.co/boltz-community/boltz-2/resolve/main/mols.tar"
BOLTZ1_URL_WITH_FALLBACK = [
"https://model-gateway.boltz.bio/boltz1_conf.ckpt",
"https://huggingface.co/boltz-community/boltz-1/resolve/main/boltz1_conf.ckpt",
]
BOLTZ2_URL_WITH_FALLBACK = [
"https://model-gateway.boltz.bio/boltz2_conf.ckpt",
"https://huggingface.co/boltz-community/boltz-2/resolve/main/boltz2_conf.ckpt",
]
BOLTZ2_AFFINITY_URL_WITH_FALLBACK = [
"https://model-gateway.boltz.bio/boltz2_aff.ckpt",
"https://huggingface.co/boltz-community/boltz-2/resolve/main/boltz2_aff.ckpt",
]
结果文件夹名称为:boltz_results_affinity,内容如下:
结果在affinity_affinity.json文件中,可以看到,亲和力以log(IC50)为单位,等于6-2.5=3.5,大致等于300μM,是一个弱的binder。
复合物结构文件为affinity_model_0.cif,使用pymol打开:
pymol /boltz_results_affinity/predictions/affinity/affinity_model_0.cif
结构如下:
又一例,如下是EGFR抑制剂吉非替尼的亲和力计算文件:
version: 1 # Optional, defaults to 1
sequences:- protein:id: Asequence: GAMGEAPNQALLRILKETEFKKIKVLGSGAFGTVYKGLWIPEGEKVKIPVAIKELREATSPKANKEILDEAYVMASVDNPHVCRLLGICLTSTVQLITQLMPFGCLLDYVREHKDNIGSQYLLNWCVQIAKGMNYLEDRRLVHRDLAARNVLVKTPQHVKITDFGLAKLLGAEEKEYHAEGGKVPIKWMALESILHRIYTHQSDVWSYGVTVWELMTFGSKPYDGIPASEISSILEKGERLPQPPICTIDVYMIMVKCWMIDADSRPKFRELIIEFSKMARDPQRYLVIQGDERMHLPSPTDSNFYRALMDEEDMDDVVDADEYLIPQQG- ligand:id: Bsmiles: 'Clc1c(F)ccc(Nc2ncnc3c2cc(OCCCN2CCOCC2)c(OC)c3)c1'
properties:- affinity:binder: B
预测结果显示,预测的复合物结构与吉非替尼-EGFR复合物的PDB结构(PDBID: 4WKQ)非常接近,RMSD=0.267。
吉非替尼的亲和力为-6.56 log(IC50),低于1 μM,属于强的binder,与实际情况符合。
以上是boltz-2的初步使用介绍。
参考文献:
https://github.com/jwohlwend/boltz/tree/main/docs