跳转至

蛋白质设计与工程🔗

关键词: 蛋白质设计, RFdiffusion, ProteinMPNN, 从头设计, 反向折叠, binder design
难度: ⭐⭐⭐
预计阅读时间: 50 分钟
最后更新: 2026-04-08


本章导读🔗

蛋白质结构预测回答的是"自然界已有的蛋白质长什么样",而蛋白质设计要回答的问题更加激动人心——我们能否从零开始创造自然界不存在的蛋白质? 2024 年诺贝尔化学奖授予了 David Baker,正是因为他在"计算蛋白质设计"(computational protein design)领域的开创性贡献。

近年来,以 RFdiffusionProteinMPNN 为代表的 AI 工具让蛋白质从头设计(de novo protein design)的成功率从过去不到 1% 提升到了实验验证中的 10-30% 甚至更高,彻底改变了蛋白质工程的研究范式。

读完本章,你将能够:

  1. 理解蛋白质设计的两大范式(正向设计与反向设计)
  2. 掌握 RFdiffusion 的安装、使用和主要设计功能
  3. 掌握 ProteinMPNN 的序列设计方法
  4. 了解其他前沿设计工具(Chroma、ESM-IF、FrameFlow 等)
  5. 构建完整的"设计→预测→验证"计算工作流

前置知识: 建议先阅读 01_蛋白质结构预测_AlphaFold.md02_蛋白质结构预测_进阶工具.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 HassabisJohn Jumper(Google DeepMind),表彰其在"蛋白质结构预测"领域的贡献。

David Baker 的主要贡献包括:

  • Rosetta:开创性的蛋白质结构预测和设计软件(1998 年至今)
  • Top7:2003 年设计出第一个全新拓扑的人工蛋白质,实验证明可以稳定折叠
  • RFdiffusion:2023 年发表,基于扩散模型的蛋白质结构生成工具
  • ProteinMPNN:2022 年发表,革命性的序列设计工具
  • RoseTTAFold:2021 年发表,与 AlphaFold2 同期的结构预测工具

这一奖项的颁发标志着 AI 驱动的蛋白质科学 已经从前沿探索走向了学术界的最高认可。


2. RFdiffusion🔗

RFdiffusion 是当前最重要的 AI 蛋白质结构生成工具,由 David Baker 实验室于 2023 年发表在 Nature1。它基于扩散模型(diffusion model),能够从噪声中"去噪"生成全新的蛋白质骨架结构,支持多种设计任务。

2.1 基本原理(概念理解)🔗

RFdiffusion 的核心思想借鉴了图像生成领域的扩散模型(如 Stable Diffusion),但作用对象从图像像素变成了蛋白质三维结构中残基的坐标和朝向。

扩散过程的直觉理解🔗

  1. 正向扩散(训练时):取一个已知的蛋白质结构,逐步向其中添加噪声(随机扰动残基坐标和朝向),经过 T 步后,蛋白质结构变成了一团随机噪声
  2. 反向去噪(生成时):从一团随机噪声出发,训练一个神经网络逐步"去除"噪声,最终恢复出一个合理的蛋白质结构
训练时(正向扩散):
    真实蛋白质结构 → 加少量噪声 → 加更多噪声 → ... → 纯随机噪声
                        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 年发表在 Science2,是当前最广泛使用的反向折叠(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(蛋白质结构分类数据库)上训练
  • 除了序列设计外,还可以用于评估序列-结构兼容性(作为评分函数)

安装与使用:

# ESM-IF 包含在 ESM 包中
pip install fair-esm
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 许可证)

安装与使用:

pip install generate-chroma
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),看它预测出的结构是否与设计骨架吻合。 如果吻合,说明设计的序列大概率能在实验中折叠成期望的结构。

验证的核心逻辑:

  1. RFdiffusion 生成骨架 B
  2. ProteinMPNN 为骨架 B 设计序列 S
  3. 将序列 S 输入 AF2,得到预测结构 P
  4. 比较 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 = TM-score(AF2预测结构, 原始设计骨架)
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.pyevaluate_designs.py 需要根据实际情况编写,上面第 5 节中提供了核心代码框架。


本章小结🔗

  • ✅ 蛋白质设计的核心范式是生成式设计(RFdiffusion)+ 反向折叠(ProteinMPNN)的组合
  • ✅ RFdiffusion 是当前最重要的结构生成工具,支持无条件生成、motif scaffolding、binder design、对称体设计等功能
  • ✅ ProteinMPNN 是标准的序列设计工具,为 RFdiffusion 生成的骨架设计可实际表达的氨基酸序列
  • ✅ 设计质量评估的核心指标是 scTM(设计骨架与 AF2 预测结构的 TM-score)和 pLDDT
  • ✅ 完整的设计流程是:生成骨架 → 设计序列 → 预测验证 → 筛选 → 实验验证
  • ✅ binder design 建议生成 100+ 骨架并充分筛选,实验选取 Top 8-24 个候选

延伸阅读🔗


参考文献🔗


  1. 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 

  2. 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 

  3. 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 

  4. Lin, Y. & AlQuraishi, M. "Generating Novel, Designable, and Diverse Protein Structures by Equivariantly Diffusing Oriented Residue Clouds." ICML (2023). 

  5. Yim, J., Trippe, B.L., De Bortoli, V. et al. "SE(3) diffusion model with application to protein backbone generation." ICML (2023).