跳转至

摘要: RFantibody 是一个基于结构的从头抗体与纳米抗体设计流程,整合了三种核心方法:经抗体数据微调的 RFdiffusion 用于蛋白质骨架生成,ProteinMPNN 用于蛋白质序列设计,以及经微调的 RoseTTAFold2 用于计算机辅助筛选。该流程通过三个模块的协同运作,实现从结构到序列的全自动化抗体设计。在环境要求方面,RFantibody 需运行于支持 CUDA 11.8 及以上版本的 NVIDIA GPU、Linux 操作系统(推荐 Ubuntu 22.04)。安装方式支持本地部署与 Docker 容器化部署两种模式:本地安装采用 uv 工具进行依赖管理,可自动配置 Python 3.10 环境及 PyTorch、深度图神经网络库等依赖;Docker 方式则提供隔离的可复现运行环境,适合多机器部署或避免依赖冲突。整体而言,RFantibody 通过将深度学习骨架扩散模型、序列优化模型与结构验证模型有机串联,为免疫蛋白工程和抗原结合设计提供了一套系统化、可操作的计算设计工具链。


RFantibody:基于结构的从头抗体与纳米抗体设计流水线

概述

RFantibody 是一个用于从头(de novo)设计抗体(antibody)和纳米抗体(nanobody)的结构化设计流水线(pipeline)。它的核心目标是解决传统抗体发现依赖免疫系统筛选、周期长、难以针对特定表位(epitope)进行精准设计的问题,通过计算方法直接生成能够靶向目标抗原(antigen)的新型免疫蛋白结构。

RFantibody 由三个独立方法串联组成:

  1. 蛋白质主链设计:使用抗体微调版本的 RFdiffusion 生成抗体骨架结构
  2. 蛋白质序列设计:使用 ProteinMPNN 为骨架设计氨基酸序列
  3. 计算机内筛选:使用抗体微调版本的 RoseTTAFold2 对设计结果进行结构预测和质量过滤

该流水线的重要性在于,它将深度学习驱动的蛋白质设计工具与抗体工程领域的专业知识相结合,使研究人员能够针对任意蛋白质靶点,在计算层面快速生成大量候选抗体结构,从而大幅缩短抗体发现的前期研究周期。完整的方法论细节发表于 bioRxiv 预印本(2024.03.14)。


核心原理与功能

三阶段流水线架构

阶段一:RFdiffusion 主链设计

RFdiffusion 是一个基于扩散模型(diffusion model)的蛋白质主链生成工具。RFantibody 使用了针对抗体数据集微调(fine-tuned)的版本。在此阶段,模型以目标抗原结构和抗体框架(framework)结构为输入,生成抗体-靶点复合物的对接(docking)构象,同时设计 CDR 环(CDR loops,互补决定区)的三维结构。

RFdiffusion 仅对框架文件中被标注为"环"的区域进行结构设计,其余已优化的框架区域保持固定,这使得研究者可以在已有优化框架的基础上专注于 CDR 的从头设计。

阶段二:ProteinMPNN 序列设计

ProteinMPNN 是一种基于图神经网络(Graph Neural Network)的蛋白质序列设计工具。它以第一阶段生成的主链三维坐标为输入,输出与该骨架结构兼容的氨基酸序列。对每个主链结构可以生成多条序列(即 seqs-per-struct 参数),以增加序列多样性。

阶段三:RoseTTAFold2 结构预测与筛选

RoseTTAFold2(RF2)是 RoseTTAFold 的第二代版本,同样经过抗体数据微调。在此阶段,RF2 对前两阶段生成的抗体序列进行独立的结构预测,并输出置信度评分,包括:

  • pLDDT(predicted Local Distance Difference Test,预测局部距离差异测试分数):衡量局部结构置信度
  • PAE(Predicted Aligned Error,预测对齐误差):衡量残基间相对位置的预测置信度

研究人员可根据这些分数对设计结果进行过滤,保留置信度高、结构合理的候选抗体。

HLT 文件格式

RFantibody 在各流水线步骤间传递结构信息时使用了一种自定义文件格式,称为 HLT 文件。HLT 文件本质上是 .pdb 文件,但有以下特定约定:

  • 重链(Heavy chain)标记为链 ID H
  • 轻链(Light chain)标记为链 ID L
  • 靶链(Target chain)标记为链 ID T(即便存在多条靶链也统一标记为 T
  • 文件中链的顺序为:重链 → 轻链 → 靶链
  • 文件末尾包含 PDB REMARK 注释,以 1-indexed 绝对残基索引标记各 CDR 环的位置范围

示例 REMARK 格式:

REMARK PDBinfo-LABEL: 32 H1
REMARK PDBinfo-LABEL: 52 H2

这一格式确保了每个步骤都能识别:当前设计的抗体-靶点复合物结构、各链归属,以及各 CDR 环的残基范围。

Quiver 文件系统

RFantibody 引入了 Quiver 文件.qv 格式)作为蛋白质设计数据库,用于在各阶段之间高效传递和存储大量结构与评分信息。相比逐文件操作 PDB,Quiver 文件可以将整个设计批次打包为单一文件,便于管理和中间结果复用。

Quiver 文件配套了一套命令行工具:

命令功能说明
qvls列出 Quiver 文件中所有标签(tags)
qvextract从 Quiver 文件中提取所有 PDB 文件
qvextractspecific按标签名提取特定 PDB
qvscorefile将评分数据导出为 TSV 文件
qvsplit将 Quiver 文件拆分为多个子文件
qvslice提取特定标签到新的 Quiver 文件
qvrename重命名 Quiver 文件中的标签
qvfrompdbs从一组 PDB 文件创建 Quiver 文件

安装与使用

系统要求

  • GPU:支持 CUDA 11.8+ 的 NVIDIA GPU
  • 操作系统:Linux(推荐 Ubuntu 22.04)

验证 GPU 可用性:

nvidia-smi  # 若命令成功执行,说明 GPU 可用

方法一:本地直接安装(推荐)

RFantibody 使用 uv 进行依赖管理,可自动下载所需 Python 版本(3.10)。

第一步:安装 uv

curl -LsSf https://astral.sh/uv/install.sh | sh  # 下载并安装 uv 包管理器

安装完成后重启终端,或运行:

source ~/.bashrc  # 若使用 zsh 则改为 ~/.zshrc

第二步:克隆代码仓库

git clone https://github.com/RosettaCommons/RFantibody.git  # 克隆 RFantibody 仓库
cd RFantibody  # 进入项目目录

第三步:下载模型权重

bash include/download_weights.sh  # 下载预训练模型权重

第四步:同步依赖

uv sync  # 创建虚拟环境并安装所有依赖,包含 PyTorch(CUDA 11.8)和 DGL

uv sync 会自动完成以下操作: - 若未安装 Python 3.10,自动下载 - 在 .venv/ 目录创建虚拟环境 - 安装所有依赖项,含 CUDA 版 PyTorch 和 Deep Graph Library

第五步:激活环境(二选一)

选项 A:激活虚拟环境(推荐)

source .venv/bin/activate  # 激活虚拟环境
rfdiffusion --help          # 验证安装是否成功

选项 B:使用 uv run 前缀运行命令

uv run rfdiffusion --help  # 验证安装,无需手动激活环境

方法二:Docker 容器安装

适用于需要隔离环境或跨机器可复现部署的场景。

# 检查 Docker 是否已安装
which docker

# 将当前用户加入 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 重启终端后生效

# 在 RFantibody 目录下构建镜像
docker build -t rfantibody .

# 启动容器(挂载当前目录到 /home,分配全部 GPU,限制内存 10GB)
docker run --name rfantibody --gpus all -v .:/home --memory 10g -it rfantibody

# 进入容器后,进入项目根目录并同步依赖
cd /home
uv sync

方法三:Apptainer(HPC 集群环境)

Apptainer(原 Singularity)适用于不具备 root 权限的 HPC 环境,可与 SLURM 等作业调度器集成。

# 安装 Apptainer
sudo apt update
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer

# 构建镜像文件(约 8GB,包含所有依赖、权重和 Python 环境)
cd RFantibody
sudo apptainer build rfantibody.sif rfantibody.def

# 验证安装(--nv 启用 GPU,--writable-tmpfs 允许临时文件写入)
apptainer exec --nv --writable-tmpfs rfantibody.sif rfdiffusion --help
apptainer exec --nv --writable-tmpfs rfantibody.sif proteinmpnn --help
apptainer exec --nv --writable-tmpfs rfantibody.sif rf2 --help

实战示例

完整纳米抗体设计流水线

以下示例基于 scripts/examples/nanobody_full_pipeline.sh,展示针对流感血凝素(flu HA)的纳米抗体设计完整流程。

参数配置

# 输入文件
TARGET_PDB="scripts/examples/example_inputs/flu_HA.pdb"          # 目标抗原结构
FRAMEWORK_PDB="scripts/examples/example_inputs/h-NbBCII10.pdb"  # 纳米抗体框架

# 输出目录
OUTPUT_DIR="scripts/examples/example_outputs/nb_ha_pipeline"

# RFdiffusion 参数
NUM_DESIGNS=1000          # 生成骨架设计数量
DESIGN_LOOPS="H1:7,H2:6,H3:5-13"  # CDR 环长度范围
HOTSPOTS="B146,B170,B177"          # 目标抗原上的热点残基

# ProteinMPNN 参数
NUM_SEQS=4         # 每个骨架生成的序列数量
SAMPLING_TEMP=0.2  # 采样温度(越低越保守)

# RF2 参数
NUM_RECYCLES=10  # 结构预测循环迭代次数

第一步:RFdiffusion 骨架设计

uv run rfdiffusion \
    --target "$TARGET_PDB" \              # 指定目标抗原
    --framework "$FRAMEWORK_PDB" \        # 指定纳米抗体框架
    --output-quiver "$OUTPUT_DIR/1_rfdiffusion.qv" \  # 输出到 Quiver 文件
    --num-designs "$NUM_DESIGNS" \        # 生成 1000 个骨架
    --design-loops "$DESIGN_LOOPS" \      # 设计指定长度范围的 CDR 环
    --hotspots "$HOTSPOTS"                # 约束结合位点

第二步:ProteinMPNN 序列设计

uv run proteinmpnn \
    --input-quiver "$OUTPUT_DIR/1_rfdiffusion.qv" \   # 读取上一步的骨架
    --output-quiver "$OUTPUT_DIR/2_proteinmpnn.qv" \  # 输出序列设计结果
    --seqs-per-struct "$NUM_SEQS" \                   # 每个骨架生成 4 条序列
    --temperature "$SAMPLING_TEMP"                     # 采样温度 0.2

第三步:RF2 结构预测与过滤

uv run rf2 \
    --input-quiver "$OUTPUT_DIR/2_proteinmpnn.qv" \  # 读取序列设计结果
    --output-quiver "$OUTPUT_DIR/3_rf2.qv" \         # 输出预测结构及评分
    --num-recycles "$NUM_RECYCLES"                    # 10 次循环以提高预测精度

第四步:结果分析

qvls $OUTPUT_DIR/3_rf2.qv                       # 列出所有设计条目

qvscorefile $OUTPUT_DIR/1_rfdiffusion.qv        # 查看 RFdiffusion 热点靶向评分

qvscorefile $OUTPUT_DIR/3_rf2.qv                # 导出 RF2 评分到 TSV 文件(3_rf2.sc)

qvextract $OUTPUT_DIR/3_rf2.qv -o final_designs/  # 提取所有 PDB 文件用于可视化

一键运行完整流水线:

bash scripts/examples/nanobody_full_pipeline.sh

Apptainer 环境下的完整流水线示例

DATA_DIR=scripts/examples
APPTAINER_OPTS="--nv --writable-tmpfs -B $DATA_DIR:/data"  # 挂载数据目录

# 第一步:骨架设计
apptainer exec $APPTAINER_OPTS rfantibody.sif rfdiffusion \
    -t /data/example_inputs/flu_HA.pdb \           # 流感 HA 抗原
    -f /data/example_inputs/h-NbBCII10.pdb \       # 纳米抗体框架
    -q /data/example_outputs/1_app_rfdiffusion.qv \ # 输出 Quiver
    -n 2 \                                          # 生成 2 个设计(示例用)
    -l "H1:7,H2:6,H3:5-13" \                       # CDR 环长度
    -h "B146,B170,B177"                             # 热点残基

# 第二步:序列设计
apptainer exec $APPTAINER_OPTS rfantibody.sif proteinmpnn \
    -q /data/example_outputs/1_app_rfdiffusion.qv \  # 输入骨架
    --output-quiver /data/example_outputs/2_app_proteinmpnn.qv \
    -n 4 \    # 每个骨架 4 条序列
    -t 0.2    # 采样温度

# 第三步:结构预测
apptainer exec $APPTAINER_OPTS rfantibody.sif rf2 \
    -q /data/example_outputs/2_app_proteinmpnn.qv \
    --output-quiver /data/example_outputs/3_app_rf2.qv \
    -r 10     # 10 次循环迭代

# 第四步:提取评分
apptainer exec $APPTAINER_OPTS rfantibody.sif qvscorefile \
    /data/example_outputs/3_app_rf2.qv              # 导出评分文件

SLURM 集群批量作业示例

#!/bin/bash
#SBATCH --job-name=rfantibody   # 作业名称
#SBATCH --gres=gpu:1            # 申请 1 块 GPU
#SBATCH --mem=32G               # 申请 32GB 内存
#SBATCH --time=4:00:00          # 最长运行 4 小时

apptainer exec --nv --writable-tmpfs \
    -B /scratch/$USER:/data \          # 挂载用户 scratch 目录
    /path/to/rfantibody.sif rfdiffusion \
    -t /data/target.pdb \              # 靶点结构
    -f /data/framework.pdb \           # 框架结构
    -o /data/designs \                 # 输出目录
    -n 100                             # 生成 100 个设计

框架文件格式转换

若已有 Chothia 注释的抗体 PDB 文件(可从 SabDab 数据库获取),可使用以下脚本转换为 HLT 格式:

python scripts/util/chothia_to_HLT.py \
    -inpdb mychothia.pdb \  # 输入 Chothia 注释的 PDB
    -outpdb myHLT.pdb       # 输出 HLT 格式的 PDB

常见问题

Q1:RFdiffusion 的 -l 参数中,环长度范围如何指定?

-l / --design-loops 参数接受以逗号分隔的 环名:长度范围 映射。长度范围支持固定值(如 H1:7,仅生成长度为 7 的 H1 环)或范围值(如 H3:5-13,从 5 到 13 均匀采样)。各 CDR 环的长度独立采样。若某个 CDR 环存在于框架中但未在此参数中指定,该环的序列和结构将在设计过程中保持固定不变。

Q2:热点残基(hotspots)如何选择?

热点残基通过 -h / --hotspots 参数指定,格式为 链ID+残基编号(如 T305,T456)。这些残基定义了希望抗体结合的表位区域。RFdiffusion 会约束生成的 CDR 环与这些残基形成接触。选择热点时需结合已知的结构数据、保守性分析或实验数据来确定关键功能性表位残基 [待验证具体选择策略的最优实践]。

Q3:流水线各阶段可以单独运行或从中间步骤重启吗?

可以。由于各阶段均使用 Quiver 文件(.qv)作为输入输出接口,每个阶段的结果都被持久化保存。只要上一阶段的 Quiver 文件存在,就可以从任意步骤重新启动。例如,若第三步 RF2 预测中断,可直接从 2_proteinmpnn.qv 重新运行 rf2 命令,无需重复前两步。

Q4:如何判断最终设计结果的质量?

运行 qvscorefile 提取 RF2 输出的评分文件(.sc,TSV 格式),其中包含 pLDDT 和 PAE 等置信度指标。pLDDT 越高、PAE 越低,说明结构预测越可信,该设计候选物的结构合理性越强。此外,可使用 qvextract 提取 PDB 文件后,通过 PyMOL 或 ChimeraX 等可视化工具对对接姿态进行人工检验 [具体评分阈值建议参见 RFantibody 预印本]。

Q5:RFantibody 同时支持抗体(Antibody)和纳米抗体(Nanobody)设计吗?如何切换?

是的,RFantibody 同时支持两者。区别在于 -f / --framework 参数传入的框架文件和 -l 参数指定的 CDR 环。仓库提供了现成的框架文件: - 纳米抗体框架:scripts/examples/example_inputs/h-NbBCII10.pdb(仅 H 链,CDR 环为 H1/H2/H3) - ScFv 框架:scripts/examples/example_inputs/hu-4D5-8_Fv.pdb(含 H 链和 L 链,CDR 环为 H1/H2/H3/L1/L2/L3)


总结

RFantibody 通过将 RFdiffusion、ProteinMPNN 和 RoseTTAFold2 三个深度学习工具串联为完整的抗体设计流水线,实现了从零开始(de novo)的计算机辅助抗体和纳米抗体设计。其核心优势在于:引入 HLT 文件格式规范化抗体链信息传递;使用 Quiver 文件高效管理批量设计数据;支持本地安装、Docker 和 Apptainer 三种部署方式,兼容从个人工作站到 HPC 集群的多种计算环境。整个流水线的设计理念是模块化和可复用——每个阶段独立运行并持久化中间结果,便于迭代优化和参数调整。对于希望快速生成大量候选抗体结构并进行计算筛选的研究人员,RFantibody 提供了一套完整且可扩展的工程化解决方案。