Chai-1 是开放权重的 AF3 级复合物预测模型。它相对同类工作的差异化能力是「约束输入」——可以把突变实验、交联质谱等已知信息注入预测,显著提高可靠性。
安装与基本使用
pip install chai_lab
# 需要 GPU;首次运行会自动下载权重
# ---- 输入格式:带类型标注的 FASTA ----
# input.fasta:
# >protein|name=chain_A
# MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ
# >protein|name=chain_B
# MSKGEELFTGVVPILVELDGDVNGHKFS
# >ligand|name=lig
# CC(=O)Nc1ccc(O)cc1
# >rna|name=rna_chain
# AUGCUAGCUAGC
#
# 【支持的类型】:protein、ligand(SMILES)、rna、dna
from pathlib import Path
from chai_lab.chai1 import run_inference
output = run_inference(
fasta_file=Path("input.fasta"),
output_dir=Path("results/"),
num_trunk_recycles=3,
num_diffn_timesteps=200,
seed=42,
device="cuda:0",
use_esm_embeddings=True, # 【无 MSA 模式】
)
# ---- 输出 ----
# results/
# pred.model_idx_0.cif ~ pred.model_idx_4.cif 多个候选
# scores.model_idx_0.npz ... 置信度
约束输入:核心差异化能力
# 【实际场景中,我们常常已经知道部分信息】:
# - 突变实验表明某残基对结合至关重要
# - 交联质谱给出了残基对的距离约束
# - HDX-MS 指出了界面区域
# - 同源结构提示了结合位点
# - 已知的药效团模式
#
# 【把这些信息作为约束输入,能显著提高预测质量】
# restraints.csv:
# chainA,res_idxA,chainB,res_idxB,connection_type,confidence,min_distance_angstrom,max_distance_angstrom,comment,restraint_id
# A,123,B,1,contact,1.0,0.0,8.0,mutagenesis,r1
# A,145,B,1,contact,1.0,0.0,8.0,mutagenesis,r2
# A,89,A,201,contact,0.8,0.0,12.0,crosslink,r3
output = run_inference(
fasta_file=Path("input.fasta"),
output_dir=Path("results_constrained/"),
constraint_path=Path("restraints.csv"),
num_trunk_recycles=3,
num_diffn_timesteps=200,
seed=42,
device="cuda:0",
)
# 【约束设计的建议】:
#
# 1) 【只加有把握的约束】
# 错误的约束会把预测引向错误的方向
# → confidence 字段可以表达把握程度
#
# 2) 【距离范围要合理】
# 残基间接触:0~8 Å(Cβ 距离)
# 交联剂约束:取决于交联剂的臂长
# 如 DSS 约 11.4 Å,加上侧链柔性可放宽到 25~30 Å
#
# 3) 【先跑无约束版本作对照】
# 比较有无约束的结果差异
# → 差异大说明约束起了作用
# → 完全一样说明约束是冗余的(模型本来就这么预测)
#
# 4) 【逐步加约束】
# 一次加太多难以判断哪个起作用
# 【实用价值】:
# 纯从序列预测 vs 带实验约束预测,
# 后者的可靠性高得多
# → 【有实验数据时不用,是浪费】
无 MSA 模式
| 用 MSA | 无 MSA(ESM 表示) | |
|---|---|---|
| 准确度 | 更高 | 较低 |
| 速度 | 慢(MSA 搜索耗时) | 快得多 |
| 数据安全 | 需要外部服务或本地库 | 完全本地 |
| 适用 | 关键预测 | 批量粗筛、敏感序列、孤儿蛋白 |
建议:关键预测用 MSA 模式,批量粗筛用无 MSA 模式。无 MSA 模式的原理是用 ESM 蛋白语言模型的表示替代显式的共进化信息(见 143《ESM-2 论文精读》)——它对有深 MSA 的蛋白准确度明显下降。
结果判读
import numpy as np
scores = np.load("results/scores.model_idx_0.npz")
print("综合分:", scores["aggregate_score"])
print("pTM:", scores["ptm"])
print("ipTM:", scores["iptm"])
print("逐链 pTM:", scores["per_chain_ptm"])
print("链对 ipTM:", scores.get("per_chain_pair_iptm"))
# 【判读要点】:
# ipTM > 0.8 界面很可能正确
# 0.6 ~ 0.8 不确定
# < 0.6 【界面预测不可靠】
#
# per_chain_pair_iptm 更细:
# 能看出【哪对链的界面可信、哪对不可信】
# → 多链体系中很有用
# ---- 多个模型的一致性(最实用的判据)----
from rdkit import Chem
from rdkit.Chem import rdMolAlign
import numpy as np
def model_consistency(cif_paths, ligand_resname="LIG"):
"""比较多个预测中配体位置的一致性"""
# 从 cif 提取配体后两两算 RMSD
# 一致性高 → 模型有信心
# 分散 → 该体系不可靠
pass
# 【判读逻辑】:
# 5 个模型给出相似的结构 → 可信度高
# 各说各话 → 不应据此做设计决策
Chai-1 与 Boltz 的选择
| 考量 | Chai-1 | Boltz-2 |
|---|---|---|
| 商用许可 | 需核对当前条款 | MIT,无限制 |
| 亲和力预测 | 无 | 有 |
| 约束灵活性 | 接触约束更灵活 | 口袋 + 共价键 |
| 无 MSA 模式 | 原生支持 | 需自行处理 |
| 输入格式 | FASTA(简单) | YAML(结构化) |
| 结构准确度 | 两者接近,各基准互有胜负 | |
最实用的建议:两个都装上,对关键体系都跑一遍。它们的训练细节不同——结果一致时可信度显著提高;结果分歧时说明该体系本身难预测。这个交叉验证的价值,超过纠结选哪一个。
许可注意事项
# 【使用前必须核对】
#
# 代码:Apache 2.0
# 权重:有单独的许可条款
#
# 关键点:
# - 学术与研究用途明确允许
# - 【商业用途需核对具体条款】
# - 条款可能随版本变化
#
# 【实践建议】:
# 1) 企业环境中使用前,让法务审阅当前的许可文本
# 2) 每次升级版本都重新确认
# 3) 想避免这类不确定性 → 直接用 Boltz-2(MIT)
#
# 这不是技术问题,但在产业环境中是实际的决策因素
后处理:与所有此类方法一样必需
- 物理有效性检查:PoseBusters(见 096《Binding Pose》);
- 局部优化:smina
--minimize修正轻微的几何问题(见 100《Smina》); - 独立打分:Chai-1 不给亲和力,需要 smina 或 MM/GBSA 独立评估;
- 相互作用核对:与已知的关键相互作用比较(见 108《PLIP》);
- 与传统对接交叉验证:原理不同,一致性有判别价值(见 346《比较 DiffDock、Vina、GNINA》);
- 与 Boltz 交叉验证:两个 AF3 级模型的一致性。
关键要点
- 约束输入是差异化优势——能把突变实验、交联质谱等已知信息注入预测;
- 加约束前先跑无约束版本作对照,判断约束是否真的起作用;
- 无 MSA 模式适合批量粗筛与敏感序列,关键预测仍应用 MSA;
- 商用许可需核对当前条款;最佳做法是与 Boltz 都跑并比较一致性。
延伸资源
- Chai-1 论文:122《Chai-1 技术报告精读》;Boltz 教程:020《Boltz 教程》;实战:344《用 Boltz 或 Chai-1 预测蛋白-配体复合物》;
- AlphaFold Server:019《AlphaFold Server 教程》;ESM-2:143《ESM-2 论文精读》;姿势验证:096《Binding Pose》。