RFdiffusion(Watson 等,Nature 2023)把扩散模型用于蛋白骨架的从头生成。它与 ProteinMPNN 的组合,让「设计一个自然界不存在的蛋白来完成指定功能」从研究愿景变成了可操作的流程。
核心方法
# 基本思路:
# 在蛋白【主链坐标】上做去噪扩散
#
# 前向过程:给真实结构逐步加噪,直到变成随机噪声
# 反向过程:从噪声出发,逐步去噪成合理的蛋白骨架
#
# 关键设计:
#
# 1) 【用 RoseTTAFold 的权重初始化】
# 这是方法成功的关键之一
# → RF 已经学会了「什么样的三维结构是合理的蛋白」
# → 从这个先验出发做扩散,比从零训练好得多
#
# 2) 【在 SE(3) 上扩散】
# 每个残基用一个「刚体框架」表示
# (位置 + 取向)
# → 在平移与旋转的乘积空间上做扩散
# → 与 DiffDock 的思路相通(见 101)
#
# 3) 【自条件化(self-conditioning)】
# 每步去噪时,把上一步的预测也作为输入
# → 显著提高生成质量
#
# 输出:
# 只有主链坐标,【没有序列】
# → 序列由 ProteinMPNN 设计(见 150)
条件生成:真正的实用能力
| 任务 | 条件 | 应用 |
|---|---|---|
| 无条件生成 | 无 | 探索蛋白结构空间 |
| 基序支架化 | 固定一段功能基序 | 疫苗抗原设计、酶活性位点移植 |
| 结合物设计 | 给定靶蛋白与结合位点 | 替代抗体的结合蛋白 |
| 对称寡聚体 | 指定对称性 | 纳米颗粒、疫苗载体 |
| 部分扩散 | 固定部分结构,重设计其余 | 蛋白改造 |
| 拓扑约束 | 指定二级结构组成 | 特定折叠的设计 |
「基序支架化」是最有实际价值的能力之一:你知道某个功能基序(如中和抗体的表位、酶的催化三联体)的三维构象,但它在天然蛋白中不稳定或难以表达——RFdiffusion 可以为它设计一个稳定的支架,把基序固定在正确的构象上。
使用
git clone https://github.com/RosettaCommons/RFdiffusion.git
cd RFdiffusion
# 按 README 配置环境并下载模型权重
# ---- 无条件生成 ----
./scripts/run_inference.py \
"contigmap.contigs=[100-100]" \
inference.output_prefix=output/uncond \
inference.num_designs=10
# 生成 10 个长度 100 的蛋白骨架
# ---- 基序支架化 ----
./scripts/run_inference.py \
inference.input_pdb=motif.pdb \
"contigmap.contigs=[10-40/A163-181/10-40]" \
inference.output_prefix=output/scaffold \
inference.num_designs=20
# contigs 语法:
# 10-40 生成 10~40 个新残基
# A163-181 保留输入 PDB 中 A 链的 163~181 残基
# 10-40 再生成 10~40 个新残基
# ---- 结合物设计(最常用的应用)----
./scripts/run_inference.py \
inference.input_pdb=target.pdb \
"contigmap.contigs=[B1-100/0 70-100]" \
"ppi.hotspot_res=[B45,B48,B52,B56]" \
inference.output_prefix=output/binder \
inference.num_designs=100 \
denoiser.noise_scale_ca=0 \
denoiser.noise_scale_frame=0
# B1-100 保留靶蛋白 B 链
# 0 链断开
# 70-100 生成 70~100 残基的结合物
# hotspot_res 【指定结合物应该接触的靶点残基】
# —— 这个参数对成功率影响很大
# noise_scale=0 降低噪声,生成更「保守」的设计
# (对结合物设计通常更好)
# ---- 对称寡聚体 ----
./scripts/run_inference.py \
--config-name symmetry \
inference.symmetry="C3" \
"contigmap.contigs=[100-100]" \
inference.output_prefix=output/c3
完整设计流程
# RFdiffusion 只是第一步
#
# 步骤 1:RFdiffusion 生成骨架
# 典型:生成 1000 个候选骨架
#
# 步骤 2:ProteinMPNN 设计序列(见 150)
# 每个骨架生成 8 条序列 → 8000 条候选
#
# 步骤 3:AlphaFold2 验证(见 112)
# 预测每条序列的结构,与设计骨架比较
# 【筛选判据】:
# 单体设计:RMSD < 2 Å,pLDDT > 80
# 结合物: + ipTM > 0.8,界面 PAE 低
# → 通过的可能只有几十到几百条
#
# 步骤 4:进一步计算筛选
# - Rosetta 能量评分
# - 界面互补性(结合物设计)
# - 溶解度、聚集倾向预测
# - 表达可行性(密码子、疏水性)
#
# 步骤 5:实验验证
# 基因合成 → 表达 → 纯化 → 结合测定 → 结构表征
# 典型:测试 20~100 个设计
#
# 【成功率的现实】:
# 论文报告的结合物设计成功率
# (能测到结合的比例)通常在个位数到十几个百分点
# → 这已经是相对之前方法的巨大进步
# → 但意味着【必须测试大量设计】
#
# 计算筛选越严格,实验成功率越高,
# 但候选数量也越少 —— 需要平衡
#
# 【成本考量】:
# 计算部分:数百到数千 GPU 小时
# 实验部分:基因合成 + 表达纯化 + 测定
# → 实验成本通常远高于计算成本
# → 因此计算筛选的严格程度值得投入
结合物设计的实践要点
- 热点残基的选择至关重要:指定错误的位点,后面全白做。应基于已知的功能位点、突变数据或已有抗体的表位来选;
- 靶点表面的性质影响成功率:平坦、亲水、缺乏凹陷的表面很难设计结合物——与小分子的可成药性判断类似(见 091《蛋白口袋 Protein Pocket》);
- 降低噪声通常更好:
noise_scale=0生成更保守的设计,实验成功率更高; - 生成足够多:数百到上千个骨架是常规做法;
- AF2 验证要用单序列模式或不给 MSA:设计的序列没有天然同源物,用 MSA 反而可能引入偏差;
- ipTM 是结合物设计的核心筛选指标。
对药物发现的意义
| 应用方向 | 状态 |
|---|---|
| PPI 抑制剂(蛋白形式) | 可行,是活跃方向(见 382《PPI 抑制剂》) |
| 抗体替代的结合蛋白 | 可行,分子更小、更易生产 |
| 疫苗抗原设计 | 已有成功案例(表位支架化) |
| 人工酶 | 进展中,成功率仍低 |
| 小分子结合口袋 | 需要 RFdiffusion All-Atom(见 115《RoseTTAFold All-Atom》) |
| 递送载体 | 探索中 |
局限
- 只生成主链:序列设计与验证是独立的环节,误差会累积;
- 不直接处理小分子/核酸:需要 RFdiffusion All-Atom;
- 成功率仍是主要瓶颈:实验验证的通过率有限,需要大量测试;
- 难以设计柔性或无序区域:模型偏好生成规整的二级结构;
- 难以控制精细的功能性质:如特定的动力学、变构行为、pH 响应性;
- 计算成本不低:完整流程需要可观的 GPU 资源。
关键要点
- 用 RoseTTAFold 权重初始化是方法成功的关键——它已经学会了什么是合理的蛋白结构;
- 基序支架化与结合物设计是最有实际价值的条件生成能力;
- 结合物设计中热点残基的选择至关重要,选错则后续全部白做;
- 实验成功率通常在个位数到十几个百分点——必须测试大量设计。
延伸资源
- ProteinMPNN:150《ProteinMPNN 论文精读》;RoseTTAFold All-Atom:115《RoseTTAFold All-Atom》;
- AlphaFold2:112《AlphaFold2 论文精读》;扩散模型:162《扩散模型在药物设计中》;PPI:382《PPI 抑制剂》。