一、为什么只看模型介绍还不够

RFdiffusion 系列论文通常会从任务、结果和实验验证角度介绍模型,例如能不能生成 binder、能不能 scaffold motif、能不能设计酶活性位点、能不能扩展到全原子相互作用。这些内容很重要,但如果只停留在模型介绍层面,会有一个问题:我们知道它“能做什么”,但不清楚它“为什么能做”和“具体怎么做”。

对于真正想使用 RFdiffusion 系列模型的人来说,更关键的问题其实是:

模型输入是什么?
扩散过程扩散的到底是什么?
contig 字符串如何控制生成结构?
motif、hotspot、ligand、active site 是如何作为条件进入模型的?
模型输出的 PDB 为什么通常只有骨架?
为什么还需要 ProteinMPNN、LigandMPNN、Chai-1、AlphaFold 或 RF3 做后续筛选?
RFdiffusion2 和 RFdiffusion3 在代码层面与 RFdiffusion1 的差异是什么?

因此,这版报告将 RFdiffusion 系列拆成两条线来讲:

第一条线是模型演进线:从蛋白骨架生成,到全原子建模,再到酶活性位点和统一相互作用设计。
第二条线是算法实现线:从坐标加噪、去噪生成、条件控制、序列设计,到结构预测和筛选。

二、RFdiffusion1 的核心算法原理

1. 它不是直接生成序列,而是先生成蛋白骨架

RFdiffusion1 的核心思想不是“给定目标,直接生成氨基酸序列”,而是先生成一个三维蛋白骨架。这个骨架主要由每个残基的主链坐标和局部刚体框架表示。

可以简单理解为,每个氨基酸残基不是一个孤立点,而是一个带方向的局部坐标系。模型需要生成的不只是 Cα 在哪里,还要知道这个残基的朝向是什么。这样才能描述蛋白主链的空间走向。

RFdiffusion1 的基本流程是:

  1. 从真实蛋白结构中取出残基框架;

  2. 对坐标和方向逐步加噪;

  3. 训练模型学习如何从带噪结构恢复干净结构;

  4. 生成时从随机噪声开始,逐步去噪得到蛋白骨架;

  5. 再用 ProteinMPNN 根据骨架设计序列;

  6. 最后用 AlphaFold2、ESMFold 或其他结构预测工具验证序列是否能折叠回设计骨架。

所以 RFdiffusion1 不是一个完整的“序列到功能”闭环模型,而是一个“结构生成器”。它负责提出骨架假设,ProteinMPNN 负责补序列,结构预测模型负责验证这个假设是否可信。

2. 扩散过程扩散的是什么

在图像扩散模型中,模型对像素加噪,然后学习去噪。在 RFdiffusion 中,模型对蛋白结构加噪。这里的结构包括两类信息:

一类是每个残基的位置,也就是平移信息。
另一类是每个残基的朝向,也就是旋转信息。

因此,RFdiffusion 的扩散空间不是普通二维图像,而是三维几何空间。它需要同时处理平移和旋转。平移可以理解为对 Cα 坐标加高斯噪声;旋转则需要在 SO(3) 空间中进行处理。

简化后可以表示为:

真实结构 X0
    ↓ 加噪
Xt = noising(X0, t)
    ↓ 模型预测
X0_hat = RFdiffusion(Xt, 条件信息, t)
    ↓ 根据 X0_hat 更新
Xt-1 = denoise(Xt, X0_hat)
    ↓ 重复多步
最终得到设计骨架

在每一步中,模型并不是直接预测下一步结构,而是预测最终干净结构 X0 的估计值。然后采样器根据当前带噪结构 Xt 和模型预测的 X0_hat,计算下一步 Xt-1。

这个思想非常重要。它意味着模型每一步都在问:“如果当前这个模糊结构最终要变成一个真实蛋白,那么它应该长成什么样?”

3. self-conditioning 的作用

RFdiffusion1 中一个重要技巧是 self-conditioning。它的意思是:模型在当前去噪步骤中,不只看当前的带噪结构 Xt,还会参考上一步预测出来的 X0_hat。

简化理解为:

第 t 步输入 = 当前带噪结构 Xt + 上一步预测的干净结构 X0_hat(t+1)
第 t 步输出 = 新的干净结构预测 X0_hat(t)

这和 AlphaFold/RoseTTAFold 中的 recycling 思想很像。模型不是每一步都从零开始判断,而是不断根据前一步的判断进行修正。

self-conditioning 的价值在于提高轨迹连续性。没有 self-conditioning 时,模型每一步可能都在独立猜测最终结构,轨迹容易不稳定;加入 self-conditioning 后,模型更像是在不断细化同一个结构假设。

4. 条件生成是如何实现的

RFdiffusion1 的强大之处不只是无条件生成,而是可以在不同约束下生成结构。常见约束包括:

无条件生成:只给定长度,让模型生成一个新蛋白。
motif scaffolding:固定一个功能片段,让模型围绕它补全 scaffold。
binder design:固定目标蛋白,让模型生成结合蛋白。
hotspot conditioning:指定目标蛋白上的关键接触残基。
symmetry conditioning:指定对称性,生成 Cn、Dn 或其他对称结构。
partial diffusion:从已有结构出发,只做局部扰动和改造。

这些条件在代码中通常通过 contigmap.contigsinference.input_pdbppi.hotspot_resinference.symmetrydiffuser.partial_T 等参数体现。

其中最重要的是 contig 字符串。它是 RFdiffusion 的“设计语言”。

例如:

'contigmap.contigs=[150-150]'

表示生成一个长度固定为 150 aa 的蛋白。

'contigmap.contigs=[5-15/A10-25/30-40]'

表示保留输入 PDB 中 A 链 10–25 位作为 motif,在 motif 前面生成 5–15 个残基,在后面生成 30–40 个残基。

'contigmap.contigs=[B1-100/0 100-100]'

表示保留 B 链 1–100 位作为目标链,同时生成一个 100 aa 的 binder。/0 表示链断开。

5. RFdiffusion1 的运行流程

一个标准 RFdiffusion1 设计流程可以拆成四步:

步骤 1:准备输入结构
    目标蛋白 PDB / motif PDB / 空输入

步骤 2:运行 RFdiffusion
    生成 backbone-only PDB 和 trb 元数据文件

步骤 3:运行 ProteinMPNN
    根据骨架设计多个候选序列

步骤 4:结构预测与筛选
    AlphaFold2 / ESMFold / AF3 / Chai-1
    评估 pLDDT、pAE、RMSD、interface score、motif RMSD 等指标

RFdiffusion1 输出的 PDB 文件通常不应该被理解为最终蛋白结构。因为它主要输出骨架,设计区域经常以 glycine 表示,没有可信侧链。因此,必须接 ProteinMPNN 或类似 inverse folding 模型来补序列。

三、RFdiffusion1 的代码操作示例

1. 环境准备

典型安装流程如下:

git clone https://github.com/RosettaCommons/RFdiffusion.git
cd RFdiffusion

mkdir models
cd models

# 下载模型权重
wget <Base_ckpt.pt>
wget <Complex_base_ckpt.pt>
wget <ActiveSite_ckpt.pt>

cd ..

# 创建环境
conda env create -f env/SE3nv.yml
conda activate SE3nv

cd env/SE3Transformer
pip install --no-cache-dir -r requirements.txt
python setup.py install

cd ../..
pip install -e .

实际部署时,最容易出问题的是 CUDA、PyTorch 和 SE(3)-Transformer 的版本。建议优先使用官方 Docker 或 Colab 版本验证流程,再迁移到服务器。

2. 无条件生成蛋白骨架

./scripts/run_inference.py \
  'contigmap.contigs=[150-150]' \
  inference.output_prefix=outputs/uncond/test \
  inference.num_designs=10

这会生成 10 个长度为 150 aa 的蛋白骨架。

输出通常包括:

outputs/uncond/test_0.pdb
outputs/uncond/test_0.trb
outputs/uncond/traj/

其中:

.pdb 是最终生成骨架;
.trb 保存 contig 映射、输入输出残基编号、配置参数等元信息;
traj/ 保存去噪轨迹,可以用于观察结构如何从噪声逐步形成。

3. motif scaffolding

假设输入 PDB 为 motif.pdb,需要固定 A 链 10–25 位:

./scripts/run_inference.py \
  inference.input_pdb=inputs/motif.pdb \
  'contigmap.contigs=[5-15/A10-25/30-40]' \
  inference.output_prefix=outputs/motif/design \
  inference.num_designs=50

这类任务的筛选重点不是只看整体 RMSD,而是要重点看 motif 是否被准确保持:

motif RMSD < 1 Å
overall backbone RMSD < 2 Å
pAE < 5
pLDDT 较高

4. protein binder design

假设目标蛋白是 B 链 1–100 位:

./scripts/run_inference.py \
  inference.input_pdb=inputs/target.pdb \
  'contigmap.contigs=[B1-100/0 80-120]' \
  'ppi.hotspot_res=[B35,B38,B42]' \
  inference.output_prefix=outputs/binder/design \
  inference.num_designs=100

这里的 ppi.hotspot_res 是设计成败的关键。它告诉模型 binder 应该接触目标蛋白上的哪些位置。如果 hotspot 选得太散,模型可能难以形成稳定界面;如果选得太少,模型可能结合到不理想区域。

5. partial diffusion

如果你已经有一个初始 binder-target 复合物,只想对 binder 做多样化,可以使用 partial diffusion:

./scripts/run_inference.py \
  inference.input_pdb=inputs/complex.pdb \
  'contigmap.contigs=[100-100/0 B1-150]' \
  diffuser.partial_T=20 \
  inference.output_prefix=outputs/partial/design \
  inference.num_designs=50

partial_T 越大,扰动越强,多样性越高,但越可能偏离原始结构。partial_T 越小,结构保守性越强,但探索空间更窄。

6. 环肽或 macrocycle 设计

RFdiffusion 的 RFpeptides 模式可以生成环肽。典型参数是:

./scripts/run_inference.py --config-name base \
  inference.input_pdb=inputs/target.pdb \
  'contigmap.contigs=[12-18 A3-117/0]' \
  inference.cyclic=True \
  inference.cyc_chains='a' \
  ppi.hotspot_res=['A51','A52','A50'] \
  diffuser.T=50 \
  inference.output_prefix=outputs/cyclic/design \
  inference.num_designs=20

这里需要注意,RFdiffusion 生成的是骨架约束意义上的 macrocycle。对于真实化学成环,比如首尾酰胺键、二硫键、非天然连接子,后续仍然需要用 Rosetta、PyRosetta、AF3 或专门的几何筛选脚本进一步验证。

四、RFdiffusion1 后处理代码逻辑

1. 为什么要接 ProteinMPNN

RFdiffusion 输出的是骨架,ProteinMPNN 根据骨架设计序列。一个简单流程是:

python ProteinMPNN/run.py \
  --pdb_path outputs/binder/design_0.pdb \
  --out_folder mpnn_outputs/design_0 \
  --num_seq_per_target 8 \
  --sampling_temp "0.1"

一般建议每个骨架生成多个序列。因为同一个骨架可能有多种可行序列,其中一部分能折叠回设计结构,另一部分不能。

2. 为什么要接 AlphaFold / Chai / RF3

ProteinMPNN 设计出的序列只是“符合骨架几何的序列”,不代表它真实会折叠成该骨架。因此需要结构预测模型做回折验证。

筛选逻辑可以写成:

RFdiffusion backbone
    ↓
ProteinMPNN sequences
    ↓
AlphaFold / Chai / RF3 prediction
    ↓
比较 predicted structure 与 designed backbone
    ↓
保留高可信候选

常见筛选指标包括:

单体设计:
- pLDDT
- pAE
- predicted RMSD to designed backbone
- radius of gyration
- secondary structure 是否合理

binder 设计:
- binder 自身 pLDDT
- interface pAE / iPAE
- target-binder 接触面积
- hotspot 是否被接触
- interface RMSD
- 是否存在 clash
- 是否形成过深或过浅界面

motif scaffolding:
- motif RMSD
- motif 原子几何是否保持
- scaffold 是否遮挡活性位点
- 是否形成合理口袋

一个简单的筛选脚本伪代码如下:

import pandas as pd

df = pd.read_csv("all_design_metrics.csv")

filtered = df[
    (df["plddt"] > 80) &
    (df["pae"] < 5) &
    (df["backbone_rmsd"] < 2.0) &
    (df["motif_rmsd"] < 1.0)
]

filtered = filtered.sort_values(
    by=["motif_rmsd", "backbone_rmsd", "plddt"],
    ascending=[True, True, False]
)

filtered.to_csv("filtered_designs.csv", index=False)

对于 binder,还应该增加界面指标:

filtered = df[
    (df["binder_plddt"] > 80) &
    (df["interface_pae"] < 10) &
    (df["interface_contacts"] > 20) &
    (df["clash_count"] == 0)
]

五、RFdiffusionAA:从骨架生成走向全原子建模

RFdiffusion1 的主要问题在于,它对功能化学的描述不够直接。它能很好地生成骨架,但很多生物功能并不只由骨架决定,而是由侧链原子、小分子、金属离子、核酸和共价修饰共同决定。

RFdiffusionAA 的出现,就是为了让模型能够处理更复杂的全原子生物分子系统。

它的核心变化是表示方式改变了。

RFdiffusion1 主要看 residue frame,也就是残基级别的骨架框架。
RFdiffusionAA 则允许一部分对象被 atomized,也就是以原子级方式表示。
这使得模型可以看到小分子、金属、核酸和非标准残基。

从算法角度看,RFdiffusionAA 的关键不是简单“加了配体”,而是让模型在同一个结构图中同时处理 residue-level token 和 atom-level token。

可以简单理解为:

普通蛋白残基:作为 residue token 处理
小分子原子:作为 atom token 处理
金属离子:作为 atom token 处理
活性位点关键侧链:可以 atomized
核酸或修饰基团:可进入全原子上下文

这为 RFdiffusion2 的酶活性位点设计打下了基础。因为酶设计真正关心的是某些功能原子的位置和方向,而不是只关心残基编号。

六、RFdiffusion2 的算法原理

1. RFdiffusion2 解决的问题

RFdiffusion2 主要针对 enzyme active site scaffolding。它解决的是这样一个问题:

给定一组反应相关的功能原子,例如催化残基的末端原子、底物原子、金属配位原子,能不能让模型自动生成一个蛋白 scaffold,把这些原子放在正确的三维几何关系中?

传统方法通常需要先指定:

第几个残基是 His
第几个残基是 Asp
第几个残基是 Lys
这些残基采用什么 rotamer
它们分别在序列中什么位置

RFdiffusion2 尝试去掉这些人工步骤。它允许输入 unindexed atomic motif,也就是只给定功能原子的空间几何,而不提前指定它们属于最终序列的哪个位置。

这对酶设计非常重要。因为活性位点的关键不是“第 50 位一定是 His”,而是“某个 His 的 N 原子必须在这里,能够与底物形成正确作用”。

2. unindexed motif 是什么

在 RFdiffusion1 中,motif 通常是 indexed 的。也就是说,输入 PDB 中的 A10-25 被固定,输出中也有明确映射。

而在 RFdiffusion2 中,motif 可以是 unindexed 的。模型知道这些功能原子的空间关系,但不知道它们最终应该落在哪些序列位置上。

简化理解:

RFdiffusion1:
固定 A10、A20、A35 这些残基 → 生成 scaffold

RFdiffusion2:
固定某些功能原子的空间位置 → 模型自己决定它们对应哪些残基和序列位置

这使模型可以同时采样三个变量:

scaffold backbone
+ catalytic residue sequence index
+ catalytic side-chain rotamer

这就是 RFdiffusion2 相比 RFdiffusion1 的核心算法提升。

3. flow matching 的意义

RFdiffusion2 不再只是沿用 RFdiffusion1 的经典 DDPM 采样思想,而是引入 flow matching。可以把它理解为:模型学习一条从噪声分布流向真实结构分布的连续向量场。

DDPM 更像是学习一步步去噪;flow matching 更像是学习从噪声到数据的运动方向。对于复杂全原子约束任务,flow matching 可以使训练和采样更稳定。

简化伪代码如下:

# x0: 真实结构
# x1: 噪声结构
# t: 0 到 1 之间的时间
# xt: x0 与 x1 之间插值得到的中间状态

xt = interpolate(x0, x1, t)

# 模型学习在 xt 处应该朝哪个方向移动
v_pred = model(xt, t, condition)

# 目标向量场
v_target = x0 - x1

loss = mse(v_pred, v_target)

在真实模型中,这个过程要处理 SE(3) 几何、原子类型、残基框架、配体、小分子和 motif 约束,不会像上面这么简单。但这个伪代码可以帮助理解 flow matching 的核心思想:模型不是只预测干净结构,而是学习从噪声走向真实结构的流动方向。

4. RFdiffusion2 的 pipeline

RFdiffusion2 的完整流程通常是:

输入:
    ligand / theozyme / active-site motif / unindexed atoms

步骤 1:RFdiffusion2 生成 backbone + atomized motif region

步骤 2:理想化处理
    backbone idealization
    deatomization
    unindexed residues assignment

步骤 3:LigandMPNN 进行序列设计和侧链 packing

步骤 4:Chai-1 或其他结构预测模型 refolding

步骤 5:计算 motif recapitulation metrics
    backbone RMSD
    Cα RMSD
    full-atom RMSD
    motif-atom RMSD

这里最重要的是:RFdiffusion2 的输出不是直接进入实验的最终酶,而是进入一个多步筛选流程。生成结构只是第一层,序列拟合和 refolding 验证同样关键。

七、RFdiffusion2 的代码操作示例

1. 环境和容器

RFdiffusion2 官方代码目前更推荐使用 Apptainer / Singularity 容器运行:

git clone https://github.com/RosettaCommons/RFdiffusion2.git
cd RFdiffusion2

export PYTHONPATH="/path/to/RFdiffusion2"

# 下载模型权重和容器
python setup.py

运行命令通常写成:

apptainer exec --nv \
  rf_diffusion/exec/bakerlab_rf_diffusion_aa.sif \
  <python_script> <args>

2. 运行官方 demo

单个 demo 示例:

apptainer exec --nv \
  rf_diffusion/exec/bakerlab_rf_diffusion_aa.sif \
  rf_diffusion/benchmark/pipeline.py \
  --config-name=open_source_demo \
  sweep.benchmarks=active_site_unindexed_atomic_partial_ligand

运行全部 demo:

apptainer exec --nv \
  rf_diffusion/exec/bakerlab_rf_diffusion_aa.sif \
  rf_diffusion/benchmark/pipeline.py \
  --config-name=open_source_demo

这些 demo 能展示三类能力:

1. 从 atomic motif + small molecule 设计酶
2. 从 unknown sequence positions 的 atomic motif 设计酶
3. 使用 RASA conditioning 设计 small-molecule binder

3. 运行 AME benchmark

RFdiffusion2 论文中的 AME benchmark 可以通过如下命令复现:

apptainer exec --nv \
  rf_diffusion/exec/bakerlab_rf_diffusion_aa.sif \
  rf_diffusion/benchmark/pipeline.py \
  --config-name=enzyme_bench_n41_fixedligand \
  in_proc=True

但是这个流程计算量非常大,因为它涉及:

41 个 active sites
每个 active site 生成 100 个 design
每个 design 生成 8 条序列
再进行 Chai folding

因此,在个人服务器或普通工作站上,不建议一上来直接跑完整 benchmark。更合理的方式是先跑单个 demo,确认输入、输出和评估脚本都能正常运行。

4. RFdiffusion2 输出如何理解

RFdiffusion2 的输出比 RFdiffusion1 更复杂,因为它同时包含 indexed backbone region 和 unindexed atomized region。

后处理大致包括:

1. backbone idealization
2. protein deatomization
3. 将 unindexed residues 分配回 indexed backbone
4. LigandMPNN 设计序列并 packing
5. Chai-1 refolding
6. 计算 motif recapitulation metrics

尤其要关注两个问题:

第一,unindexed motif 是否真的被合理放进了 scaffold 中;
第二,LigandMPNN 重新打包后,关键 rotamer 有没有偏离原来的 theozyme 几何。

这也是为什么 RFdiffusion2 的指标中会出现 motif atom RMSD、full atom RMSD、motif ideality difference 等内容。

八、RFdiffusion3 的算法与代码变化

RFdiffusion3 进一步走向统一全原子生物分子相互作用设计。相比 RFdiffusion1 和 RFdiffusion2,它在使用方式上也发生了变化。

RFdiffusion1 主要通过命令行 Hydra 参数控制,例如:

./scripts/run_inference.py 'contigmap.contigs=[150-150]' ...

RFdiffusion3 则更倾向于用 YAML 或 JSON 文件描述任务,然后用 rfd3 design 运行。

1. RFdiffusion3 的输入组织方式

一个最简单的 RFD3 JSON 输入可以写成:

{
  "example_1": {
    "input": "inputs/target.pdb",
    "contig": "50-80,/0,A1-100",
    "length": "150-180"
  }
}

其中:

input:输入 PDB 或 CIF
contig:定义哪些部分生成,哪些部分保留
length:控制最终结构总长度

运行命令是:

rfd3 design \
  inputs=inputs/rfd3_example.json \
  out_dir=outputs/rfd3_example \
  ckpt_path=/path/to/rfd3_checkpoint.pt

输出通常是:

*.cif.gz
*.json

CIF 文件保存结构,JSON 文件保存对应设计配置和元数据。

2. RFD3 的蛋白 binder 设计示例

YAML 文件可以这样写:

insulinr:
  input: inputs/4zxb_cropped.pdb
  contig: 40-120,/0,E6-155
  length: 190-270
  select_hotspots:
    E64: CD2,CZ
    E88: CG,CZ
    E96: CD1,CZ
  infer_ori_strategy: hotspots
  is_non_loopy: true

这里与 RFdiffusion1 的区别很明显:

RFdiffusion1 的 hotspot 通常是 residue-level。
RFdiffusion3 可以指定 residue + atom-level hotspot。

例如 E64: CD2,CZ 表示希望设计结构靠近 E64 残基的 CD2 和 CZ 原子。这种约束比单纯指定 E64 更精细。

3. RFD3 的小分子 binder 设计示例

{
  "buried": {
    "input": "inputs/IAI.pdb",
    "length": "180-180",
    "ligand": "IAI",
    "select_fixed_atoms": {
      "IAI": ""
    },
    "select_buried": {
      "IAI": "C22,C23,C25,C24,C21,C20,N13,C15,C16,N14"
    }
  }
}

这里有几个关键字段:

ligand:指定小分子
select_fixed_atoms:固定配体原子坐标
select_buried:指定哪些配体原子应该被蛋白包埋
select_exposed:指定哪些配体原子应该暴露于溶剂

这说明 RFdiffusion3 不只是生成一个蛋白包住小分子,而是可以控制小分子哪些部分被埋藏、哪些部分暴露。这对 biosensor、配体结合蛋白和小分子诱导蛋白设计很关键。

4. RFD3 的酶设计示例

{
  "cys_1euv_lig": {
    "input": "inputs/1euv_lig.pdb",
    "ligand": "l:g",
    "unindex": "A514,A531,A574,A579-581",
    "length": "100-200",
    "ori_token": [0, 1, 0],
    "select_fixed_atoms": {
      "A514,A531,A574,A579-581": "TIP"
    }
  }
}

这里的 unindex 是关键。它表示这些残基或原子不需要固定在最终序列中的原始编号位置,但它们的关键几何关系需要保留。

select_fixed_atoms 则决定哪些原子真正作为几何约束进入模型。比如 "TIP" 可以理解为只固定末端功能原子,而不是固定整个残基。

5. RFD3 的关键采样参数

常见参数包括:

rfd3 design \
  inputs=inputs/task.json \
  out_dir=outputs/task \
  diffusion_batch_size=8 \
  n_batches=4 \
  inference_sampler.num_timesteps=200 \
  inference_sampler.step_scale=1.5 \
  inference_sampler.use_classifier_free_guidance=True \
  inference_sampler.cfg_scale=1.5 \
  dump_trajectories=True

参数理解如下:

diffusion_batch_size:每个 batch 生成多少个结构
n_batches:生成多少批
num_timesteps:去噪步数,越大通常越慢
step_scale:影响设计性和多样性
use_classifier_free_guidance:是否使用无分类器引导
cfg_scale:条件引导强度
dump_trajectories:是否保存轨迹

RFD3 的特点是条件控制更细。例如,它可以使用:

select_hotspots
select_buried
select_exposed
select_hbond_donor
select_hbond_acceptor
select_fixed_atoms
unindex
ori_token
infer_ori_strategy
partial_t

这些字段让模型可以从“残基层面的设计”进入“原子层面的设计”。

九、从代码角度比较 RFdiffusion1、RFdiffusion2 和 RFdiffusion3

维度 RFdiffusion1 RFdiffusion2 RFdiffusion3
主要运行方式 scripts/run_inference.py apptainer exec ... pipeline.py rfd3 designrun_inference.py
输入配置 Hydra 命令行参数 benchmark/config pipeline YAML / JSON specification
核心控制语言 contigmap.contigs benchmark config + active site motif contig + selection fields
生成对象 backbone-level protein enzyme scaffold + atomized motif all-atom biomolecular interaction
是否直接处理 ligand 有限 支持 支持更灵活
是否支持 unindexed motif 不作为核心能力 核心能力 核心能力之一
序列设计 ProteinMPNN LigandMPNN MPNN / LigandMPNN
结构验证 AF2 / ESMFold Chai-1 RF3 / Chai / AF3 等
输出格式 PDB + TRB + trajectory PDB + metrics + pipeline outputs CIF.GZ + JSON
筛选重点 backbone RMSD、motif RMSD、pAE motif atom RMSD、full atom RMSD、rotamer 保真 atom-level constraints、interface、ligand burial、hbond、RF3 验证

十、一个更实用的 RFdiffusion 系列工作流

如果要把 RFdiffusion 系列用于真实项目,不建议只跑模型输出,而应该构建完整 pipeline。

1. binder design pipeline

输入靶点结构
    ↓
选择结合区域和 hotspot
    ↓
RFdiffusion / RFD3 生成 binder backbone
    ↓
ProteinMPNN 设计序列
    ↓
AF2 / AF3 / Chai / RF3 预测复合物
    ↓
筛选:
    binder pLDDT
    interface pAE
    hotspot contact
    clash
    buried surface area
    shape complementarity
    ddG
    ↓
Rosetta relax / interface analysis
    ↓
实验表达和结合验证

2. enzyme design pipeline

定义反应机制
    ↓
构建 theozyme 或 active-site motif
    ↓
选择 catalytic atoms / ligand / metal
    ↓
RFdiffusion2 或 RFD3 生成 scaffold
    ↓
LigandMPNN 序列设计和 packing
    ↓
Chai / RF3 / AF3 refolding
    ↓
筛选:
    motif atom RMSD
    catalytic geometry
    ligand pose
    pocket accessibility
    side-chain rotamer preservation
    active-site burial
    global fold confidence
    ↓
Rosetta enzyme design / MD / QM/MM
    ↓
体外活性筛选

3. cyclic peptide design pipeline

选择靶点口袋或蛋白表面
    ↓
定义 hotspot / interface residues
    ↓
RFdiffusion cyclic mode 生成环肽骨架
    ↓
ProteinMPNN 或定制序列采样
    ↓
几何筛选:
    首尾距离
    二硫键距离
    backbone strain
    clash
    interface contacts
    ↓
AF3 / Boltz / Chai 复合物预测
    ↓
Rosetta relax
    ↓
结合能、稳定性、可合成性筛选

十一、报告结论

RFdiffusion 系列的核心不是“一个模型越来越大”,而是设计对象和约束粒度不断升级。

RFdiffusion1 解决的是骨架生成问题。它把蛋白质结构设计转化为三维几何空间中的扩散去噪问题,并通过 contig、motif、hotspot 和 symmetry 等条件实现可控生成。

RFdiffusionAA 解决的是模型视野问题。它让模型从只看蛋白残基,扩展到可以看见小分子、金属、核酸和非标准化学组分。

RFdiffusion2 解决的是酶设计中的原子级功能约束问题。它不再要求人工预先指定催化残基编号和 rotamer,而是从 unindexed atomic motif 出发,让模型联合生成 scaffold、序列位置和侧链构象。

RFdiffusion3 解决的是统一全原子相互作用设计问题。它把 ligand、hotspot、burial、hbond、unindex、ori token 等条件统一到 YAML/JSON 输入中,使设计从“蛋白骨架生成”进入“原子级相互作用生成”。

从代码实践角度看,RFdiffusion 系列绝不是“一条命令生成药物”。更真实的理解应该是:

RFdiffusion 系列负责提出结构假设;
MPNN / LigandMPNN 负责补全序列;
AF2 / Chai / RF3 / AF3 负责回折验证;
Rosetta / MD / 几何脚本负责精筛;
实验负责最终回答模型是否真的设计成功。

因此,学习 RFdiffusion 系列时,不应该只看论文中的模型图和性能表,而应该同时掌握三件事:

第一,扩散模型在三维结构空间中到底如何生成蛋白;
第二,输入条件如何通过 contig、hotspot、motif、ligand、unindex 等方式进入模型;
第三,模型输出如何进入后续序列设计、结构预测、能量优化和实验验证流程。

只有把这三件事连起来,RFdiffusion 才不只是一个“会生成结构的模型”,而是一个可以嵌入真实蛋白设计项目的工程化设计工具。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐