看到“科学家用 AI 创建出 16 种新病毒”这个标题时,很多人的第一反应是担忧:AI 是不是已经可以随意制造危险生物了?这种焦虑很合理,但如果只停留在恐慌层面,反而会错过这项研究背后真正的技术突破——AI 正在从“写文字、画图片”走向“设计蛋白质、改造生物系统”这一全新领域。
本文不讨论科幻电影式的“人造病毒”,而是从技术角度拆解这件事:科学家到底用了什么样的 AI 工具链?这些模型是怎么工作的?如果我自己想上手做蛋白质设计实验,该怎么搭建环境、写代码、跑通一个最小案例?同时,我也会把生物安全和科研伦理问题单独拎出来,讲清楚哪些事情必须在什么边界内做。
无论你是刚接触 AI 的开发者,还是做后端、算法、生物信息学的工程师,这篇文章都会给你一条清晰的学习路径。
1. AI 生成新病毒的新闻背景与核心解读
1.1 新闻到底说了什么
根据公开报道,海外研究团队使用 AI 蛋白质设计工具,成功构建了一批“病毒样结构”。这里需要特别注意措辞:新闻里说的“新病毒”,更准确的理解是基于蛋白质从头设计的病毒样颗粒(Virus-Like Particles, VLPs)或衣壳结构,而不是我们在传染病语境中常说的那种具有感染能力、能自我复制的活病毒。
这个区分非常重要。
传统意义上的病毒,除了蛋白质外壳,还需要完整的核酸基因组、感染机制、宿主识别等一系列复杂组件。而这次研究中所说的“新病毒”,更多是指在实验室中通过 AI 设计出新的蛋白质组装体,它们可能在形态上类似病毒外壳,但不等同于天然致病病毒。
研究人员的目标也并不是为了制造威胁,而是为了验证:AI 是否能够从零开始设计自然界不存在的蛋白质结构?如果这个技术成熟,未来在疫苗载体、药物递送、纳米材料等领域都会有巨大的应用潜力。
1.2 这项技术为什么引发关注
这则新闻被大量转发,本质上是因为它触及了 AI 能力的边界。
过去几年,AI 在蛋白质领域的突破集中在“预测”:给定一条氨基酸序列,预测它会折叠成什么样的三维结构。代表成果就是 DeepMind 的 AlphaFold 系列。但当 AI 开始转向“设计”,问题的复杂度就完全不同了——它不是从序列到结构,而是反过来,要从目标结构出发,生成符合该结构的全新序列。
这就好比:
- AlphaFold 是“看到图纸,推断这座桥怎么建”;
- AI 蛋白质设计是“告诉你桥的形状和承重要求,让你从零设计出所有构件”。
后者显然更具挑战性,也更有工程意义。
1.3 本文适合哪些读者
- 对 AI for Science 感兴趣,想了解 AI 如何进入生命科学领域;
- 后端或算法工程师,想快速上手蛋白质设计相关工具链;
- 学生或研究者,需要了解扩散模型在生物分子领域的应用;
- 运维或平台开发,需要为生物计算任务搭建 GPU 环境。
读完这篇文章,你至少能掌握:蛋白质设计的基本概念、主流 AI 模型的原理、一个可运行的蛋白质设计最小案例、以及实际工程中会遇到的高频问题。
2. AI 蛋白质设计的基础概念
2.1 蛋白质:从序列到结构再到功能
蛋白质由 20 种氨基酸按特定顺序连接而成。氨基酸序列决定了蛋白质在空间中如何折叠,而折叠后的三维结构决定了它“能干什么”。
这条逻辑链可以简化成:
氨基酸序列 -> 三维结构 -> 生物学功能- 序列:像一串字符,例如
MKTIIALSYIFCLVFADYKDDDDK; - 结构:蛋白质在空间中真正形成的立体形状;
- 功能:酶催化、信号传导、识别抗原、组装成病毒外壳等。
在天然进化中,序列、结构和功能是亿万年试错的结果。而 AI 要做的事情,就是把这套“试错”过程压缩到毫秒级。
2.2 蛋白质设计的两种路径
AI 蛋白质设计目前大致分为两种路径:
正向设计(序列 -> 结构)
先设计一条氨基酸序列,再预测它的结构。这种方式本质上还是“预测”,只不过序列是自己写的。
逆向设计(结构 -> 序列)
先指定一个目标三维结构,再用 AI 生成能够折叠成该结构的氨基酸序列。这是当前更前沿的方向,也是新闻中提到的“16 种新病毒”背后使用的核心思路。
更精确地说,逆向设计还可以拆成两步:
- 使用结构扩散模型从随机噪声中生成主链原子坐标;
- 使用序列设计网络(如 ProteinMPNN)为生成的主链结构匹配氨基酸序列。
2.3 什么是病毒样颗粒
病毒样颗粒是模仿天然病毒结构的人工蛋白组装体。它们有和病毒相似的外形,但不含病毒基因组,因此没有感染能力。
科学家设计新病毒样颗粒的动机之一是开发更安全的疫苗载体:把抗原蛋白展示在颗粒表面,让人体免疫系统看到“病毒长这样”,但不会真的致病。
所以,AI 设计出 16 种新病毒样颗粒,从科研价值上看,更像是“AI 撞开了蛋白质组装体设计的大门”。
3. 技术原理拆解:扩散模型如何“画”出蛋白质
这一章是全文的技术核心。我会尽量用工程开发者的视角去解释,而不是堆生物术语。
3.1 扩散模型与蛋白质结构生成
扩散模型(Diffusion Model)在图像生成领域已经有很成熟的应用:先在训练时给图片逐步加入噪声,再学习如何从噪声中恢复原始图片。
蛋白质结构扩散模型(如 RFdiffusion)借鉴了同样的思路,但关键区别在于,它操作的对象不再是像素,而是蛋白质骨架原子在三维空间中的坐标。
RFdiffusion 的工作流程大致如下:
- 输入一个目标条件,可以是某种形状约束、结合位点信息,也可以是无条件生成;
- 从一个随机蛋白质主链结构出发;
- 通过多轮去噪过程,逐步将随机结构“雕琢”成符合约束的稳定结构。
RFdiffusion 基于 RoseTTAFold 的架构,所以它天然具备对蛋白质三维结构的理解能力。这也是它能够高质量生成单体、多聚体、结合蛋白等多种结构的原因。
3.2 结构生成与序列设计分离
这里有一个设计哲学:结构生成和序列设计不应该由同一个模型同时完成。
在 RFdiffusion 中,模型负责生成主链坐标,而不直接给出氨基酸序列。主链坐标就像建筑的“钢筋框架”,还不清楚具体用什么材料填充墙体和门窗。
接下来第二步,会使用 ProteinMPNN 这样的模型,根据主链结构反推氨基酸序列。ProteinMPNN 是一种基于消息传递神经网络的序列设计器,它通过不断计算每个氨基酸位置与其相邻氨基酸之间的关系,来寻找最适合当前结构骨架的氨基酸序列。
这种“结构生成 + 序列设计”分离的模式,在工程上更容易调试。你可以固定结构生成的结果,反复替换序列设计策略,也可以反过来做对比实验。
3.3 验证:AlphaFold 的反向预言
AI 生成的结构和序列不一定是真的可折叠、稳定的。
所以在设计完成后,常规流程会做一次“真实性验证”:把生成的氨基酸序列再扔给 AlphaFold2 或其他结构预测工具,让模型预测这条序列会折叠成什么结构。
如果 AlphaFold2 预测出来的结构与 RFdiffusion 生成的目标结构高度一致(RMSD 值很小),说明这个设计很成功。
设计生成的结构G与序列S | v AlphaFold2预测序列S的结构G' | v 比较G和G'的相似度 | v 相似度高 -> 设计可信 相似度低 -> 迭代优化这个思路有点类似于工程开发中的“编译器和解释器互相验证”:一个模型负责生成,另一个模型负责验证,双方交叉确认,降低出错的概率。
4. 环境准备与工具链
要本地运行蛋白质设计模型,环境配置是很多开发者容易卡住的地方。下面我以当前常用的开源工具链为例,给出完整的环境搭建思路。
版本需要根据你的项目实际情况调整,本文示例以常见环境为例,重点演示配置思路。不同服务器的 CUDA、cuDNN 版本可能不同,如果遇到兼容问题,优先用 Docker 或 conda 锁定环境。
4.1 硬件要求
蛋白质结构扩散模型对显存要求较高,建议至少准备:
- NVIDIA GPU,显存 16GB 以上;
- 如果只做小规模测试,12GB 显存也可以勉强运行,但需要降低生成参数;
- 磁盘剩余空间建议 50GB 以上,因为模型权重文件较大;
- 内存建议 32GB 以上。
如果本地没有 GPU,可以考虑云 GPU 服务器或者 Colab,但不建议用 CPU 跑结构生成,速度会慢到不可接受。
4.2 安装基础依赖
推荐使用 conda 管理环境:
conda create -n protein-design python=3.10 conda activate protein-design接下来安装 PyTorch。不同 CUDA 版本的安装命令不一样,建议到 PyTorch 官网获取对应命令,这里以 CUDA 11.8 为例:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1184.3 克隆模型仓库
以 RFdiffusion 为例:
git clone https://github.com/RosettaCommons/RFdiffusion.git cd RFdiffusion按照官方文档安装依赖并配置模型权重。
ProteinMPNN 也可以通过官方 GitHub 仓库安装:
git clone https://github.com/dauparas/ProteinMPNN.git cd ProteinMPNN这里需要特别提醒:这两个仓库的 release 版本迭代比较频繁,安装依赖时如果遇到版本冲突,建议优先查看官方 README 和 GitHub Issues,不要盲目升级所有依赖。
5. 实战示例:用扩散模型设计一个非致病蛋白质单体
在正式开始前,必须先说明界限。本文示例目标是非致病性蛋白质单体设计,不涉及任何病毒基因、病原体改造或感染实验。涉及病原体相关研究时,必须在具备资质并有严格审批的实验室中进行。
5.1 创建项目结构
建议按下面的结构组织文件:
protein-design-demo/ ├── inputs/ │ └── target.pdb ├── outputs/ │ ├── diffusion/ │ └── mpnn/ ├── scripts/ │ └── run_pipeline.sh └── README.mdinputs存放输入结构文件,outputs保存模型输出,scripts用来放串联整个流程的脚本。
创建目录:
mkdir -p protein-design-demo/{inputs,outputs/diffusion,outputs/mpnn,scripts}5.2 准备输入结构文件
RFdiffusion 支持从已有 PDB 结构中提取某个 motif,或者输入一个骨架区域作为条件。如果你的目标是不依赖参考结构、从头生成一个新的稳定蛋白,就可以使用“无条件生成”模式,这样不需要准备输入 PDB。
如果我们要做一个“以某个结合位点为条件”的设计,那么需要准备一个 PDB 文件,并指定残基索引范围。这里简化处理,先跑一个无条件生成单体的示例。
5.3 运行 RFdiffusion 生成主链结构
在 RFdiffusion 目录下执行:
python scripts/run_inference.py \ inference.output_prefix=./outputs/diffusion/design \ inference.model_directory_path=./models \ inference.num_designs=2 \ diffuser.T=50 \ contigmap.contigs=[100]参数说明:
inference.output_prefix:输出文件前缀,会生成design_0.pdb、design_1.pdb等;inference.model_directory_path:模型权重所在目录;inference.num_designs:生成的候选结构数量;diffuser.T:扩散去噪步数,50 是较快的测试配置,追求质量可以调大到 200;contigmap.contigs=[100]:表示生成一个长度为 100 个氨基酸的单体蛋白。
生成成功后,在outputs/diffusion目录下会看到以design_开头的 PDB 文件。PDB 文件里记录了每个原子的三维坐标,这就是蛋白质的“骨架图纸”。
5.4 使用 ProteinMPNN 设计氨基酸序列
拿到了主链坐标,下一步要为这个骨架匹配氨基酸序列。
先把 PDB 文件转换为 ProteinMPNN 需要的 JSONL 格式。
进入 ProteinMPNN 目录,使用辅助脚本:
python helper_scripts/parse_multiple_chains.py \ --input_path ../protein-design-demo/outputs/diffusion/design_0.pdb \ --output_path ../protein-design-demo/outputs/mpnn/design_0_parsed.json然后运行序列设计:
python protein_mpnn_run.py \ --jsonl_path ../protein-design-demo/outputs/mpnn/design_0_parsed.json \ --out_folder ../protein-design-demo/outputs/mpnn \ --num_seq_per_target 4 \ --batch_size 1参数说明:
--jsonl_path:输入文件;--out_folder:输出目录;--num_seq_per_target:每个骨架生成多少条候选序列,数值越大后续可选择的序列越多;--batch_size:预测时的批次大小,受显存限制。
ProteinMPNN 会输出多组氨基酸序列,你可以根据序列的置信度选择候选序列进行下一步验证。
5.5 使用 AlphaFold2 验证结构
接下来是验证环节。把上一步生成的最佳序列提取出来,然后使用 AlphaFold2 进行结构预测。
需要说明的是,AlphaFold2 的本地部署比较重,很多团队会选择使用在线版或 Colab 版。这里重点是理解验证逻辑:
- 取 ProteinMPNN 输出的序列;
- 使用 Alphafold2 预测该序列的结构;
- 将预测结构与 RFdiffusion 生成的主链结构进行比对;
- 计算 RMSD 和 pLDDT 分数。
如果 AlphaFold2 预测出的结构与 RFdiffusion 生成结构非常相似,说明这条序列确实可以折叠成目标形状,设计可信度较高。反之,如果差异很大,则需要调整参数重新生成。
5.6 结果评估与筛选
拿到输出后,可以通过脚本快速筛选。比如,使用 PyMOL 或者 BioPython 计算两个结构之间的 RMSD。
下面是一段使用 BioPython 计算 RMSD 的参考示例:
# 文件路径:protein-design-demo/scripts/calc_rmsd.py import Bio.PDB def calc_rmsd(pdb1, pdb2, atom_name="CA"): parser = Bio.PDB.PDBParser(QUIET=True) structure1 = parser.get_structure("ref", pdb1) structure2 = parser.get_structure("model", pdb2) atoms1 = [atom for atom in structure1.get_atoms() if atom.get_name() == atom_name] atoms2 = [atom for atom in structure2.get_atoms() if atom.get_name() == atom_name] if len(atoms1) != len(atoms2): raise ValueError("两个结构的原子数量不一致") sup = Bio.PDB.Superimposer() sup.set_atoms(atoms1, atoms2) print(f"RMSD: {sup.rms:.2f} Å") if __name__ == "__main__": calc_rmsd("design_0.pdb", "alphafold_prediction.pdb")如果 RMSD 在 1-2 Å 范围内,通常认为结构吻合度很高。实际项目中还会结合 pLDDT、Rosetta 能量评分等综合判断。
6. 常见问题与排查思路
本地运行蛋白质模型时,最常遇到的问题集中在环境冲突、显存不足和结果不合理三个方面。
6.1 GPU 显存不足
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| CUDA out of memory | 生成序列过长或 batch_size 过大 | 缩短 contigs 长度、减小 batch_size、降低扩散步数 |
| 启动时报 CUDA 错误 | PyTorch 与 CUDA 版本不匹配 | 按官方文档重新安装 PyTorch |
| 训练或推理速度很慢 | 模型没有真正调用 GPU | 检查nvidia-smi,确认进程是否占用 GPU |
6.2 PDB 文件解析失败
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| parse_multiple_chains.py 报错 | 输入 PDB 中缺少链信息 | 用 PyMOL 或脚本补充链标识 |
| 氨基酸编号不连续 | 输入文件来自不完整结构 | 使用pdb_selresno类工具重排残基编号 |
| 文件中包含非标准氨基酸 | 设计过程引入了非标准残基 | 统一转成标准 20 种氨基酸 |
6.3 设计结果不合理
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| AlphaFold2 预测结构与目标结构差异大 | RFdiffusion 生成的结构本身不稳定 | 增加 diffuser.T 步数、生成更多候选结构 |
| ProteinMPNN 输出的序列置信度都很低 | 主链骨架不够合理 | 检查骨架原子是否有空间碰撞,适当调整 contig 长度 |
| 多个候选结构重复度高 | 随机种子固定或采样不足 | 修改随机种子、增加inference.num_designs |
6.4 环境依赖冲突
蛋白质设计相关工具往往依赖特定版本的 PyTorch、CUDA、dgl 等库,升级任何一个都可能引发连锁问题。
我的建议是:项目使用独立的 conda 环境,避免与日常开发环境混用。如果在一个服务器上需要跑多个类似项目,优先考虑 Docker,把模型权重和依赖打包在一起。
7. 工程化与生物安全最佳实践
7.1 生物信息学代码工程化
很多人把蛋白质设计脚本写成一次性脚本,用完就丢。但如果想在项目中真正落地,代码工程化非常重要:
- 输入输出路径参数化,不要写死绝对路径;
- 用配置文件管理模型路径和参数,例如 YAML 或 JSON;
- 记录每次实验的随机种子和版本信息,方便复现;
- 生成结果时要汇总 pLDDT、RMSD 等评价指标到 CSV,便于横向对比;
- 对 PDB 文件做自动校验,避免无效输入在后续步骤中造成不可预期错误。
一个最小的 YAML 配置文件示例:
project: name: protein_design_demo output_dir: ./outputs rfdiffusion: model_dir: ./models num_designs: 4 diffuser_t: 200 contigs: "[120]" proteinmpnn: num_seq_per_target: 8 batch_size: 1 validation: tool: "alphafold2" rmsd_threshold: 2.0这样配置的好处是,换实验只需要改配置,不需要改代码。
7.2 生物安全与合规
这是整个领域不可回避的问题。
AI 蛋白质设计具备极强的“双刃剑”属性。一方面,它可以帮助科研人员快速设计疫苗、抗体、酶等;另一方面,如果被滥用,理论上也可能被用于制造有风险的生物分子。
所以在实际工程中,必须遵守以下底线:
- 涉及病原体相关研究,必须在具备相应生物安全等级资质的实验室内进行;
- 所有设计结果在进行湿实验前,需要通过生物安全审查;
- 对于序列设计结果,建议进行 BLAST 同源性搜索,排除与已知毒素或病原体组分的意外相似;
- 不要公开发布可直接绕过安全审查的端到端自动化工具;
- 任何合成 DNA 的采购行为都必须符合所在地区和国家的监管要求。
作为开发者,我们可以追求技术能力,但更应该清楚:模型的能力越大,使用者需要承担的责任也越大。
7.3 可解释性与可靠性
AI 生成的蛋白质结构并不是“一锤子买卖”。
在真实科研项目中,通常需要将多个不同模型的设计结果交叉验证:RFdiffusion 生成骨架、ProteinMPNN 生成序列、AlphaFold2 验证结构、Rosetta 计算能量,最后再由实验人员表达纯化蛋白,通过圆二色谱、X 射线晶体学或冷冻电镜来确认真实结构。
AI 只是第一道筛选器。它输出的结果显著提高了从“想象结构”到“拿到真实蛋白”的命中率,但不能替代实验室里的最后验证。在工程上,我们最好把 AI 设计看作一个“高速预筛系统”,而不是“最终答案生成器”。
8. 总结与下一步学习路线
这篇文章从新闻事件出发,梳理了 AI 蛋白质设计的技术逻辑,从扩散模型生成骨架,到 ProteinMPNN 设计序列,再到 AlphaFold2 验证结构,并给出了一套完整的环境搭建和最小运行示例。
如果你第一次接触这个方向,也不需要被庞大的生物术语吓倒。可以把蛋白质设计理解为“结构数据上的生成模型应用”:核心还是深度学习、扩散模型、图神经网络和数据处理这些你熟悉的工程领域知识,只是数据形态从文本、图片变成了三维坐标。
下一步可以按这个路线继续深入:
- 学习 PDB 文件格式、认识蛋白质结构里的原子坐标信息;
- 阅读 RFdiffusion 和 ProteinMPNN 的原始论文,理解模型设计的细节;
- 跑通官方提供的 notebook 示例,修改参数观察不同效果;
- 尝试设计一个短肽结合蛋白,并使用 AlphaFold2 做自我验证;
- 如果对算法感兴趣,可以进一步研究 RoseTTAFold 和 AlphaFold 的模型架构差异。
最后想多说一句:科技新闻往往喜欢用耸动的标题吸引眼球,但真正值得关注的,永远是背后扎实的研究方法。AI 设计蛋白质这件事,未来一定会走进制药、材料、环保等更多行业。能够越早理解它的人,就越有机会在这个交叉领域找到自己的位置。