蛋白质设计与工程🔗
关键词: 蛋白质设计, RFdiffusion, ProteinMPNN, 从头设计, 反向折叠, binder design
难度: ⭐⭐⭐
预计阅读时间: 50 分钟
最后更新: 2026-04-08
本章导读🔗
蛋白质结构预测回答的是"自然界已有的蛋白质长什么样",而蛋白质设计要回答的问题更加激动人心——我们能否从零开始创造自然界不存在的蛋白质? 2024 年诺贝尔化学奖授予了 David Baker,正是因为他在"计算蛋白质设计"(computational protein design)领域的开创性贡献。
近年来,以 RFdiffusion 和 ProteinMPNN 为代表的 AI 工具让蛋白质从头设计(de novo protein design)的成功率从过去不到 1% 提升到了实验验证中的 10-30% 甚至更高,彻底改变了蛋白质工程的研究范式。
读完本章,你将能够:
- 理解蛋白质设计的两大范式(正向设计与反向设计)
- 掌握 RFdiffusion 的安装、使用和主要设计功能
- 掌握 ProteinMPNN 的序列设计方法
- 了解其他前沿设计工具(Chroma、ESM-IF、FrameFlow 等)
- 构建完整的"设计→预测→验证"计算工作流
前置知识: 建议先阅读 01_蛋白质结构预测_AlphaFold.md 和 02_蛋白质结构预测_进阶工具.md,了解 AlphaFold2、pLDDT、TM-score 等基本概念,因为结构预测是验证设计质量的核心手段。
1. 蛋白质设计概述🔗
1.1 什么是蛋白质设计?🔗
蛋白质设计(protein design)的核心目标是:创造出具有特定结构和/或功能的、自然界不存在的蛋白质。
这与蛋白质结构预测的方向恰好相反:
| 维度 | 结构预测(Structure Prediction) | 蛋白质设计(Protein Design) |
|---|---|---|
| 问题 | 给定序列,预测结构 | 给定目标功能/结构,设计序列 |
| 方向 | 序列 → 结构 | 结构/功能 → 序列 |
| 类比 | 看图纸,预测建筑外观 | 根据需求,设计全新蓝图 |
| 代表工具 | AlphaFold2, ESMFold | RFdiffusion, ProteinMPNN |
蛋白质设计可以进一步细分为两大范式:
正向设计(Forward Design):序列 → 结构🔗
从一条氨基酸序列出发,预测或验证它能否折叠成目标结构。这更多是评估和筛选的手段,通常作为设计流程的验证环节。
反向设计(Inverse Design):结构 → 序列🔗
给定一个目标三维结构(骨架),设计能够折叠成该结构的氨基酸序列。这是蛋白质设计的核心问题,也被称为反向折叠(inverse folding)。ProteinMPNN 就是这一范式的代表工具。
生成式设计(Generative Design):从无到有🔗
不依赖于预定义的骨架结构,而是通过生成模型直接创造全新的蛋白质结构。这是最新也是最具革命性的范式,RFdiffusion 属于这一类别。
蛋白质设计的三大范式:
1. 反向折叠: 已知骨架 → 设计序列
(ProteinMPNN, ESM-IF)
2. 生成式设计:约束条件 → 生成骨架 → 设计序列
(RFdiffusion → ProteinMPNN)
3. 序列生成: 功能描述 → 直接生成序列
(ProtGPT2, ProGen 等,目前成熟度较低)
1.2 传统方法 vs AI 方法🔗
在 AI 方法出现之前,蛋白质设计领域的统治者是 Rosetta 软件套件(同样来自 David Baker 实验室)。
| 特性 | Rosetta(传统方法) | AI 方法(RFdiffusion 等) |
|---|---|---|
| 核心原理 | 基于物理的能量函数 + 蒙特卡洛采样 | 深度学习生成模型 |
| 设计速度 | 慢(单个设计需要数小时至数天) | 快(单个设计数秒至数分钟) |
| 序列空间探索 | 局部搜索,容易陷入局部最优 | 全局采样,多样性更高 |
| 从头设计成功率 | 较低(实验验证 < 5%) | 较高(binder design 可达 10-30%) |
| 灵活性 | 高度可定制,适合特定需求 | 功能逐步增加中,但定制性相对有限 |
| 学习门槛 | 高(复杂的 XML 脚本) | 中等(命令行 + 配置文件) |
| 物理约束 | 显式考虑(键长、键角、范德华力等) | 隐式学习(从训练数据中学到) |
注意: Rosetta 并未被淘汰。在许多应用中,Rosetta 的物理约束和精细控制能力仍然无法被 AI 方法完全替代。当前最佳实践往往是 AI 方法 + Rosetta 松弛(relaxation)的组合使用。
1.3 当前 AI 蛋白质设计的主要能力🔗
AI 蛋白质设计已经在以下场景展现了实用价值:
| 设计任务 | 说明 | 代表工具 |
|---|---|---|
| 从头结构生成 | 生成自然界不存在的全新蛋白质折叠 | RFdiffusion, Chroma |
| Binder 设计 | 设计能够特异性结合目标蛋白的新蛋白质 | RFdiffusion + ProteinMPNN |
| 酶设计 | 设计具有催化功能的蛋白质 | RFdiffusion(motif scaffolding) |
| 对称寡聚体设计 | 设计具有对称性的蛋白质复合物(如环状、笼状) | RFdiffusion |
| Motif scaffolding | 在设计的蛋白骨架中嵌入特定功能性片段 | RFdiffusion |
| 序列设计 | 为给定骨架设计最优序列 | ProteinMPNN, ESM-IF |
1.4 2024 年诺贝尔化学奖🔗
2024 年诺贝尔化学奖的一半授予了 David Baker(华盛顿大学),表彰其在"计算蛋白质设计"领域的贡献;另一半授予了 Demis Hassabis 和 John Jumper(Google DeepMind),表彰其在"蛋白质结构预测"领域的贡献。
David Baker 的主要贡献包括:
- Rosetta:开创性的蛋白质结构预测和设计软件(1998 年至今)
- Top7:2003 年设计出第一个全新拓扑的人工蛋白质,实验证明可以稳定折叠
- RFdiffusion:2023 年发表,基于扩散模型的蛋白质结构生成工具
- ProteinMPNN:2022 年发表,革命性的序列设计工具
- RoseTTAFold:2021 年发表,与 AlphaFold2 同期的结构预测工具
这一奖项的颁发标志着 AI 驱动的蛋白质科学 已经从前沿探索走向了学术界的最高认可。
2. RFdiffusion🔗
RFdiffusion 是当前最重要的 AI 蛋白质结构生成工具,由 David Baker 实验室于 2023 年发表在 Nature 上1。它基于扩散模型(diffusion model),能够从噪声中"去噪"生成全新的蛋白质骨架结构,支持多种设计任务。
2.1 基本原理(概念理解)🔗
RFdiffusion 的核心思想借鉴了图像生成领域的扩散模型(如 Stable Diffusion),但作用对象从图像像素变成了蛋白质三维结构中残基的坐标和朝向。
扩散过程的直觉理解🔗
- 正向扩散(训练时):取一个已知的蛋白质结构,逐步向其中添加噪声(随机扰动残基坐标和朝向),经过 T 步后,蛋白质结构变成了一团随机噪声
- 反向去噪(生成时):从一团随机噪声出发,训练一个神经网络逐步"去除"噪声,最终恢复出一个合理的蛋白质结构
训练时(正向扩散):
真实蛋白质结构 → 加少量噪声 → 加更多噪声 → ... → 纯随机噪声
t=0 t=1 t=T
生成时(反向去噪):
纯随机噪声 → 去除一点噪声 → 去除更多噪声 → ... → 全新蛋白质结构
t=T t=T-1 t=T-2 t=0
关键在于:去噪网络的骨干架构使用了 RoseTTAFold(RFdiffusion 名字中的"RF"即来源于此)。RoseTTAFold 是一个蛋白质结构预测网络,它被改造为"去噪器"——给定一个带噪声的蛋白质结构,预测出去噪后的干净结构。
条件生成的关键🔗
RFdiffusion 的强大之处在于它不仅仅能生成随机结构,还能在各种约束条件下进行条件生成:
- 指定长度:生成特定长度的蛋白质
- 固定 motif:在生成的结构中嵌入指定的功能性片段
- 结合目标蛋白:生成能与指定靶蛋白结合的 binder
- 对称约束:生成具有特定对称性的寡聚体
这些条件通过在去噪过程中施加额外约束来实现,类似于图像生成中的"引导"(guidance)机制。
2.2 安装指南🔗
方式一:从 GitHub 安装(推荐)🔗
# 1. 克隆仓库
git clone https://github.com/RosettaCommons/RFdiffusion.git
cd RFdiffusion
# 2. 创建 conda 环境
conda env create -f env/SE3nv.yml
conda activate SE3nv
# 3. 安装额外依赖
pip install -e .
# 4. 下载模型权重(必须)
mkdir models && cd models
wget http://files.ipd.uw.edu/pub/RFdiffusion/6f5902ac237024bdd0c176cb93063dc4/Base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/e29311f6f1bf1af907f9ef9f44b8328b/Complex_base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/60f09a193fb5e5ccdc4980f613f7f168/Complex_Fold_base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/74f51cfb8b440f50d70878e05361d8f0/InpaintSeq_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/76d00716416567174cdb7ca96e208296/InpaintSeq_Fold_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/5532d2e1f3a4738acd7f9b7a209f3b18/ActiveSite_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/12fc204edeae5b57713571f85a16867f/Base_epoch8_ckpt.pt
# 如果需要对称体设计,还需下载:
wget http://files.ipd.uw.edu/pub/RFdiffusion/f572d396fae9206628714fb2ce00f72e/Complex_beta_ckpt.pt
cd ..
硬件要求: RFdiffusion 需要 NVIDIA GPU(推荐 ≥16GB 显存)。生成一个 ~200 残基的蛋白质在 A100 上约需 1-2 分钟。
方式二:Docker 安装🔗
# 拉取官方 Docker 镜像
docker pull nvcr.io/nvidia/pytorch:22.12-py3
# 运行容器(挂载本地目录)
docker run --gpus all -it \
-v /path/to/RFdiffusion:/app/RFdiffusion \
-v /path/to/models:/app/models \
nvcr.io/nvidia/pytorch:22.12-py3
# 在容器内完成安装
cd /app/RFdiffusion
pip install -e .
安装验证🔗
# 运行一个简单的无条件生成测试
python scripts/run_inference.py \
inference.output_prefix=test_outputs/test \
inference.model_directory_path=models/ \
'contigmap.contigs=[150-150]' \
inference.num_designs=1
# 如果成功,应该在 test_outputs/ 下看到生成的 PDB 文件
ls test_outputs/
# test_0.pdb test_0.trb
2.3 主要功能与使用示例🔗
RFdiffusion 使用 Hydra 配置系统来管理参数。所有参数通过命令行以 key=value 形式传入。下面逐一介绍各主要功能。
功能一:无条件结构生成(Unconditional Generation)🔗
用途: 从随机噪声中生成全新的蛋白质结构,不施加任何约束条件。适用于探索新折叠或作为设计的起点。
# 生成 10 个长度为 100-150 残基的新蛋白质
python scripts/run_inference.py \
inference.output_prefix=outputs/unconditional/design \
inference.model_directory_path=models/ \
'contigmap.contigs=[100-150]' \
inference.num_designs=10
参数说明:
| 参数 | 含义 |
|---|---|
inference.output_prefix | 输出文件路径前缀 |
inference.model_directory_path | 模型权重所在目录 |
contigmap.contigs | 描述要生成的蛋白质拓扑,[100-150] 表示生成 100-150 残基长的单链 |
inference.num_designs | 生成设计的数量 |
输出文件:
design_0.pdb~design_9.pdb:生成的骨架结构(仅含 CA 原子或骨架原子)design_0.trb~design_9.trb:包含去噪轨迹等元数据的文件
提示: 无条件生成的蛋白质通常以 α-螺旋束(helical bundle)为主,因为这是训练数据中最常见的折叠类型。如果需要特定拓扑(如 β-barrel),需要使用更高级的条件生成功能。
功能二:Motif Scaffolding🔗
用途: 将一个已知的功能性结构片段(motif)嵌入到一个新设计的蛋白质骨架(scaffold)中。这是酶设计、疫苗设计等应用的核心功能。
典型应用场景:
- 你有一个酶的活性位点残基(几个关键的催化残基),想设计一个新蛋白把这些残基以正确的空间排列呈现出来
- 你有一个抗原的表位片段(epitope),想设计一个蛋白把它稳定地展示出来
# 示例:将 PDB 5TPN 的 A 链第 10-25 号残基作为 motif,
# 设计一个 ~100 残基的 scaffold 来呈现它
python scripts/run_inference.py \
inference.output_prefix=outputs/scaffolding/design \
inference.model_directory_path=models/ \
inference.input_pdb=inputs/5TPN.pdb \
'contigmap.contigs=[10-40/A10-25/10-40]' \
inference.num_designs=10
Contig 语法详解:
contigmap.contigs 是 RFdiffusion 最核心的输入语法,用于描述生成蛋白质的拓扑结构:
| 语法 | 含义 | 示例 |
|---|---|---|
[100-150] | 生成一条 100-150 残基的新链 | 无条件生成 |
[A10-25] | 保留输入 PDB 的 A 链第 10-25 号残基 | 固定的 motif |
[10-40/A10-25/10-40] | 新段(10-40 残基) + motif(A10-25) + 新段(10-40 残基) | motif scaffolding |
[A10-25/0 B1-50] | A 链 motif + 不连接(/0)+ B 链的一段 | 多链 motif |
关键理解:
/表示连续连接(peptide bond),/0表示链间断开(不同链)。方括号内描述的是一条链的拓扑。
更复杂的 motif scaffolding 示例:
# 不连续 motif:将两段分离的 motif 同时嵌入 scaffold
# A 链的第 5-15 和第 30-40 号残基都是 motif
python scripts/run_inference.py \
inference.output_prefix=outputs/discontinuous/design \
inference.model_directory_path=models/ \
inference.input_pdb=inputs/target.pdb \
'contigmap.contigs=[10-30/A5-15/10-20/A30-40/10-30]' \
inference.num_designs=20
功能三:Binder Design(最高频使用场景)🔗
用途: 给定一个靶蛋白(target),设计一个能与其特异性结合的新蛋白(binder)。这是药物开发、诊断试剂等应用最关注的功能。
# 设计与靶蛋白(PDB 中的 A 链)结合的 binder
# binder 长度为 70-100 残基
python scripts/run_inference.py \
inference.output_prefix=outputs/binder/design \
inference.model_directory_path=models/ \
inference.input_pdb=inputs/target_protein.pdb \
'contigmap.contigs=[A1-150/0 70-100]' \
'ppi.hotspot_res=[A30,A33,A34,A37,A38]' \
inference.num_designs=100
参数说明:
| 参数 | 含义 |
|---|---|
contigmap.contigs=[A1-150/0 70-100] | 保留靶蛋白 A 链 1-150 号残基(不动),/0 表示新链断开,70-100 是新设计的 binder 长度 |
ppi.hotspot_res=[A30,A33,A34,A37,A38] | binder 应与靶蛋白的这些"热点残基"(hotspot residues)接触。这是引导 binder 结合位置的关键参数 |
实用提示: - Hotspot 残基的选择至关重要。 通常选择靶蛋白表面暴露的、已知功能性界面的残基。可以通过查阅文献、分析已知复合物结构,或用 PyMOL 手动选取表面暴露残基来确定。 - 生成数量要多。 Binder design 的成功率通常在 1-10% 左右(即使用 AF2 验证后),建议生成 100-1000 个设计,然后用结构预测筛选。 - 如果靶蛋白较大,可以只保留结合位点附近的残基以节省计算资源。
指定 binder 的结合面:
# 如果你想让 binder 从靶蛋白的特定一侧接近
# 可以提供一个"种子"binder 的大致位置
python scripts/run_inference.py \
inference.output_prefix=outputs/binder_guided/design \
inference.model_directory_path=models/ \
inference.input_pdb=inputs/target_with_seed.pdb \
'contigmap.contigs=[A1-150/0 70-100]' \
'ppi.hotspot_res=[A30,A33,A34]' \
denoiser.noise_scale_ca=0 \
denoiser.noise_scale_frame=0 \
inference.num_designs=50
功能四:对称寡聚体设计(Symmetric Oligomer Design)🔗
用途: 设计具有特定对称性的蛋白质复合物,如同源二聚体(C2)、三聚体(C3)、四面体(T)等。这在纳米材料、药物递送系统设计中有重要应用。
# 设计一个 C3 对称的三聚体,每个亚基 80-100 残基
python scripts/run_inference.py \
inference.output_prefix=outputs/symmetric/C3_design \
inference.model_directory_path=models/ \
'contigmap.contigs=[80-100]' \
inference.symmetry=C3 \
inference.num_designs=10
# 设计一个 C6 对称的六聚体
python scripts/run_inference.py \
inference.output_prefix=outputs/symmetric/C6_design \
inference.model_directory_path=models/ \
'contigmap.contigs=[60-80]' \
inference.symmetry=C6 \
inference.num_designs=10
支持的对称类型:
| 对称类型 | 说明 | 示例 |
|---|---|---|
C2 - C12 | 环状对称(cyclic) | 二聚体到十二聚体 |
D2 - D12 | 二面体对称(dihedral) | 更高阶对称组 |
T | 四面体对称(tetrahedral) | 12 个亚基 |
O | 八面体对称(octahedral) | 24 个亚基 |
I | 二十面体对称(icosahedral) | 60 个亚基 |
2.4 进阶参数与调优技巧🔗
去噪步数(Diffusion Steps)🔗
# 默认 50 步去噪,增加步数可能提高质量但更慢
inference.diffusion.T=50 # 默认值
inference.diffusion.T=100 # 更多步数,可能更高质量
inference.diffusion.T=25 # 更少步数,速度更快但质量可能下降
噪声尺度调控🔗
# 控制生成的多样性
# 值越大,生成越多样但可能质量下降;值越小,生成越保守
denoiser.noise_scale_ca=1.0 # CA 原子位移噪声(默认 1.0)
denoiser.noise_scale_frame=1.0 # 残基朝向噪声(默认 1.0)
常见问题排查🔗
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| CUDA out of memory | 蛋白质太长或显存不足 | 缩短设计长度、使用更大显存 GPU、减小靶蛋白区域 |
| 生成的结构全是螺旋束 | 无条件生成的常见现象 | 使用 motif scaffolding 或 binder design 来约束拓扑 |
| Binder 远离靶蛋白 | hotspot 残基选择不当 | 检查 hotspot 是否为表面暴露残基,增加 hotspot 数量 |
| 安装时 SE(3)-Transformer 报错 | 已知兼容性问题 | 按 GitHub Issues 中的解决方案操作,或使用 Docker |
| 生成结构有严重碰撞 | 正常现象 | 用 Rosetta relax 或 OpenMM 进行能量优化后再评估 |
3. ProteinMPNN🔗
3.1 核心思想:给骨架穿上"氨基酸外衣"🔗
ProteinMPNN(Message Passing Neural Network for Protein design)由 David Baker 实验室于 2022 年发表在 Science 上2,是当前最广泛使用的反向折叠(inverse folding)工具。
它解决的核心问题是:给定一个蛋白质的骨架结构(backbone),设计一条氨基酸序列使其能够折叠回该结构。
这一步是蛋白质设计流程中不可或缺的环节——RFdiffusion 生成的是骨架结构(只有 N、CA、C、O 原子坐标),要将其变成可以实际表达的蛋白质,必须为每个位置分配一个氨基酸残基。这正是 ProteinMPNN 的工作。
原理简述🔗
ProteinMPNN 将蛋白质骨架建模为一个图(graph):
- 节点(node):每个残基位置
- 边(edge):空间上相邻的残基对(基于 CA-CA 距离,通常取最近的 k 个邻居)
然后使用消息传递神经网络(Message Passing Neural Network, MPNN)在图上进行信息传播,最终通过自回归解码器(autoregressive decoder)逐位置生成氨基酸类型。
输入:蛋白质骨架坐标(N, CA, C, O 原子)
↓
[构建 k 近邻图] → 残基图(节点 = 残基, 边 = 空间邻居)
↓
[MPNN 编码器 × 3 层] → 每个残基获得结构上下文表示
↓
[自回归解码器] → 逐位置输出 20 种氨基酸的概率分布
↓
输出:设计序列(可采样多条不同序列)
为什么 ProteinMPNN 如此重要?🔗
在 ProteinMPNN 之前,序列设计主要依赖 Rosetta 的 fixbb(fixed backbone)设计协议,序列恢复率(sequence recovery)约为 30-33%。ProteinMPNN 将这一指标提升到了 ~52%(即对自然蛋白质,有超过一半的位置预测出了正确的氨基酸),实验验证的成功率也有了大幅提升。
| 指标 | Rosetta fixbb | ProteinMPNN |
|---|---|---|
| 序列恢复率(sequence recovery) | ~30-33% | ~52% |
| 实验成功率(设计→可溶表达) | 低 | 高(多项研究报告 >60%) |
| 计算速度 | 慢(分钟级/结构) | 快(秒级/结构) |
| 多状态设计支持 | 有限 | 原生支持 |
3.2 安装🔗
# 克隆仓库
git clone https://github.com/dauparas/ProteinMPNN.git
cd ProteinMPNN
# ProteinMPNN 依赖较少,使用 conda 或 pip 安装即可
conda create -n proteinmpnn python=3.9
conda activate proteinmpnn
pip install numpy torch
# 模型权重已包含在仓库中(vanilla_model_weights/ 目录下)
ls vanilla_model_weights/
# v_48_002.pt v_48_010.pt v_48_020.pt v_48_030.pt
3.3 基本使用🔗
方式一:命令行使用🔗
# 第一步:解析 PDB 文件,生成 ProteinMPNN 需要的 JSON 输入
python helper_scripts/parse_multiple_chains.py \
--input_path=inputs/ \
--output_path=parsed_chains.jsonl
# 第二步:运行序列设计
python protein_mpnn_run.py \
--jsonl_path parsed_chains.jsonl \
--out_folder outputs/ \
--num_seq_per_target 8 \
--sampling_temp "0.1" \
--batch_size 1
关键参数说明:
| 参数 | 含义 | 推荐值 |
|---|---|---|
--num_seq_per_target | 每个骨架生成几条候选序列 | 8-64 |
--sampling_temp | 采样温度。越低越保守(高置信位点偏多),越高越多样 | 0.1(保守)- 0.3(多样) |
--batch_size | 批大小 | 1(显存有限时)或更大 |
--backbone_noise | 向骨架添加随机噪声(Å),增加序列多样性 | 0.02-0.10 |
方式二:Python 脚本使用(更灵活)🔗
import json
import torch
import numpy as np
from protein_mpnn_utils import (
parse_PDB,
StructureDatasetPDB,
tied_featurize
)
# 加载模型
checkpoint = torch.load(
"vanilla_model_weights/v_48_020.pt",
map_location="cuda"
)
model = protein_mpnn_model(checkpoint)
model.eval().cuda()
# 解析输入 PDB
pdb_dict = parse_PDB("inputs/scaffold.pdb")
# 运行序列设计
with torch.no_grad():
sample = model.sample(
pdb_dict,
temperature=0.1,
num_samples=8
)
# 输出设计序列
for i, seq in enumerate(sample["sequences"]):
print(f"Design {i}: {seq}")
高级功能:固定部分残基🔗
在很多场景下,你不希望修改某些残基(例如 motif scaffolding 中的功能性残基):
# 创建固定位置文件
# 假设要固定 A 链的第 10, 11, 12, 20, 21 号残基
python helper_scripts/make_fixed_positions_dict.py \
--input_path=inputs/ \
--output_path=fixed_positions.jsonl \
--chain_list "A" \
--position_list "10 11 12 20 21"
# 运行设计(加上固定位置约束)
python protein_mpnn_run.py \
--jsonl_path parsed_chains.jsonl \
--out_folder outputs/ \
--num_seq_per_target 8 \
--sampling_temp "0.1" \
--fixed_positions_jsonl fixed_positions.jsonl
高级功能:多链设计🔗
对于蛋白质复合物(如 binder + target),通常只需要设计 binder 的序列,而保持 target 的序列不变:
# 指定只设计 B 链(binder),A 链(target)保持不变
python helper_scripts/make_fixed_positions_dict.py \
--input_path=inputs/ \
--output_path=fixed_positions.jsonl \
--chain_list "A" \
--position_list "" # 空字符串表示固定 A 链所有位置
# 或者使用 --designed_chain_list 参数
python protein_mpnn_run.py \
--jsonl_path parsed_chains.jsonl \
--out_folder outputs/ \
--num_seq_per_target 16 \
--sampling_temp "0.1" \
--chain_id_jsonl chain_ids.jsonl
3.4 RFdiffusion + ProteinMPNN 联合工作流🔗
这是当前蛋白质从头设计最标准的工作流:
RFdiffusion + ProteinMPNN 联合工作流
====================================
步骤 1:RFdiffusion 生成骨架
输入:设计约束(长度、对称性、靶蛋白等)
输出:N 个骨架结构(.pdb 文件,仅含骨架原子)
↓
步骤 2:ProteinMPNN 设计序列
输入:每个骨架结构
输出:每个骨架 M 条候选序列
↓
步骤 3:AlphaFold2 / ESMFold 结构预测验证
输入:设计的序列
输出:预测结构 + 置信度分数
↓
步骤 4:筛选
标准:scTM > 0.5, pLDDT > 70, etc.
↓
步骤 5:候选设计 → 实验验证
完整命令行示例(Binder Design Pipeline):
# ========== Step 1: RFdiffusion 生成 binder 骨架 ==========
python RFdiffusion/scripts/run_inference.py \
inference.output_prefix=pipeline/step1_backbones/design \
inference.model_directory_path=RFdiffusion/models/ \
inference.input_pdb=inputs/target.pdb \
'contigmap.contigs=[A1-100/0 70-100]' \
'ppi.hotspot_res=[A25,A28,A32,A35]' \
inference.num_designs=100
# ========== Step 2: ProteinMPNN 为每个骨架设计序列 ==========
# 2a. 解析骨架 PDB 文件
python ProteinMPNN/helper_scripts/parse_multiple_chains.py \
--input_path=pipeline/step1_backbones/ \
--output_path=pipeline/step2_parsed.jsonl
# 2b. 固定 target 链,只设计 binder 链
python ProteinMPNN/helper_scripts/assign_fixed_chains.py \
--input_path=pipeline/step2_parsed.jsonl \
--output_path=pipeline/step2_fixed_chains.jsonl \
--chain_list "A" # A 链是 target,固定不动
# 2c. 运行序列设计
python ProteinMPNN/protein_mpnn_run.py \
--jsonl_path pipeline/step2_parsed.jsonl \
--chain_id_jsonl pipeline/step2_fixed_chains.jsonl \
--out_folder pipeline/step2_sequences/ \
--num_seq_per_target 8 \
--sampling_temp "0.1" \
--batch_size 1
# ========== Step 3: 用 AlphaFold2/ColabFold 预测设计序列的结构 ==========
# (参见第 5 节的验证工作流)
提示: 在实际项目中,通常会生成 100-1000 个骨架,每个骨架设计 8-16 条序列,最终产生 几百到上万个候选设计。后续需要通过结构预测批量筛选。
4. 其他设计工具🔗
除了 RFdiffusion 和 ProteinMPNN 这两个"核心组合"之外,近年来涌现了一批重要的蛋白质设计工具,各有特色。
4.1 ESM-IF(Inverse Folding by ESM)🔗
ESM-IF 是 Meta AI(ESM 团队)开发的反向折叠模型,与 ProteinMPNN 解决相同的问题(骨架 → 序列),但架构不同。
核心特点:
- 基于 GVP(Geometric Vector Perceptron)+ Transformer 架构
- 在 CATH(蛋白质结构分类数据库)上训练
- 除了序列设计外,还可以用于评估序列-结构兼容性(作为评分函数)
安装与使用:
import esm
import torch
# 加载模型
model, alphabet = esm.pretrained.esm_if1_gvp4_t16_142M_UR50()
model = model.eval()
# 从 PDB 文件采样序列
from esm.inverse_folding.util import load_structure, extract_coords_from_structure
# 加载骨架结构
structure = load_structure("scaffold.pdb", chain="A")
coords, native_seq = extract_coords_from_structure(structure)
# 采样新序列
sampled_seqs = model.sample(
coords,
temperature=0.1,
num_samples=8
)
for i, seq in enumerate(sampled_seqs):
print(f"Design {i}: {seq}")
与 ProteinMPNN 的对比:
| 特性 | ProteinMPNN | ESM-IF |
|---|---|---|
| 序列恢复率 | ~52% | ~51% |
| 速度 | 快 | 稍慢 |
| 多链支持 | 好 | 有限 |
| 评分功能 | 有(log-likelihood) | 有(log-likelihood) |
| 社区活跃度 | 非常高 | 中等 |
实用建议: 在序列设计环节,ProteinMPNN 是首选。但用两种工具同时设计、然后取并集进行筛选,可以增加序列多样性。
4.2 Chroma(Generate Bio)🔗
Chroma 是 Generate Biomedicines 公司于 2023 年发布的蛋白质生成模型3,与 RFdiffusion 同属扩散模型范畴,但架构和功能有所不同。
核心特点:
- 同样基于扩散模型生成蛋白质结构
- 内置序列设计:Chroma 可以同时生成结构和序列,不需要额外的 ProteinMPNN 步骤
- 支持丰富的条件生成模式(通过 Conditioner API),包括对称性、子结构约束、基于自然语言的蛋白质描述等
- 开源(MIT 许可证)
安装与使用:
import chroma
from chroma import Chroma, Protein, conditioners
# 初始化模型
model = Chroma()
# 无条件生成
protein = model.sample(chain_lengths=[200])
protein.to("output.pdb")
# 条件生成:指定对称性 C3
protein = model.sample(
chain_lengths=[100],
conditioner=conditioners.SymmetryConditioner("C3")
)
# 条件生成:基于自然语言描述(实验性功能)
protein = model.sample(
chain_lengths=[150],
conditioner=conditioners.ProCapConditioner(
"A TIM barrel enzyme"
)
)
注意: Chroma 的自然语言条件生成功能尚不成熟,生成质量不稳定,目前更多用于探索和演示。
4.3 FrameFlow 与 FoldFlow(Flow Matching 模型)🔗
FrameFlow(Yim et al., 2023)和 FoldFlow(Bose et al., 2023)是基于流匹配(flow matching)方法的蛋白质生成模型。与扩散模型的逐步去噪过程不同,流匹配直接学习从噪声分布到目标分布的连续映射,理论上具有更高的采样效率。
核心区别:
| 特性 | RFdiffusion(扩散模型) | FrameFlow/FoldFlow(流匹配) |
|---|---|---|
| 生成过程 | 多步迭代去噪 | 连续流变换(更少步数) |
| 数学框架 | Score-based diffusion | Flow matching on SE(3) |
| 采样速度 | 中等(~50 步) | 较快(通常 ~10-20 步) |
| 成熟度 | 高(广泛验证) | 较新(社区验证中) |
| 功能完整性 | 完整(binder, scaffold, symmetry) | 基础功能(主要是无条件生成) |
FrameFlow 安装与使用:
# 克隆仓库
git clone https://github.com/microsoft/frame-flow.git
cd frame-flow
# 安装依赖
conda env create -f environment.yml
conda activate frameflow
# 运行生成
python generate.py --num_samples 10 --length 100
现状评估: 截至 2026 年,流匹配模型在蛋白质设计中仍处于发展阶段,功能不如 RFdiffusion 完善。如果你的目标是完成实际的设计任务(如 binder design),仍然推荐使用 RFdiffusion。流匹配模型更适合方法学研究和对比实验。
4.4 Genie2🔗
Genie2(Lin & AlQuraishi, 2024)是哥伦比亚大学 AlQuraishi 实验室开发的蛋白质结构生成模型,同样基于扩散框架,但在"可设计性"(designability)指标上超过了 RFdiffusion。
核心特点:
- 在 designability(设计的序列能否折叠回目标结构)方面表现出色
- 生成的结构多样性更高(更少的螺旋束偏好)
- 支持长蛋白质生成(已测试 >800 残基)
# 克隆并安装
git clone https://github.com/aqlaboratory/genie2.git
cd genie2
pip install -e .
# 下载模型权重
bash download_weights.sh
# 生成蛋白质结构
python generate.py \
--num_samples 10 \
--length 150 \
--output_dir outputs/
对比评价: Genie2 在无条件生成的多样性和可设计性方面有优势,但目前缺少 motif scaffolding 和 binder design 等条件生成功能,实际应用场景有限。
4.5 工具选择建议🔗
| 你的需求 | 推荐工具 | 原因 |
|---|---|---|
| Binder 设计 | RFdiffusion + ProteinMPNN | 最成熟、最多验证 |
| Motif scaffolding(酶设计等) | RFdiffusion + ProteinMPNN | 功能完善,业界标准 |
| 对称寡聚体设计 | RFdiffusion | 原生支持多种对称类型 |
| 序列设计(已有骨架) | ProteinMPNN | 速度快、恢复率高 |
| 一步式结构+序列设计 | Chroma | 无需两步流程 |
| 探索新折叠(多样性优先) | Genie2 | 结构多样性高 |
| 方法学研究/对比 | FrameFlow, FoldFlow | 新方法探索 |
5. 设计-预测-验证工作流🔗
蛋白质设计不止于"生成一个结构"——真正的设计流程是一个多阶段筛选漏斗。本节介绍完整的计算验证工作流,帮助你从数千个候选设计中筛选出最有可能在实验中成功的设计。
5.1 完整计算工作流🔗
┌──────────────────────────────────────────────┐
│ Step 1: 骨架生成 (RFdiffusion) │
│ 生成 100-1000 个候选骨架 │
└──────────────────┬───────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Step 2: 序列设计 (ProteinMPNN) │
│ 每个骨架生成 8-16 条候选序列 │
│ 总计 ~1000-10000 个候选序列 │
└──────────────────┬───────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Step 3: 结构预测验证 (AF2/ESMFold) │
│ 对每条设计序列进行结构预测 │
└──────────────────┬───────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Step 4: 计算指标筛选 │
│ scTM > 0.5, pLDDT > 70 等 │
│ 筛选出 Top 10-100 个候选 │
└──────────────────┬───────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Step 5: 实验验证 │
│ 基因合成 → 蛋白表达 → 纯化 → 功能测试 │
└──────────────────────────────────────────────┘
5.2 用 AlphaFold2 验证设计🔗
设计完成后,最重要的验证步骤是:将设计序列输入 AlphaFold2(或 ColabFold),看它预测出的结构是否与设计骨架吻合。 如果吻合,说明设计的序列大概率能在实验中折叠成期望的结构。
验证的核心逻辑:
- RFdiffusion 生成骨架 B
- ProteinMPNN 为骨架 B 设计序列 S
- 将序列 S 输入 AF2,得到预测结构 P
- 比较 P 与 B 是否相似 → 若相似,则设计可能成功
使用 ColabFold 批量验证:
# 安装本地版 ColabFold(用于批量预测)
pip install colabfold[alphafold]
# 批量预测设计序列(FASTA 格式)
colabfold_batch \
design_sequences.fasta \
af2_predictions/ \
--num-recycle 3 \
--num-models 1 \
--amber
使用 ESMFold 快速预筛选:
对于数千个设计,先用 ESMFold 快速筛选(秒级/序列),再对 Top 候选用 AF2 精确验证:
import torch
import esm
# 加载 ESMFold
model = esm.pretrained.esmfold_v1()
model = model.eval().cuda()
model.set_chunk_size(128)
# 批量快速预测
sequences = {
"design_001": "MKTVRQERL...",
"design_002": "MGSIFEKNL...",
# ... 更多设计序列
}
for name, seq in sequences.items():
with torch.no_grad():
pdb_str = model.infer_pdb(seq)
with open(f"esmfold_predictions/{name}.pdb", "w") as f:
f.write(pdb_str)
5.3 核心评估指标🔗
scTM(self-consistency TM-score)🔗
scTM 是衡量设计质量的最重要指标。它的含义是:设计序列的 AF2 预测结构与原始设计骨架之间的 TM-score。
| scTM 值 | 含义 |
|---|---|
| > 0.5 | 设计结构与预测结构整体折叠一致(最低通过标准) |
| > 0.7 | 高质量设计,推荐实验验证 |
| > 0.9 | 非常高质量,预测与设计高度一致 |
| < 0.5 | 设计序列可能无法折叠成目标结构,建议丢弃 |
计算 scTM 的方法:
# 使用 TMscore 程序计算
# 下载地址:https://zhanggroup.org/TM-score/
TMscore af2_prediction.pdb design_backbone.pdb
# 或使用 Python 工具(tmtools 包)
pip install tmtools
from tmtools import tm_align
# 读取结构坐标计算 TM-score
result = tm_align(
coords_predicted, # AF2 预测结构的 CA 坐标
coords_designed, # 设计骨架的 CA 坐标
seq_predicted,
seq_designed
)
print(f"scTM: {result.tm_norm_chain1:.3f}")
pLDDT of Designed Sequence🔗
将设计序列输入 AF2 后得到的 pLDDT 值反映了模型对设计蛋白折叠的"自信程度"。
| 平均 pLDDT | 含义 |
|---|---|
| > 80 | AF2 认为设计序列能稳定折叠,高置信度 |
| 60-80 | 部分区域可能不确定 |
| < 60 | AF2 对该设计的折叠不自信,设计可能有问题 |
注意: 高 pLDDT 不等于设计一定成功,低 pLDDT 也不等于一定失败。但 pLDDT 是一个很好的统计指标。
Sequence Recovery(序列恢复率)🔗
对于反向折叠任务(已有天然蛋白的骨架),衡量设计序列与天然序列的一致程度。
def sequence_recovery(designed_seq, native_seq):
"""计算序列恢复率"""
assert len(designed_seq) == len(native_seq)
match = sum(a == b for a, b in zip(designed_seq, native_seq))
return match / len(designed_seq)
# 示例
recovery = sequence_recovery(
"MKTVRQERLKSIV",
"MKTVRQEHLKSLV"
)
print(f"Sequence recovery: {recovery:.2%}") # 76.92%
注意: 序列恢复率主要用于评估反向折叠工具本身的性能。在从头设计中,设计序列不应该追求与某个天然蛋白序列相似——因为你是在创造一个全新的蛋白。
Binder 设计的额外指标🔗
对于 binder design,还需要评估结合界面的质量:
| 指标 | 含义 | 推荐阈值 |
|---|---|---|
| ipTM(AF2 multimer) | 界面预测质量 | > 0.7 |
| pAE(界面区域) | binder-target 间的对齐误差 | < 10 Å |
| 界面接触数 | binder 与 target 之间的原子接触数量 | 按需评估 |
| ΔG_binding(Rosetta) | 结合自由能估计 | < -10 REU |
5.4 批量筛选脚本示例🔗
以下是一个将上述评估整合在一起的筛选脚本框架:
import os
import json
import numpy as np
from pathlib import Path
def evaluate_designs(
design_dir, # RFdiffusion 输出的骨架目录
af2_prediction_dir, # AF2 对设计序列的预测结果目录
output_csv="design_evaluation.csv"
):
"""批量评估设计质量,输出汇总 CSV"""
results = []
for design_pdb in Path(design_dir).glob("*.pdb"):
name = design_pdb.stem
pred_pdb = Path(af2_prediction_dir) / f"{name}.pdb"
if not pred_pdb.exists():
continue
# 1. 计算 scTM
sctm = compute_tm_score(str(pred_pdb), str(design_pdb))
# 2. 解析 AF2 的 pLDDT(存储在 B-factor 列)
avg_plddt = parse_plddt_from_pdb(str(pred_pdb))
results.append({
"design_name": name,
"scTM": round(sctm, 3),
"avg_pLDDT": round(avg_plddt, 1),
"pass_scTM": sctm > 0.5,
"pass_pLDDT": avg_plddt > 70,
"recommended": sctm > 0.7 and avg_plddt > 80,
})
# 排序并输出
results.sort(key=lambda x: x["scTM"], reverse=True)
# 保存为 CSV
import csv
with open(output_csv, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=results[0].keys())
writer.writeheader()
writer.writerows(results)
# 统计
total = len(results)
passed = sum(1 for r in results if r["recommended"])
print(f"总设计数: {total}")
print(f"推荐实验验证: {passed} ({passed/total*100:.1f}%)")
return results
5.5 从计算到湿实验🔗
计算筛选完成后,以下是将设计推向实验验证的典型路径:
| 步骤 | 内容 | 说明 |
|---|---|---|
| 1. 密码子优化 | 将氨基酸序列转换为 DNA 序列 | 使用 IDT Codon Optimization Tool 或类似工具,针对表达宿主(如大肠杆菌)优化 |
| 2. 基因合成 | 通过商业公司合成 DNA | 如 Twist Bioscience、GenScript、IDT 等 |
| 3. 克隆与转化 | 将合成基因插入表达载体 | 常用 pET 系列载体 + BL21(DE3) 表达菌 |
| 4. 蛋白表达 | 诱导表达目标蛋白 | IPTG 诱导,37°C 或 18°C 过夜 |
| 5. 初步表征 | SDS-PAGE、尺寸排阻色谱(SEC) | 确认蛋白可溶表达且为单分散状态 |
| 6. 功能验证 | 视设计目标而定 | Binder:SPR/BLI 测结合亲和力;酶:活性测定等 |
| 7. 结构验证 | X-ray 或 Cryo-EM 验证实际结构 | 与设计结构对比 |
经验提示: - 计算设计到实验验证之间的"折损率"仍然很高。即使 scTM > 0.7 且 pLDDT > 80 的设计,实验成功率通常也在 10-50% 范围内(视任务难度而定)。 - 建议第一轮实验选择 8-24 个计算排名靠前的设计进行筛选。 - 蛋白是否能可溶表达本身就是一个重要筛选。很多设计虽然预测结构正确,但在大肠杆菌中会形成包涵体。
实操演示:从零设计一个小蛋白🔗
以下是一个完整的实操示例,从无条件生成一个 ~100 残基的新蛋白到验证其可设计性。
# ========== 环境准备 ==========
conda activate SE3nv # RFdiffusion 环境
cd /path/to/your/workspace
# ========== Step 1: 生成 20 个候选骨架 ==========
python RFdiffusion/scripts/run_inference.py \
inference.output_prefix=demo/backbones/design \
inference.model_directory_path=RFdiffusion/models/ \
'contigmap.contigs=[100-100]' \
inference.num_designs=20
echo "✓ Step 1 完成:生成了 20 个骨架"
ls demo/backbones/
# ========== Step 2: ProteinMPNN 序列设计 ==========
conda activate proteinmpnn
# 解析骨架
python ProteinMPNN/helper_scripts/parse_multiple_chains.py \
--input_path=demo/backbones/ \
--output_path=demo/parsed.jsonl
# 设计序列(每个骨架 8 条序列)
python ProteinMPNN/protein_mpnn_run.py \
--jsonl_path demo/parsed.jsonl \
--out_folder demo/sequences/ \
--num_seq_per_target 8 \
--sampling_temp "0.1"
echo "✓ Step 2 完成:共设计了 $(cat demo/sequences/seqs/*.fa | grep -c '>') 条序列"
# ========== Step 3: ESMFold 快速预测 ==========
# (使用前面章节介绍的 ESMFold 批量预测脚本)
python predict_with_esmfold.py \
--input_fasta demo/sequences/seqs/*.fa \
--output_dir demo/predictions/
echo "✓ Step 3 完成:结构预测已完成"
# ========== Step 4: 计算 scTM 和筛选 ==========
python evaluate_designs.py \
--design_dir demo/backbones/ \
--prediction_dir demo/predictions/ \
--output demo/evaluation.csv
echo "✓ Step 4 完成:筛选结果见 demo/evaluation.csv"
⚠️ 注意: 以上脚本中的
predict_with_esmfold.py和evaluate_designs.py需要根据实际情况编写,上面第 5 节中提供了核心代码框架。
本章小结🔗
- ✅ 蛋白质设计的核心范式是生成式设计(RFdiffusion)+ 反向折叠(ProteinMPNN)的组合
- ✅ RFdiffusion 是当前最重要的结构生成工具,支持无条件生成、motif scaffolding、binder design、对称体设计等功能
- ✅ ProteinMPNN 是标准的序列设计工具,为 RFdiffusion 生成的骨架设计可实际表达的氨基酸序列
- ✅ 设计质量评估的核心指标是 scTM(设计骨架与 AF2 预测结构的 TM-score)和 pLDDT
- ✅ 完整的设计流程是:生成骨架 → 设计序列 → 预测验证 → 筛选 → 实验验证
- ✅ binder design 建议生成 100+ 骨架并充分筛选,实验选取 Top 8-24 个候选
延伸阅读🔗
- RFdiffusion GitHub 仓库(官方代码和文档)
- ProteinMPNN GitHub 仓库(官方代码)
- Chroma GitHub 仓库(Generate Bio 的生成模型)
- Genie2 GitHub 仓库(AlQuraishi Lab)
- RFdiffusion 教程合集 - IPD(Baker 实验室官方工具集合)
- 相关章节:01_蛋白质结构预测_AlphaFold.md
- 相关章节:02_蛋白质结构预测_进阶工具.md
参考文献🔗
-
Watson, J.L., Juergens, D., Bennett, N.R. et al. "De novo design of protein structure and function with RFdiffusion." Nature, 620, 1089–1100 (2023). https://doi.org/10.1038/s41586-023-06415-8 ↩
-
Dauparas, J., Anishchenko, I., Bennett, N. et al. "Robust deep learning–based protein sequence design using ProteinMPNN." Science, 378, 49-56 (2022). https://doi.org/10.1126/science.add2187 ↩
-
Ingraham, J.B., Barber, M., Barber, G. et al. "Illuminating protein space with a programmable generative model." Nature, 623, 1070–1078 (2023). https://doi.org/10.1038/s41586-023-06728-8 ↩
-
Lin, Y. & AlQuraishi, M. "Generating Novel, Designable, and Diverse Protein Structures by Equivariantly Diffusing Oriented Residue Clouds." ICML (2023). ↩
-
Yim, J., Trippe, B.L., De Bortoli, V. et al. "SE(3) diffusion model with application to protein backbone generation." ICML (2023). ↩