2020 年 CASP14 竞赛上AlphaFold2 把蛋白质结构预测的中位精度推进到原子级被评审团宣布问题基本解决。这是 AI for Science 的第一个里程碑时刻。但故事没有停在预测——过去三年领域的重心已经明显转向设计给定功能需求反向生成自然界不存在的蛋白质。这条从读懂到写出的路线正在把生物学从观测科学变成工程学科。AlphaFold2 做对了什么回看 AlphaFold2它的成功不是单点突破而是几个设计咬合在一起的结果。第一是共进化信息。模型的主干输入不是单条序列而是多序列比对MSA——同一蛋白质在不同物种中的同源序列。残基之间的共变异信号隐含了空间接触约束这是几十年结构生物学的核心洞察AlphaFold2 把它做成了端到端可学习的一等公民。第二是Evoformer。这是一个双轨注意力结构MSA 表征和残基对pair表征互相交换信息pair 轨道维护任意两个残基之间关系的几何先验。注意力在这里不是算词与词的相关性而是在推断三维约束。第三是结构模块与循环精修。末端用不变点注意力IPA直接输出刚体坐标并施加符合化学规则的损失整个网络做三次 recycling把输出再喂回输入迭代优化。开源的 AlphaFold 数据库一次性放出 2 亿多个预测结构几乎覆盖了 UniProt 的已知蛋白质。从科研民主化的角度看这可能是 DeepMind 做过的影响力最大的一件事。AlphaFold3 与生成式转向AlphaFold2 的边界也很清楚只管静态结构不管蛋白质怎么动、怎么和小分子或核酸结合。2024 年发布的 AlphaFold3 把架构换成了扩散模型——先预测配体-蛋白复合物的原子坐标分布再从噪声中逐步去噪生成结构。它能处理蛋白质、DNA、RNA、小分子、离子的任意组合分子对接精度超过了传统物理方法。这个改动意味深长从回归一个确定结构变成从分布中采样结构。当输出从点估计变成分布生成式生物学的大门就打开了。从预测到设计RFdiffusion 与 ProteinMPNN如果说 AlphaFold 解决的是序列→结构蛋白质设计要解决的是反问题功能/结构→序列。这条线上有两个绕不开的工具。RFdiffusionBaker 实验室2023把图像领域的扩散模型搬到了蛋白质骨架上。它以 RoseTTAFold 为去噪网络骨架在三维残基坐标和旋转上做 SE(3) 等变的扩散过程。给它一个功能位点或者目标蛋白的结合面它能生成全新的骨架把功能基团脚手架式地撑起来。实验验证的结合蛋白亲和力可以到皮摩尔级还做出过对称寡聚体、金属结合蛋白。ProteinMPNN负责配套的另一半给定骨架设计能折叠成这个骨架的氨基酸序列。它是一个消息传递神经网络比 Rosetta 物理方法快几个数量级序列恢复率也更高。典型工作流是RFdiffusion 生成骨架 → ProteinMPNN 设计序列 → AlphaFold2/ESMFold 回测结构是否与设计一致 → 湿实验验证。这套生成-筛选-验证闭环和软件工程里的 TDD 有异曲同工之妙。蛋白质语言模型另一条腿不依赖 MSA 的单序列模型是另一条路线。Meta 的 ESM 系列把蛋白质序列当句子在海量序列上做掩码语言模型预训练学到了结构和功能信息。ESM-2 参数量做到 15B浮现出了原子级的结构表征ESMFold 直接用语言模型表征预测结构速度比 AlphaFold2 快一个数量级代价是精度略降。2024 年的 ESM-3 更进一步把序列、结构、功能统一成离散 token多轨联合生成直接演示了生成一个新荧光蛋白。动手试试用 ESMFold 预测一个结构import torch from transformers import AutoTokenizer, EsmForProteinFolding # 加载 ESMFold (需要 16GB 显存, 可用 esmfold_v1) model EsmForProteinFolding.from_pretrained( facebook/esmfold_v1, low_cpu_mem_usageTrue ).cuda().eval() tokenizer AutoTokenizer.from_pretrained(facebook/esmfold_v1) sequence MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEK \ AVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRL with torch.no_grad(): inputs tokenizer([sequence], return_tensorspt).to(cuda) outputs model(**inputs) # 输出 PDB 字符串与 pLDDT 置信度 pdb model.output_to_pdb(outputs)[0] plddt outputs[plddt].mean().item() print(f平均 pLDDT 置信度: {plddt:.1f}) # 70 认为可信 with open(predicted.pdb, w) as f: f.write(pdb)得到的 PDB 文件可以直接拖进 PyMOL 或 ChimeraX 查看。pLDDT 是最重要的质量指标低于 50 的区域通常是固有无序区不要盲目采信。主流工具横向对比| 维度 | AlphaFold2 | AlphaFo