Boltz 是 MIT 许可的开放结构预测模型,能力对标 AlphaFold3。对产业用户而言,它的关键优势是「可以商用」——而且支持任意 SMILES 配体与口袋约束,这两点是 AlphaFold Server 做不到的。
安装与最简用法
pip install boltz
# GPU 推荐(CPU 也能跑但很慢)
# ---- 最简的输入:YAML ----
# input.yaml:
# version: 1
# sequences:
# - protein:
# id: A
# sequence: MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ
boltz predict input.yaml --use_msa_server --out_dir results/
# --use_msa_server: 用远程 MMseqs2 搜 MSA
# 【敏感序列不要用】—— 序列会发到外部
# ---- 蛋白 + 小分子配体 ----
# input.yaml:
# version: 1
# sequences:
# - protein:
# id: A
# sequence: MKTAYIAK...
# - ligand:
# id: L
# smiles: "CC(=O)Nc1ccc(O)cc1"
#
# 【任意 SMILES 都可以】—— 这是相对 AF Server 的关键优势
# ---- 常用参数 ----
boltz predict input.yaml \
--use_msa_server \
--recycling_steps 5 \
--diffusion_samples 5 \
--sampling_steps 200 \
--output_format mmcif \
--out_dir results/
# --diffusion_samples: 【采样多个结构看一致性】
# --recycling_steps: 循环回收次数,增大可能提升质量
口袋约束:显著提升质量的功能
# 【如果已知结合位点,务必使用】
#
# input.yaml:
# version: 1
# sequences:
# - protein:
# id: A
# sequence: MKTAYIAK...
# - ligand:
# id: L
# smiles: "CC(=O)Nc1ccc(O)cc1"
# constraints:
# - pocket:
# binder: L
# contacts: [[A, 45], [A, 78], [A, 123]]
#
# 【为什么重要】:
# 实际场景中口袋位置通常是已知的
# (从共晶结构、突变实验或同源蛋白得知)
# → 不用这个信息是浪费
# → 【加约束后姿势预测质量明显提升】
#
# 【怎么确定 contacts 残基】:
# - 从同一靶点的共晶结构中提取(用 PLIP,见 108)
# - 从同源蛋白的结合位点映射
# - 从突变实验数据
# - 从口袋检测工具(fpocket)的结果
# ---- 共价连接(共价抑制剂建模)----
# constraints:
# - bond:
# atom1: [A, 797, SG] # Cys797 的硫原子
# atom2: [L, 1, C2] # 配体的迈克尔受体碳
#
# ---- 修饰残基 ----
# sequences:
# - protein:
# id: A
# sequence: MKTAYSAKQRQ
# modifications:
# - position: 6
# ccd: SEP # 磷酸丝氨酸
#
# ---- 多链复合物 ----
# sequences:
# - protein: {id: A, sequence: MKTAY...}
# - protein: {id: B, sequence: MSKGE...}
# - ligand: {id: L, smiles: "CCO"}
#
# ---- 核酸 ----
# sequences:
# - protein: {id: A, sequence: MKTAY...}
# - dna: {id: D, sequence: ATGCATGC}
结果判读
import json
import numpy as np
with open("results/predictions/x/confidence_x_model_0.json") as f:
conf = json.load(f)
print("综合置信度:", conf["confidence_score"])
print("pTM:", conf["ptm"])
print("ipTM:", conf["iptm"])
print("配体界面 ipTM:", conf.get("ligand_iptm"))
print("复合物 pLDDT:", conf["complex_plddt"])
# 【判读要点】:
# ligand_iptm 是判断配体姿势可信度的核心指标
# 但【高 ligand_iptm 不保证姿势物理合理】
# → 仍需 PoseBusters 检查
# ---- 多次采样的一致性检验(最实用的判据)----
from rdkit import Chem
from rdkit.Chem import rdMolAlign
import glob
def consistency_check(pred_dir, threshold=2.0):
"""比较多次采样中配体位置的一致性"""
ligs = []
for path in sorted(glob.glob(f"{pred_dir}/*_model_*.cif")):
# 从 cif 中提取配体(实际需要按 chain id 筛选)
# 这里示意用 SDF 导出后比较
pass
# 计算两两 RMSD,一致性高则可信
# 【建议流程】:
# --diffusion_samples 5
# → 比较 5 个结构中配体位置的 RMSD
# → 两两 RMSD < 2 Å 的比例 > 70% = 可信
# → 分散 = 该体系不可靠,不应据此做设计决策
后处理:必需的验证
# 与所有深度学习结构预测方法一样,必须验证
# ---- 1) 物理有效性 ----
from posebusters import PoseBusters
buster = PoseBusters(config="dock")
df = buster.bust(["ligand.sdf"], None, "protein.pdb")
# 【不通过的姿势不应用于设计】
# ---- 2) 局部优化修正 ----
# smina -r protein.pdb -l ligand.sdf --minimize -o refined.sdf
# ---- 3) 独立打分 ----
# smina -r protein.pdb -l refined.sdf --score_only
# 【Boltz 不给亲和力,需要独立评估】
# ---- 4) 相互作用核对 ----
# 用 PLIP 分析,与已知的关键相互作用比较(见 108)
# ---- 5) 与传统对接交叉验证 ----
# 与 Vina/GNINA 的姿势比较(见 346)
# 【原理不同的方法一致 → 可信度显著提高】
# ---- 6) 与已知共晶结构比较(如果有)----
# 用该靶点的已知配体测试:能否复现晶体姿势?
# 【这是最有说服力的验证】
Boltz-1 与 Boltz-2 的差异
| Boltz-1 | Boltz-2 | |
|---|---|---|
| 结构预测 | 是 | 是 |
| 亲和力预测 | 无 | 有 |
| 许可 | MIT | MIT |
| 速度 | — | 相近 |
# Boltz-2 的亲和力预测
# input.yaml:
# ...
# properties:
# - affinity:
# binder: L
#
# 输出中会多出:
# affinity_pred_value
# affinity_probability_binary
#
# 【重要提醒】:
# 输出的尺度需要在自家已知数据上【校准】
# 不要直接当作 pIC50 使用(见 121)
实用建议
- 已知口袋务必用 pocket 约束:这是最能提升质量的单一措施;
- 多次采样看一致性:
--diffusion_samples 5起步; - 敏感序列不要用
--use_msa_server:可以预先用本地 MMseqs2 生成 MSA 并在 YAML 中指定; - 固定版本:不同版本的结果可能不同,生产流程中要锁定;
- 与 Chai-1 交叉验证:两者训练细节不同,结果一致时可信度显著提高(见 021《Chai-1 教程》);
- 不要跳过物理检查:这是所有此类方法的共同要求。
关键要点
- MIT 许可 + 任意 SMILES 配体是它相对 AlphaFold Server 的两个关键优势;
- 已知口袋时务必用 pocket 约束——这是最能提升姿势质量的单一措施;
- 支持共价连接与修饰残基的显式建模;
- 多次采样看一致性 + PoseBusters 检查 + 与传统对接交叉验证,缺一不可。
延伸资源
- Boltz-1 论文:120《Boltz-1 技术报告精读》;Boltz-2 论文:121《Boltz-2 技术报告精读》;实战:344《用 Boltz 或 Chai-1 预测蛋白-配体复合物》;
- Chai-1 教程:021《Chai-1 教程》;AlphaFold Server:019《AlphaFold Server 教程》;姿势验证:096《Binding Pose》。