ProteinMPNN(Dauparas 等,Science 2022)解决逆折叠问题:给定蛋白的三维骨架,设计出能折叠成该结构的氨基酸序列。它把这个任务的实验成功率从个位数百分比提升到了相当高的水平,是蛋白设计流程中影响最大的工具之一。
逆折叠:结构预测的反问题
| 结构预测 | 逆折叠 | |
|---|---|---|
| 输入 | 序列 | 三维骨架 |
| 输出 | 三维结构 | 序列 |
| 解的数量 | 通常唯一 | 多解(很多序列能折叠成同一结构) |
| 代表方法 | AlphaFold(见 112《AlphaFold2 论文精读》) | ProteinMPNN |
「多解」这个性质很重要:逆折叠不需要找到「唯一正确答案」,只需要找到任何一个能稳定折叠的序列——这让问题比结构预测更宽容,也是它成功率能做高的原因之一。
关键设计
# 1) 【只用主链信息】
# 输入特征:主链原子(N, CA, C, O)之间的距离与角度
# → 【不使用侧链信息】
#
# 为什么重要:
# 设计时我们只有骨架,没有侧链
# → 模型必须能只靠主链工作
# → 这个设定与实际使用场景完全一致
#
# 2) 【自回归解码 + 随机顺序】
# 逐个位置生成氨基酸,
# 但【解码顺序是随机的】而非从 N 端到 C 端
#
# 好处:
# - 模型学会在任意上下文下预测
# - 支持【部分固定序列】的设计
# (固定某些位置,只设计其余)
# → 这个能力在实际设计中极其有用
#
# 3) 【加噪训练】
# 训练时给主链坐标加高斯噪声
# → 模型对不完美的骨架更稳健
# → 【这对下游很关键】:
# RFdiffusion 生成的骨架不是完美的晶体结构,
# 加噪训练让 ProteinMPNN 能处理它们
#
# 4) 【消息传递网络】
# 在残基图上做消息传递(k 近邻图)
# → 编码空间邻近关系
#
# 5) 【温度参数】
# 控制生成的多样性
# 低温 → 保守,接近最可能的序列
# 高温 → 多样,探索更多可能
使用
git clone https://github.com/dauparas/ProteinMPNN.git
cd ProteinMPNN
# 基本用法
python protein_mpnn_run.py \
--pdb_path input_backbone.pdb \
--pdb_path_chains "A" \
--out_folder output/ \
--num_seq_per_target 8 \
--sampling_temp "0.1" \
--seed 37 \
--batch_size 1
# 【固定某些位置】(非常常用)
# 如:保留活性位点残基,只设计其余部分
python protein_mpnn_run.py \
--pdb_path input.pdb \
--fixed_positions_jsonl fixed_positions.jsonl \
--out_folder output/ \
--num_seq_per_target 32
# fixed_positions.jsonl 格式:
# {"input": {"A": [10, 25, 33, 78]}}
# → A 链的这些位置保持原序列不变
# 【偏置特定氨基酸】
# 如:避免半胱氨酸(防止二硫键干扰)
# 或增加带电残基(提高溶解度)
python protein_mpnn_run.py \
--pdb_path input.pdb \
--bias_AA_jsonl bias.jsonl \
--out_folder output/
# bias.jsonl:
# {"C": -3.0, "M": -1.0, "E": 0.5, "K": 0.5}
# → 负值抑制,正值鼓励
# 【多链设计】
# 支持指定哪些链设计、哪些链固定
# → 用于设计结合蛋白(固定靶蛋白,设计结合物)
# 输出:FASTA 文件,每条序列带 score 与 recovery
# score: 模型的负对数似然(越低越好)
# recovery: 与原序列的一致率(用于验证时参考)
在蛋白设计流程中的位置
# 现在的标准从头设计流程:
#
# 第 1 步:【生成骨架】
# RFdiffusion(见 151)
# → 根据目标(结合某个靶点、形成某种拓扑)
# 生成三维主链
#
# 第 2 步:【设计序列】
# ProteinMPNN
# → 为骨架找到能折叠成它的序列
# → 通常生成 8~64 条候选序列
#
# 第 3 步:【验证折叠】
# AlphaFold2 / ESMFold(见 112、116)
# → 预测设计序列的结构
# → 与目标骨架比较 RMSD
#
# 【筛选判据】:
# RMSD < 2 Å
# pLDDT > 80
# (结合物设计还要看 ipTM)
# → 通过率通常只有一小部分
#
# 第 4 步:【实验验证】
# 基因合成 → 表达 → 纯化 → 表征
# → 测稳定性、结合活性、结构
#
# 【关键认识】:
# 计算筛选的通过率与实验成功率是两回事
# 即使 AF2 验证通过,实验成功率仍然有限
# → 通常需要测试数十到上百个设计
#
# 【ProteinMPNN 的贡献】:
# 它把第 2 步的质量大幅提高,
# 使得第 3 步的通过率、第 4 步的成功率都显著上升
# → 【这是整个流程能跑通的关键环节】
LigandMPNN:考虑配体环境
- 问题:ProteinMPNN 只看蛋白主链,不知道口袋里有配体——设计出的残基可能与配体冲突;
- LigandMPNN:把小分子、金属离子、核酸也作为输入环境,在设计序列时考虑与它们的相互作用;
- 应用:
- 设计小分子结合口袋(配合 RFAA/RFdiffusion All-Atom,见 115《RoseTTAFold All-Atom》);
- 人工酶设计(活性位点周围的残基);
- 金属蛋白设计;
- 改造现有蛋白的结合特异性。
- 实践建议:只要设计的区域附近有配体或辅因子,就应该用 LigandMPNN 而非 ProteinMPNN。
使用中的要点
- 温度参数的选择:0.1~0.3 较保守(推荐起点),0.5 以上更多样但风险高。建议在多个温度下各生成一批;
- 生成多条序列并筛选:单条序列的成功率有限,标准做法是生成数十条,用 AF2 验证后挑选;
- 序列恢复率不是目标:与天然序列一致率高不代表设计好——我们要的是「能折叠」,不是「像天然的」;
- 注意可表达性:设计的序列可能难以在大肠杆菌中表达。可以用氨基酸偏置调整(如减少稀有密码子对应的残基、控制疏水性);
- 溶解度:设计时可通过偏置增加表面的带电残基。
关键要点
- 只用主链信息——这个设定与实际设计场景完全一致,是方法可用的前提;
- 加噪训练让它能处理 RFdiffusion 生成的不完美骨架,这是流程能打通的关键;
- 随机解码顺序支持部分固定序列的设计,在实际项目中极其有用;
- 设计区域附近有配体时应该用 LigandMPNN;序列恢复率高不等于设计好。
延伸资源
- RFdiffusion:151《RFdiffusion 论文精读》;RoseTTAFold All-Atom:115《RoseTTAFold All-Atom》;
- AlphaFold2 验证:112《AlphaFold2 论文精读》;ESMFold:116《ESMFold 论文精读》;ESM-2:143《ESM-2 论文精读》。