
1. 从零开始理解抗体从头设计这件事抗体药物这几年有多火不用我多说。但传统抗体发现路径——动物免疫、杂交瘤筛选、噬菌体展示——周期长、成本高而且很多靶点比如一些高度保守的自身抗原、离子通道、GPCR用传统方法根本拿不到好抗体。这几年计算设计领域最让人兴奋的进展之一就是RFdiffusion ProteinMPNN这套组合拳在从头抗体设计上的落地。简单说这套流程做的事情是给定一个靶标蛋白上的具体表位用RFdiffusion从随机噪声中扩散出一个全新的抗体结合骨架再用ProteinMPNN为这个骨架设计出稳定的氨基酸序列最后通过结构预测和实验验证拿到能用的抗体。整个过程不依赖天然抗体库完全从计算出发。这套方法适合谁如果你是从头设计方向的研究生、做抗体工程的博后、或者生物医药公司的计算设计团队想快速上手这套流程那这篇内容就是为你写的。我会把整个流程拆开从环境搭建、输入准备、参数选择、到结果筛选和常见坑一步步讲清楚。需要说明的是下面涉及的具体参数和操作细节部分是基于社区常见实践和我自己跑流程的经验补充的具体项目还需要根据实际情况调整。2. 整体设计思路与方案选型2.1 为什么是RFdiffusion而不是其他生成模型从头抗体设计这个领域之前不是没有工具。RosettaDesign、FoldX这些基于物理能量的方法能做序列设计但它们对骨架的探索能力很有限——你只能在一个给定的骨架上做点突变或序列优化没法凭空生成全新的结合模式。后来出现了Hallucination方法通过梯度下降优化序列让预测结构折叠成目标构象但计算成本高而且对复杂拓扑的探索不够。RFdiffusion的核心优势在于它是一个扩散模型。扩散模型在图像生成领域的成功大家有目共睹放到蛋白质结构上它的逻辑是训练时对真实结构不断加噪声直到变成纯噪声生成时从纯噪声出发逐步去噪最终得到一个合理的蛋白质骨架。这个过程中模型学会了蛋白质结构的底层分布规律所以能生成自然界不存在但物理上合理的新骨架。对于抗体设计RFdiffusion特别适合的原因是抗体本身有非常保守的框架区framework region和高度可变的CDR区。RFdiffusion可以固定框架区只对CDR区进行扩散生成这样既保证了抗体整体的折叠正确性又能在CDR区探索全新的结合模式。这一点是传统方法做不到的。2.2 ProteinMPNN在流程中的角色定位RFdiffusion输出的是骨架结构也就是主链原子的坐标。但蛋白质的功能是由侧链决定的你需要知道每个位置该放什么氨基酸。这就是ProteinMPNN要解决的问题。ProteinMPNN是一个基于图神经网络的序列设计模型。它的输入是蛋白质骨架坐标输出是每个位置氨基酸的概率分布。相比Rosetta的序列设计ProteinMPNN的速度快了几个数量级——设计一条100个残基的序列几秒钟就能出结果而Rosetta可能需要几十分钟。而且实测下来ProteinMPNN设计的序列在表达和稳定性上表现更好。在抗体设计流程中ProteinMPNN通常只对CDR区进行序列设计框架区保持天然序列不变。这样做的好处是框架区负责维持抗体的整体折叠和稳定性天然序列已经经过了进化优化没必要去动它CDR区负责结合抗原才是需要重点设计的部分。2.3 整套流程的输入输出关系把整个流程串起来看输入靶标蛋白的结构PDB格式、目标表位的位置一组残基编号、抗体框架的模板结构中间产物RFdiffusion生成的抗体骨架结构可能几百到几千个、ProteinMPNN设计的序列每个骨架对应几条到几十条序列输出经过筛选的候选抗体序列用于后续实验验证整个流程的计算量不小但相比湿实验的成本这点计算资源投入是值得的。下面我会把每个环节拆开讲。3. 环境搭建与工具准备3.1 硬件与系统要求RFdiffusion和ProteinMPNN都对GPU有要求。RFdiffusion的推理过程需要GPU加速显存建议至少16GB24GB以上更稳妥。ProteinMPNN对显存要求低一些8GB也能跑但批量设计时显存越大越快。系统方面Linux是首选Ubuntu 20.04或22.04都行。Windows下用WSL2也可以但GPU直通有时候会出问题建议还是用原生Linux。macOS的话M系列芯片可以跑ProteinMPNN的CPU版本但RFdiffusion基本跑不动不推荐。3.2 软件环境配置我习惯用conda管理环境这样不同工具之间的依赖不会打架。RFdiffusion和ProteinMPNN的依赖有重叠但也有冲突建议分开建环境。RFdiffusion的环境配置大致是这样conda create -n rfdiffusion python3.9 conda activate rfdiffusion # 安装PyTorch注意CUDA版本要和驱动匹配 pip install torch1.13.1cu117 -f https://download.pytorch.org/whl/torch_stable.html # 安装SE3Transformer等依赖 pip install se3-transformer # 克隆RFdiffusion仓库 git clone https://github.com/RosettaCommons/RFdiffusion.git cd RFdiffusion pip install -e .ProteinMPNN的环境相对简单conda create -n proteinmpnn python3.9 conda activate proteinmpnn pip install torch numpy git clone https://github.com/dauparas/ProteinMPNN.git cd ProteinMPNN注意PyTorch版本和CUDA版本的匹配是个大坑。我踩过好几次装完了发现GPU用不了最后发现是CUDA版本对不上。建议先跑一个简单的torch.cuda.is_available()测试确认GPU能用再往下走。3.3 模型权重下载RFdiffusion的模型权重需要从官方渠道获取。通常仓库里会提供下载脚本但网络问题可能需要手动下载。权重文件大概几个GB下载后放到指定目录。ProteinMPNN的权重相对小很多仓库里直接包含了几个预训练模型包括通用模型和针对不同任务微调的模型。做抗体设计时建议用通用模型或者专门在抗体数据上微调过的版本。4. 输入准备靶标结构与表位选择4.1 靶标结构的获取与处理靶标结构通常来自PDB数据库。如果你做的是某个特定靶点先去PDB搜一下有没有实验解析的结构。如果有直接下载如果没有可以用AlphaFold2预测一个。下载下来的PDB文件不能直接拿来用需要做几步清理去掉水分子和无关的配体如果结构里有多个链确定你要用哪条链作为靶标检查有没有缺失残基缺失太多的话可能需要补全确定表位残基的编号我一般用PyMOL或者简单的Python脚本做这些清理工作。比如用Biopython读取PDB筛选出需要的链和残基再写回新的PDB文件。4.2 表位选择的关键考量表位选择是整条流程里最需要人脑的环节。RFdiffusion需要你告诉它靶标上哪些残基是你希望抗体去结合的。这个选择直接决定了后续设计的成败。几个实用的原则优先选表面暴露的残基。埋藏在蛋白内部的残基抗体够不着选了也没用。计算溶剂可及表面积SASA可以帮你判断。避开糖基化位点。如果你的靶标是糖蛋白表位如果落在糖基化位点上抗体结合会被糖链阻挡。考虑功能相关性。如果你想让抗体阻断某个相互作用表位应该选在蛋白-蛋白相互作用界面上。表位大小要合适。一般选15-30个残基比较合适。太小了结合力不够太大了RFdiffusion可能处理不好。实操心得我一般会选2-3个不同的表位分别跑设计最后比较哪个表位能拿到更好的抗体。不要把所有希望押在一个表位上。4.3 抗体框架模板的选择RFdiffusion做抗体设计时通常需要一个框架模板来固定框架区。这个模板可以从已知的抗体结构中选比如PDB里常见的抗体Fab结构。选择框架模板时要注意框架区的序列要尽量接近你最终想要的抗体类型比如人源化抗体就选人源框架模板的分辨率越高越好最好在2.5埃以内如果模板里有CDR区的结构可以保留作为参考但RFdiffusion会重新生成CDR区5. RFdiffusion抗体骨架生成实操5.1 输入配置文件的编写RFdiffusion的输入通过一个JSON配置文件指定。做抗体设计时配置文件里需要指定几个关键信息{ target_chain: A, epitope_residues: [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], antibody_framework: path/to/framework.pdb, cdr_lengths: { H1: 8, H2: 8, H3: 12, L1: 6, L2: 3, L3: 9 }, num_designs: 100 }这里CDR长度是可以指定的。如果你不确定该设多长可以参考天然抗体的CDR长度分布。H3的长度变化最大从5到25个残基都有一般设10-15比较常见。5.2 扩散过程的参数调节RFdiffusion的扩散过程有几个关键参数噪声步数timesteps一般设50-100步。步数越多生成质量越高但计算时间也越长。我一般先用50步快速筛一批再对好的候选用100步精修。噪声温度noise_scale控制生成多样性。温度高生成的骨架更多样温度低更保守。做抗体设计时我一般用默认值或者稍微调高一点保证多样性。引导强度guidance_scale如果你希望生成的抗体更倾向于结合某个特定表位可以调高引导强度。但太高了会导致生成质量下降。注意RFdiffusion的扩散过程有随机性同样的输入跑两次结果不一样。这是正常的也是好事——说明模型在探索不同的解决方案。建议多跑几批增加找到好设计的概率。5.3 生成结果的初步筛选RFdiffusion跑完之后你会得到一堆PDB文件每个是一个候选抗体骨架。这些骨架不能直接拿去用需要先做一轮筛选。我一般用以下几个指标做初筛结构合理性用MolProbity或者类似工具检查键长、键角、二面角是否合理。如果骨架本身就不合理后面的序列设计再好也没用。CDR区构象检查CDR区的构象是否合理有没有出现罕见的二面角组合。与靶标的结合界面计算抗体CDR区与靶标表位的接触面积。接触面积太小说明结合可能不牢。框架区RMSD把生成的骨架和模板框架做叠合计算框架区的RMSD。如果框架区偏离太大说明生成过程可能出了问题。这一轮筛选通常会淘汰掉一半以上的候选。剩下的才进入下一轮序列设计。6. ProteinMPNN序列设计实操6.1 输入准备与参数设置ProteinMPNN的输入是RFdiffusion生成的骨架PDB文件。你需要指定哪些残基需要设计序列哪些保持固定。做抗体设计时通常只设计CDR区框架区固定为模板序列。在ProteinMPNN的命令行里可以通过指定fixed residues来实现python protein_mpnn_run.py \ --pdb_path candidate_001.pdb \ --fixed_residues A1 A2 A3 ... A40 \ --designed_residues A41 A42 ... A60 \ --num_seq_per_target 10 \ --sampling_temp 0.1 \ --out_folder output/这里sampling_temp是采样温度。温度低0.1时模型倾向于选择高概率的氨基酸序列更保守温度高0.5-1.0时序列更多样。做抗体设计时我一般先用0.1跑一批再用0.3跑一批比较不同温度下的结果。6.2 序列设计结果的评估ProteinMPNN会为每个骨架输出多条序列。这些序列需要进一步评估序列合理性检查有没有出现连续的相同氨基酸、有没有罕见的氨基酸组合。预测结构验证用AlphaFold2或ESMFold预测设计序列的结构和RFdiffusion生成的骨架做比较。如果预测结构和设计骨架的RMSD很低2埃说明序列和骨架是兼容的。结合能计算用Rosetta或者FoldX计算抗体-靶标复合物的结合能。结合能越低越负说明结合越可能强。免疫原性预测如果你做的是治疗性抗体还需要预测序列的免疫原性避免引起免疫反应。6.3 多轮迭代优化一轮RFdiffusion ProteinMPNN通常拿不到最优结果。我一般会做2-3轮迭代第一轮大范围探索生成大量候选用宽松的筛选标准保留尽可能多的多样性。第二轮对第一轮中表现好的骨架做局部优化比如只重新设计H3区或者微调CDR长度。第三轮对最有希望的几个候选做精细优化包括序列微调、结构弛豫等。实操心得不要指望一轮就能拿到完美抗体。我做过的一个项目第一轮跑了500个骨架筛出20个进入序列设计最后只有3个在实验里显示了结合活性。这个命中率在从头设计里已经算不错了。7. 常见问题与排查技巧实录7.1 RFdiffusion跑不动或者报错这是最常见的问题。可能的原因和解决方法问题现象可能原因解决方法CUDA out of memory显存不够减少batch size或者换更大显存的GPU生成结果全是噪声模型权重没加载对检查权重文件路径和版本生成过程卡住输入PDB格式有问题用PDB工具重新清理输入文件生成的骨架不合理噪声步数太少增加timesteps到100以上7.2 ProteinMPNN设计的序列表达不出来这是湿实验阶段常见的问题。可能的原因序列本身有问题比如出现了罕见的密码子、或者序列导致mRNA二级结构不稳定。解决方法是用密码子优化工具重新优化。框架区和CDR区不兼容如果框架区来自一个抗体CDR区是全新设计的两者可能不兼容。解决方法是做一轮结构弛豫或者换一个更兼容的框架。表达系统不合适有些抗体在E. coli里表达不好需要换到哺乳动物细胞表达系统。7.3 设计抗体没有结合活性这是最让人头疼的问题。可能的原因和排查思路表位选择不对抗体可能结合到了靶标的其他位置而不是你想要的表位。用竞争实验或者突变实验验证。结合力太弱设计抗体的亲和力可能只有微摩尔级别需要做亲和力成熟。抗体不稳定设计抗体可能在表达过程中折叠错误。检查序列的稳定性预测指标。避坑技巧在设计阶段就用多个指标交叉验证。比如同时看预测的结合能、形状互补性、静电互补性。如果多个指标都指向同一个候选那这个候选值得优先做实验。7.4 计算资源不够怎么办RFdiffusion和ProteinMPNN都是计算密集型的。如果你没有本地GPU集群可以考虑用云GPU服务按小时计费成本可控减少生成的候选数量集中资源在最有希望的几个上用ProteinMPNN的CPU版本做初步筛选GPU版本做精细设计8. 从计算到实验的衔接要点8.1 候选抗体的优先级排序计算阶段结束后你手里可能还有几十个候选。怎么决定先做哪个我一般按以下优先级排序预测结合能最低的用Rosetta或FoldX算的结合能越负越好。序列最接近天然抗体的天然抗体序列经过了进化优化更可能稳定表达。CDR区构象最合理的用MolProbity检查没有异常二面角的优先。免疫原性最低的如果你做治疗性抗体这一步很重要。8.2 基因合成与表达选定候选后下一步是基因合成。我一般把抗体设计成scFv或者Fab格式方便表达和纯化。scFv单链抗体表达量高但稳定性可能不如Fab。Fab抗原结合片段稳定性好但表达量可能低一些。基因合成公司一般提供密码子优化服务你只需要提供氨基酸序列。合成后的基因克隆到表达载体里转染到哺乳动物细胞或者表达在E. coli里。8.3 结合活性验证表达纯化后的抗体用ELISA或者BLI生物膜干涉做结合活性验证。如果阳性再做亲和力测定KD值。如果阴性可能需要回到计算阶段重新设计。实操心得我一般会同时做10-20个候选的表达和验证因为从头设计的命中率通常不高。多做几个增加找到阳性克隆的概率。9. 我个人在实际操作中的几点体会这套流程我前前后后跑了快一年踩过的坑不少。最大的体会是计算设计能帮你缩小搜索空间但不能替代实验验证。RFdiffusion和ProteinMPNN能生成看起来合理的候选但最终能不能结合、能不能表达、能不能稳定还是要靠湿实验说话。另一个体会是参数调节比工具选择更重要。同样的RFdiffusion和ProteinMPNN参数设得不一样结果可能天差地别。我建议新手先跑几轮小规模的测试熟悉每个参数的影响再上大规模设计。最后分享一个小技巧如果你做的是某个特定靶点先去文献里查查有没有人已经做过这个靶点的抗体设计。如果有参考他们的表位选择和框架模板能少走很多弯路。从头设计不是闭门造车站在别人的肩膀上能看得更远。