1. 抗体从头设计的整体思路与工具选型
1.1 为什么传统抗体发现路线开始“不够用”
做抗体的人都知道,传统路线无非几条:免疫动物、杂交瘤筛选、噬菌体展示、单B细胞克隆。这些方法成熟、可靠,但有一个共同的“天花板”——你只能在自然界已经存在的抗体序列空间里做筛选。换句话说,你是在“找”抗体,而不是在“造”抗体。
找,就意味着受限于免疫系统的耐受机制、免疫原性、物种差异,以及那些难以激发免疫反应的靶点(比如高度保守的自身抗原、小分子半抗原、某些离子通道蛋白)。很多做药的朋友应该深有体会:一个靶点筛了两三年,拿到的候选分子要么亲和力上不去,要么稳定性差,要么表达量低得可怜,最后项目黄了,不是 science 不行,是分子本身“底子”不好。
从头设计(de novo design)换了一个思路:不找了,直接算。给定一个靶点表位,我用算法生成一个能结合它的蛋白骨架,再优化序列,让它折叠成我想要的结构。这条路如果走通,理论上可以针对任何靶点、任何表位,设计出自然界不存在的全新抗体。RFdiffusion + ProteinMPNN 这套组合,就是目前这条路上最被验证、最容易上手的方案之一。
1.2 RFdiffusion 和 ProteinMPNN 各自扮演什么角色
这两个工具的分工非常清晰,你可以把它们理解成“画图纸”和“填材料”的关系。
RFdiffusion是一个基于扩散模型的蛋白结构生成网络。它的核心能力是:给定一个靶点蛋白的结构(或者只是骨架坐标),它能“扩散”出一个新的蛋白骨架,这个骨架在空间上能跟靶点形成互补的接触面。对于抗体设计,RFdiffusion 特别适合生成那种“小尺寸、β-折叠为主、带有特定结合环区”的骨架,这正好是抗体可变区(Fv)的典型特征。
ProteinMPNN则是一个序列设计网络。它拿到 RFdiffusion 生成的骨架坐标后,反向推断出什么样的氨基酸序列最有可能折叠成这个结构。它的优势在于:速度快、对骨架的兼容性好、能同时考虑多个链之间的相互作用。对于抗体这种需要重链和轻链协同折叠的体系,ProteinMPNN 可以固定框架区、只设计 CDR 区,也可以全序列设计。
我个人的经验是:RFdiffusion 决定“能不能结合”,ProteinMPNN 决定“能不能折叠、能不能表达”。两者缺一不可,但优化的侧重点完全不同。
1.3 这套流程适合谁、不适合谁
先说适合的:如果你手头有一个结构已知的靶点蛋白(哪怕是 AlphaFold2 预测的),想针对某个特定表位快速生成一批候选结合蛋白,而且你有基本的 Linux 操作能力和 GPU 资源,那这套流程非常适合你。它不需要你懂深度学习,只需要你会跑脚本、会看输出、会做基本的筛选。
不适合的情况也很明确:如果你连靶点结构都没有,或者靶点是一个高度灵活的膜蛋白、没有可靠的实验结构,那 RFdiffusion 的输入质量就会很差,输出基本靠运气。另外,如果你期望“跑一次就拿到纳摩尔级亲和力的抗体”,那也不现实——这套流程生成的是候选分子,后续还需要湿实验验证和亲和力成熟。
2. 环境搭建与输入准备的实操细节
2.1 硬件和软件环境的最低要求
RFdiffusion 对 GPU 显存的要求不算特别高,但也不是随便一张卡就能跑。根据我的实测,生成一个 100 残基左右的骨架,至少需要 8GB 显存,推荐 16GB 以上(比如 RTX 4090、A5000、V100)。如果你要同时跑多个设计或者生成更大的体系,24GB 会更从容。
软件环境方面,官方推荐用 conda 管理依赖。我建议单独建一个环境,避免和已有的 PyTorch 环境冲突。核心依赖包括:
- Python 3.9 或 3.10
- PyTorch 1.13 或 2.0(需要和 CUDA 版本匹配)
- SE3Transformer(RFdiffusion 的底层等变网络)
- DGL(图神经网络库)
- ProteinMPNN 本身依赖比较简单,主要是 PyTorch 和 NumPy
注意:RFdiffusion 的安装过程中最容易出问题的是 SE3Transformer 的编译。如果你用的是较新的 CUDA 版本(比如 12.x),可能需要手动调整编译选项。我的建议是直接用官方提供的 conda 环境文件,能省掉大量排查时间。
2.2 靶点结构的获取与预处理
RFdiffusion 需要一个干净的靶点结构作为输入。来源可以是 PDB 数据库的实验结构,也可以是 AlphaFold2/AlphaFold3 的预测结构。不管来源是什么,预处理步骤都差不多:
- 去水、去配体、去多余链:只保留你关心的靶点链。如果靶点是多链复合物,保留所有参与结合的链。
- 补全缺失残基:实验结构经常有缺失的 loop 区,用 MODELLER 或 PDBFixer 补全。缺失严重的区域如果正好是表位,那这个结构就不能用了。
- 确定表位残基:这是最关键的一步。你需要明确告诉 RFdiffusion 你想结合在靶点的哪个位置。通常的做法是:根据已知的抗体-靶点复合物结构、突变实验数据,或者简单的表面可及性分析,选一组连续的或离散的残基作为“热点”。
- 格式转换:RFdiffusion 接受 PDB 格式,但内部会转成特定的特征表示。确保残基编号连续、没有重复原子。
我踩过的一个坑:有一次用 AlphaFold2 预测的靶点结构,残基编号从 1 开始,但实际蛋白的编号是从 100 开始的。RFdiffusion 不关心编号本身,但后续分析时会对不上,导致表位选择错误。所以预处理时一定要统一编号体系,并在日志里记录清楚。
2.3 抗体骨架的参考与约束设置
虽然 RFdiffusion 可以从头生成骨架,但完全无约束的生成往往得到一些“不像抗体”的东西。为了提高成功率,通常会给一些约束:
- 框架区约束:如果你希望生成的分子保留抗体典型的免疫球蛋白折叠,可以提供一段已知的抗体框架结构作为参考,让 RFdiffusion 在生成时偏向这个拓扑。
- CDR 长度约束:抗体 CDR 的长度分布是有规律的(比如 CDR H3 通常在 8-20 个残基之间)。你可以在 RFdiffusion 的配置里指定生成区域的长度范围。
- 二硫键约束:抗体框架区有保守的二硫键。如果你希望保留,可以在序列设计阶段用 ProteinMPNN 的约束功能固定这些半胱氨酸。
这些约束不是必须的,但加上之后,输出的候选分子更接近“可开发”的抗体,而不是随便一个结合蛋白。
3. RFdiffusion 生成骨架的核心步骤与参数解析
3.1 扩散模型的“加噪-去噪”到底在做什么
RFdiffusion 的底层是去噪扩散概率模型(DDPM)。训练时,它学习从蛋白结构中逐步加噪,直到变成纯高斯噪声;推理时,它从纯噪声出发,在靶点结构的“引导”下,逐步去噪,生成一个新的骨架。
你可以把这个过程想象成雕塑:一开始是一块毫无形状的石头(噪声),你每次凿掉一点多余的部分(去噪步骤),同时心里有一个目标——要雕出一个能卡住靶点表面某个凹槽的形状。RFdiffusion 的“心里目标”就是靶点的坐标和表位信息。
关键参数有几个:
- T(扩散步数):通常设为 50。步数越多,生成质量越高,但速度越慢。50 是一个比较平衡的值。
- 噪声调度:默认是 cosine 调度,一般不用改。
- 分类器引导强度:这个参数控制生成结果有多“听话”地结合到指定表位。强度太低,生成的东西不结合;强度太高,生成的结构会变得不自然。我的经验是从 1.0 开始试,根据输出调整。
3.2 表位条件化:怎么告诉模型“结合这里”
RFdiffusion 支持多种条件化方式,最常用的是“motif scaffolding”模式。你把靶点结构作为 motif 输入,并指定哪些残基是表位,模型会生成一个能包裹这些残基的新链。
具体操作上,你需要准备一个 JSON 或 YAML 配置文件,里面包含:
- 靶点 PDB 路径
- 表位残基列表(比如
["A:45", "A:46", "A:48", "A:70"]) - 生成链的长度范围
- 是否固定靶点坐标(通常固定)
提示:表位残基的选择直接决定成败。如果选了一个太浅、太小的表位,生成的抗体可能结合不牢;如果选了一个太大、太平的表位,生成的抗体可能无法形成足够的接触。我通常建议选 6-12 个残基,分布在 15-20 Å 的范围内,有一定的凹凸起伏。
3.3 生成多个候选与初步筛选
RFdiffusion 一次可以生成几十到几百个骨架。不要指望第一个就是好的。我的标准流程是:
- 跑 100-500 个设计,根据 GPU 资源调整。
- 用简单的几何指标初筛:接触面积( buried surface area )、形状互补性( shape complementarity )、氢键数量。
- 剔除明显不合理的:比如生成链穿过了靶点、接触面积小于 400 Ų、或者生成了大量无规卷曲。
这一步不需要太精确,目的是把候选从几百个降到几十个,减少后续 ProteinMPNN 和湿实验的工作量。
4. ProteinMPNN 序列设计与多链协同优化
4.1 序列设计的“反向折叠”逻辑
ProteinMPNN 解决的问题是:给定一个骨架,什么序列能折叠成它?它的网络架构是消息传递神经网络(MPNN),在蛋白结构的图表示上做信息传递,每个节点是一个残基,边是空间邻近关系。
对于抗体设计,ProteinMPNN 有几个关键优势:
- 支持多链:可以同时设计重链和轻链,并考虑链间相互作用。
- 支持固定残基:框架区的保守残基可以固定,只设计 CDR。
- 支持偏置:可以给某些氨基酸加偏置,比如避免过多的半胱氨酸或脯氨酸。
我通常的做法是:第一轮全序列设计,看看模型倾向于什么;第二轮固定框架区,只设计 CDR,得到更“像抗体”的序列。
4.2 重链轻链的配对与界面优化
抗体是一个异源二聚体,重链和轻链的界面必须匹配。RFdiffusion 生成的骨架如果包含两条链,ProteinMPNN 会自动考虑链间接触。但如果 RFdiffusion 只生成了一条链(比如只生成重链),那你就需要单独处理轻链。
我的经验是:尽量让 RFdiffusion 同时生成重链和轻链的骨架。虽然计算量更大,但这样得到的界面更自然,后续序列设计也更容易。如果分开生成,重链和轻链的界面往往需要额外的优化,成功率会下降。
ProteinMPNN 有一个--pdb_path_chains参数,可以指定哪些链一起设计。对于抗体,通常设为"H L",表示重链和轻链联合设计。
4.3 序列多样性控制与去冗余
ProteinMPNN 对同一个骨架可以生成多个序列(比如每个骨架生成 8-16 条序列)。这些序列之间会有一定的多样性,但如果你不做控制,可能会得到大量高度相似的序列。
控制多样性的方法:
- 温度参数:ProteinMPNN 的采样温度控制随机性。温度低(0.1),序列更保守、更相似;温度高(0.5-1.0),序列更多样。我通常用 0.1 做第一轮,用 0.3-0.5 做后续的多样性探索。
- 去冗余:生成后,用 CD-HIT 或 MMseqs2 对序列做聚类,剔除相似度高于 90% 的冗余序列。
- 氨基酸组成检查:剔除那些含有过多疏水残基(容易聚集)或过多半胱氨酸(容易形成错误二硫键)的序列。
5. 结构验证与候选分子排序
5.1 用 AlphaFold2 做自洽性检查
ProteinMPNN 输出的序列,需要用结构预测工具验证:这条序列能不能折叠回原来的骨架?最常用的工具是 AlphaFold2。具体做法是:把 ProteinMPNN 设计的序列(重链+轻链)输入 AlphaFold2,预测其结构,然后和 RFdiffusion 生成的骨架做比对。
评价指标:
- RMSD:预测结构和设计骨架的偏差。小于 2 Å 算合格,小于 1 Å 算优秀。
- pLDDT:AlphaFold2 的置信度。界面残基的 pLDDT 最好大于 80。
- PAE:预测对齐误差。链间 PAE 低说明界面预测可靠。
这一步会淘汰掉相当一部分设计——有些序列虽然理论上能折叠,但 AlphaFold2 预测出来完全不是那个结构。这是正常的,不要灰心。
5.2 界面能量计算与亲和力预估
结构验证通过后,下一步是估算结合亲和力。常用的工具包括:
- Rosetta:用
InterfaceAnalyzer计算结合能、埋藏面积、形状互补性。 - FoldX:计算结合自由能变化。
- PRODIGY:基于接触特征预测结合亲和力。
这些工具的绝对值不一定准,但可以用来排序。我的做法是:用 Rosetta 算 ΔG,用 PRODIGY 算 Kd 的粗略估计,两者结合,选排名前 10-20 的候选进入湿实验。
注意:计算预测的亲和力和实验值往往有 1-2 个数量级的偏差。不要因为预测值不好就放弃一个设计,也不要因为预测值好就盲目乐观。最终还是要靠实验。
5.3 可开发性评估:表达、稳定性、免疫原性
除了结合能力,一个抗体能不能成为药物,还要看可开发性。在计算阶段,可以做一些初步筛选:
- 表达量预测:用 SoluProt 或 DeepSol 预测在大肠杆菌或哺乳动物细胞中的可溶性表达概率。
- 稳定性预测:用 ThermoNet 或 Rosetta 的 ddG 计算预测热稳定性。
- 免疫原性预测:用 NetMHCII 预测是否有强结合 MHC II 的表位,避免引起不必要的免疫反应。
- 聚集倾向:用 TANGO 或 AGGRESCAN 预测聚集倾向。
这些工具都是辅助性的,但能帮你排除一些明显有问题的候选。
6. 常见问题与排查技巧实录
6.1 RFdiffusion 生成结果不结合靶点怎么办
这是最常见的问题。可能的原因和排查方向:
| 问题现象 | 可能原因 | 排查方法 | 解决思路 |
|---|---|---|---|
| 生成链远离靶点 | 引导强度太低 | 检查配置文件中的引导参数 | 提高引导强度,从 1.0 提到 2.0-3.0 |
| 生成链穿过靶点 | 表位选择不合理 | 可视化表位残基 | 重新选择表位,避免选在靶点内部 |
| 接触面积很小 | 生成链太短或太长 | 检查生成链长度 | 调整长度范围,通常 80-120 残基 |
| 生成结果多样性低 | 噪声调度不合适 | 尝试不同的噪声调度 | 改用 linear 或 sqrt 调度 |
我个人的经验是:表位选择占成功率的 70%。如果表位选得好,即使其他参数一般,也能得到一些合理的候选。如果表位选得不好,怎么调参数都没用。
6.2 ProteinMPNN 序列折叠不回去怎么处理
AlphaFold2 验证时,如果 RMSD 很大,说明序列和骨架不匹配。可能的原因:
- 骨架本身不合理:RFdiffusion 生成的骨架可能含有不合理的几何结构(比如键长键角异常、原子重叠)。用 MolProbity 检查骨架的几何质量。
- 序列设计约束太少:如果全序列自由设计,模型可能会选一些不利于折叠的残基。尝试固定更多框架区残基。
- 多链界面不匹配:重链和轻链的界面残基如果不兼容,会导致折叠失败。检查界面残基的氨基酸类型是否合理(比如有没有带同种电荷的残基面对面)。
6.3 湿实验验证前的最后检查清单
在把候选分子送去做实验之前,我通常会过一遍这个清单:
- 序列有没有明显的错误?比如起始密码子、终止密码子、信号肽。
- 有没有意外的糖基化位点(N-X-S/T)?如果有,考虑突变掉。
- 有没有过多的游离半胱氨酸?抗体框架区的二硫键要保留,但额外的半胱氨酸容易导致错误配对。
- 等电点是否合适?太高或太低都可能影响纯化。
- 有没有预测的强 MHC II 结合表位?如果有,考虑改掉。
这些检查看起来琐碎,但能避免很多“做了几个月实验发现分子根本表达不出来”的悲剧。
6.4 提高成功率的几个“玄学”技巧
说几个我在实操中总结的、不太上得了台面但确实有用的技巧:
- 多跑几轮,换随机种子:RFdiffusion 的生成结果对随机种子敏感。同一个配置,换个种子,结果可能完全不同。我通常至少跑 3 个种子,合并结果。
- 用已知抗体做“锚定”:如果你要针对的表位和某个已知抗体的表位重叠,可以把已知抗体的框架作为参考,让 RFdiffusion 在此基础上生成。这样成功率会高很多。
- CDR H3 单独处理:CDR H3 是抗体多样性的主要来源,也是最难设计的部分。我有时会先用 RFdiffusion 生成框架,然后用专门的 loop 建模工具(如 LoopBuilder)单独设计 H3,最后再拼起来。
- 不要迷信计算分数:我遇到过 Rosetta 分数很差但实验亲和力很好的设计,也遇到过分数很好但完全不结合的。计算只是筛选,实验才是真理。
7. 从计算到实验的衔接与迭代
7.1 基因合成与表达载体的选择
计算筛选出的候选,下一步是基因合成。对于抗体,通常选择哺乳动物细胞表达(HEK293 或 CHO),因为这样能保证正确的折叠和糖基化。载体方面,常用的有 pcDNA3.4、pTT5 等。
如果只是做初步的结合验证,也可以尝试大肠杆菌表达,但抗体的二硫键在细菌中容易形成包涵体,需要复性,比较麻烦。我的建议是:初步筛选用哺乳动物细胞瞬转,确认结合后再考虑其他表达系统。
7.2 结合实验的优先级排序
拿到表达上清后,第一轮实验通常是 ELISA 或 BLI(生物膜干涉)。ELISA 便宜、通量高,适合初步筛选;BLI 能测动力学常数,适合确认阳性克隆。
我通常的做法是:
- 用 ELISA 筛一遍,看有没有结合信号。
- 对 ELISA 阳性的克隆,用 BLI 测亲和力。
- 对亲和力好的克隆,做稳定性测试(热挑战、血清稳定性)。
- 对稳定性好的克隆,做功能实验(比如中和实验、细胞实验)。
这个顺序能帮你快速淘汰大部分不合格的候选,把资源集中在最有希望的分子上。
7.3 亲和力成熟与后续优化
如果初步设计的抗体亲和力不够(比如只有微摩尔级),可以做亲和力成熟。常用的方法包括:
- 计算重设计:用 ProteinMPNN 对 CDR 区做定向突变,生成突变体库,再用 AlphaFold2 和 Rosetta 筛选。
- 实验进化:用易错 PCR 或定点突变构建突变体库,用噬菌体展示或酵母展示筛选。
- 理性设计:根据结构分析,手动突变界面残基,比如把疏水残基换成带电荷的残基,增加静电相互作用。
亲和力成熟是一个迭代过程,通常需要 2-3 轮才能把亲和力提高 10-100 倍。
7.4 这套流程的局限性与未来改进方向
RFdiffusion + ProteinMPNN 不是万能的。目前的局限性包括:
- 对靶点结构的依赖:如果靶点没有可靠的结构,这套流程基本没法用。
- 对表位的依赖:表位选择仍然需要人工判断,自动化程度不够。
- 亲和力上限:从头设计的抗体,亲和力通常不如免疫动物得到的抗体,需要后续成熟。
- 可开发性:计算阶段很难完全预测表达量、稳定性、免疫原性,很多候选会在实验阶段被淘汰。
未来的改进方向可能包括:更好的表位预测工具、更精确的亲和力预测模型、以及将可开发性评估整合到设计流程中。但就目前而言,这套流程已经足够让一个有小团队、有 GPU 资源的实验室,在几周内生成一批可实验验证的候选分子。
我个人在实际操作中的体会是:不要追求一次成功,要把这套流程当成一个“候选生成器”。它的价值不在于直接给你一个完美的抗体,而在于帮你快速探索巨大的序列和结构空间,把湿实验的试错成本降下来。跑 500 个设计,能有 5 个结合,1 个有开发潜力,这个效率已经比传统方法高很多了。