这两年,AI 设计抗体从学术论文里的概念,逐渐变成了很多生物医药团队实际在调研的方向。一方面,以 AlphaFold 为代表的蛋白质结构预测确实把计算生物学推到了新高度;另一方面,药企和科研机构真正关心的问题却很朴素:AI 设计的抗体序列,进了湿实验室之后到底能不能用?结合亲和力够不够?表达是否正常?会不会还没到临床阶段就因为稳定性、免疫原性等问题被淘汰?
这些问题靠一两篇论文很难回答。因为不同团队用的数据集、评估指标、验证方案都不完全一样,横向对比意义有限。近期看到的这场盲测很有参考价值:29 家机构、511 条序列被拉进同一个评测框架里,用统一标准检验 AI 设计抗体的真实水平。这篇文章就围绕这场盲测展开,拆解 AI 抗体设计的技术原理、评测逻辑、工程落地时的常见问题,以及如何在项目里建立一套“计算 + 实验”的可信闭环。
如果你是做 AI 算法、生物信息学,或者是药企里负责抗体发现和序列设计的研发人员,这篇文章会帮你建立一套判断 AI 抗体设计工具能力的评估框架,也能少走一些重复踩坑的路。
1. 背景与核心概念
1.1 什么是 AI 抗体设计
抗体设计是一个典型的“搜索 + 优化”问题。抗体分子通过可变区(尤其是 CDR 区域)与抗原表位结合,理论上,CDR 区域的氨基酸组合空间巨大,传统实验方法只能覆盖极小的范围。AI 抗体设计的目标,就是通过计算模型从巨大的序列空间中搜索高概率、有功能潜力的候选抗体序列。
传统流程通常包括:动物免疫或杂交瘤筛选、噬菌体展示、酵母展示等实验手段。这些流程成熟但周期长、成本高。AI 设计试图在前端做筛选,把实验重点放到更小的候选集上,理论上能压缩抗体发现周期。
从技术角度看,AI 抗体设计并不仅仅等于“用 GAN 生成序列”,它至少包括三个层次:
- 序列层:生成 CDR 序列,优化互补决定区。
- 结构层:预测抗体三维结构,评估 CDR 构象。
- 功能层:预测抗原-抗体结合亲和力、稳定性、可开发性。
层次越高,任务越复杂,评估难度也越大。
1.2 为什么需要一场“盲测”
AI 模型在训练集上的表现通常很好,但真实场景下的泛化能力是另一回事。很多研究在发表时使用内部数据集,评估结果容易受数据泄漏、评价指标不统一等因素影响。
盲测的核心价值在于:
- 统一数据集:所有参与者面对同一个测试集,避免各说各话。
- 统一评价指标:用同一套标准评估生成序列质量。
- 降低期望偏差:在公布模型身份之前先看结果,减少“品牌效应”影响。
29 家机构参与、511 条序列进入统一评测,这相当于在行业内做了一次“横向对比实验”。即便最终结果不能完整代表生产环境,也能反映出一个重要信息:目前 AI 设计抗体处在什么水平,哪些环节已经很成熟,哪些环节还明显不足。
1.3 29 家机构与 511 条序列意味着什么
从信息量上看,29 家机构具备一定的行业代表性,覆盖了学术界、AI 制药初创公司、大型药企的计算平台团队等不同背景。511 条序列构成一个中等规模的测试集,排除了“模型只在一个靶点上表现好”的偶然性,也让评估结果具备相对的统计可信度。
但这里要理性看待。511 条序列并不等于 511 个成功设计的抗体先导分子。盲测更可能关注的是:在统一任务定义下,每一条生成序列是否满足设计要求,比如序列合理性、结构可行性、与参考抗体的相似度、可开发性预测指标等。
因此,盲测结果更适合解读为“AI 设计能力的横向切片”,而不是“哪家机构直接拿到了临床候选分子”。
1.4 容易混淆的概念
围绕 AI 抗体设计,三个概念容易混淆:
抗体生成 vs 抗体优化。生成是从零构建 CDR 或完整可变区序列;优化是在已知抗体基础上改造,例如提高亲和力、降低免疫原性。盲测中如果任务定义偏向某个方向,结果不能随意推广到更大范围。
结构预测 vs 功能预测。AlphaFold2 能预测结构,但不能直接告诉你这个抗体能不能结合目标抗原。结构预测解决的是“三维形态长什么样”,功能预测回答的是“这个形态能不能工作”。
序列多样性 vs 功能多样性。模型可能生成 1000 条序列完全不同的抗体,但其中 990 条在表达、折叠、结合能力上都不合格。多样性指标高,不一定代表功能空间被充分探索。
理解这几个区别,才能正确解读后续的评估结果。
2. 盲测设计解读:到底在测什么
2.1 从算法到湿实验:评测链条
一次完整的 AI 抗体设计评测,通常不会只停留在计算层面。按阶段划分:
- 计算阶段:模型生成序列或结构。
- 干实验验证:用已知数据回测、结构预测、可开发性指标计算。
- 湿实验验证:ELISA、SPR、FACS 等实验检测是否真实结合。
- 后期筛选:表达量、聚集温度、稳定性、CMC 属性。
大多数公开盲测只覆盖前两步。原因很直接:511 条序列全部做湿实验,成本和时间跨度太高。因此,盲测结果能告诉我们 AI 模型“在计算指标上表现如何”,但未必能直接断言“这批序列能成为药物”。
2.2 核心任务拆解
根据常见的 AI 抗体设计评测范式,盲测通常拆解成以下几类子任务:
| 任务 | 输入 | 输出 | 评估重点 |
|---|---|---|---|
| CDR 序列设计 | 抗原序列或结构、框架区序列 | CDR 序列 | 序列合理性、多样性 |
| 亲和力成熟 | 已知抗体序列 + 抗原信息 | 改造后的序列 | 预测结合力提升 |
| 结构生成 | 目标表位信息 | 抗体结构 | 结构合法性、结合界面 |
| 可开发性预测 | 抗体序列 | 稳定性/表达指标 | 预测值与实验相关性 |
不同的任务对应不同的模型设计思路。一个模型很难在所有任务上同时夺冠,这也是盲测最有信息量的地方:它展示了当前方法的能力分布。
2.3 盲测的关键:训练集、测试集与信息泄漏
如果你做机器学习,应该对信息泄漏非常敏感。抗体设计领域同样如此。
假设测试集里的某个靶点、某个表位在训练集中出现过,模型相当于“见过答案”,生成结果自然更好。而真正有意义的盲测,应满足:
- 测试集靶点与训练集靶点无重叠
- 测试集序列与训练集序列的序列一致性低于阈值
- 公开数据库中的已知结合抗体不能作为测试集正样本
这三点是判断一次盲测是否可信的基础。说“29 家机构、511 条序列进入盲测”,读者首先应该看的就是任务划分和数据隔离策略,而不是直接比较分数排名。
2.4 评分方式的常见设计
为了量化生成质量,盲测通常会设计多维评分:
- 序列层面:氨基酸分布合理性,是否具有天然抗体特征。
- 结构层面:CDR 环区构象有效性,是否与框架区冲突。
- 功能层面:与抗原的对接打分,结合自由能预测。
- 可开发性层面:聚集倾向、溶解度、表达预测。
不同指标之间往往存在冲突。比如,追求高亲和力预测值可能牺牲可开发性,追求多样性可能让整体序列质量下降。因此,盲测的设计者通常用综合排名或 Pareto 前沿来评估参与者,而不是只看单一指标。
理解这一点,你才能读懂结果里出现的“某个团队序列多样性第一,但总体排名并不靠前”这类现象。
3. 技术原理拆解:AI 设计抗体背后的主流方法
3.1 基于序列的蛋白语言模型(PLM)
蛋白语言模型是近年来抗体设计的核心工具之一。思路与 NLP 中的预训练语言模型类似:在大规模蛋白序列上做自监督预训练,再通过微调适配下游任务。
代表性方法包括:
- ESM 系列:通过掩码语言建模学习蛋白序列表征。
- ProtBERT / ProtTrans:基于 Transformer 的蛋白序列模型。
- 专门针对抗体的模型:如 AntiBERTa,在抗体序列数据上预训练。
在抗体设计任务中,PLM 通常被用来:
- 提取 CDR 序列的特征表示
- 评估生成序列的“自然度”或“合理度”
- 作为生成模型的结构化先验
工程上的典型做法是:先用 PLM 对候选序列做打分排序,再进入结构层面的筛选。
3.2 基于结构的生成模型
结构层面的抗体设计比序列层面难一个量级。输入通常是抗原结构或表位信息,输出是抗体结构或满足结构约束的序列。
常用方法包括:
- 扩散模型(Diffusion Models):从随机状态逐步去噪生成结构。
- 图神经网络(GNN):把抗体和抗原建模成空间图,预测残基间相互作用。
- 基于流匹配的生成模型:近年来在蛋白质设计领域逐渐增多。
这类方法的优势在于能显式建模空间约束,尤其是 CDR H3 环区与抗原的几何互补性。难点在于采样复杂度高、计算资源需求大,且生成结果必须经过严格的物理化学检查,否则可能出现主链原子重叠、二面角不合理等问题。
3.3 亲和力预测与排序模型
不管模型生成多少条序列,最终都需要排序筛选。亲和力预测模型是这个环节的核心。
常见思路:
- 基于结构特征的打分函数:使用 Rosetta、DeepMind 等工具计算结合能。
- 基于学习的方法:用已知的抗原-抗体复合物做监督训练,预测结合亲和力标签。
- 基于 PLM 的表征 + 回归头:把序列或结构编码成向量,再预测 pIC50 或 KD 值。
需要注意的是,目前亲和力预测模型的绝对精度仍然有限。更常见的工程策略是“相对排序”:不关心模型预测的具体 KD 值是否准确,只关心排序靠前的候选是否比排序靠后的候选有更高实验阳性率。
3.4 计算 - 实验闭环
真正成熟的 AI 抗体设计平台,不会只依赖一个生成模型,而是构建一个“生成 → 筛选 → 验证 → 微调”的闭环:
- 生成模块:产出大量候选序列。
- 计算筛选:过滤掉理化性质不合理的序列。
- 结构验证:对剩余序列做结构预测或结构生成。
- 实验测试:挑选 top-N 序列做湿实验。
- 数据回流:实验结果反馈到模型,用于下一轮迭代。
在盲测中,因为缺少湿实验反馈,团队实际上只能依赖前三个步骤。如果盲测结果显示某些团队在这一阶段表现不佳,很可能是“干实验筛选器”的设计不够严谨,而不是生成模型本身完全不可用。
4. 工程实战:搭建一个简易抗体序列评估流水线
盲测离普通工程开发有点远,但“评估生成的抗体序列是否靠谱”这件事,可以直接落地成一套代码流水线。这一节给出一个可行的最小示例,帮助你建立自己的评估框架。
4.1 环境准备
建议使用以下环境:
- Python 3.9 或以上版本
- 操作系统:Linux/macOS 均支持,Windows 需要适配部分依赖
- 第三方库:BioPython、NumPy、Pandas、Scikit-learn
安装命令:
pip install biopython numpy pandas scikit-learn如果要用到蛋白语言模型提取序列特征,还需要安装:
pip install fair-esm说明:示例重点演示流程和思路,实际项目中需要根据你使用的 PLM 版本调整模型加载方式。
4.2 数据准备:读取 FASTA 文件
先准备一个包含候选抗体序列的 FASTA 文件。示例文件结构如下:
>candidate_001 EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVS AISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAK DRGSYYYGMDVWGQGTTVTVSS >candidate_002 EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVA SISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAR GGYYYGMDVWGQGTTVTVSS读取并统计序列长度分布:
# 文件路径:scripts/read_fasta.py from Bio import SeqIO import pandas as pd records = list(SeqIO.parse("candidates.fasta", "fasta")) data = [] for record in records: data.append({ "id": record.id, "length": len(record.seq), "seq": str(record.seq) }) df = pd.DataFrame(data) print(df.describe())这一步可以快速发现序列长度异常、空序列、非法字符等问题。实际项目中,建议清洗阶段就移除不符合抗体长度范围的序列。
4.3 序列特征提取:使用 ESM 做表征
如果项目需要判断序列“是否符合天然蛋白特征”,可以提取 ESM embedding,再用下游分类器评估。示例:
# 文件路径:scripts/extract_embedding.py import torch from esm import pretrained # 加载 ESM2 模型(以 8M 参数版本为例) model, alphabet = pretrained.load_model_and_alphabet("esm2_t6_8M_UR50D") model.eval() batch_converter = alphabet.get_batch_converter() def get_embedding(seq): data = [("seq", seq)] _, _, batch_tokens = batch_converter(data) with torch.no_grad(): results = model(batch_tokens, repr_layers=[6]) # 取最后一层输出的平均池化向量 embedding = results["representations"][6].mean(dim=1).squeeze() return embedding.numpy() # 示例:计算单条序列的 embedding seq = "EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVS" emb = get_embedding(seq) print(emb.shape)说明:这里为了演示简化了 batch 处理。实际项目建议批量提取并缓存到本地,避免重复计算。
4.4 理化性质与序列合法性检查
生成序列里经常出现的问题是“模型记忆了氨基酸分布,但忽略了理化性质”。
一个可运行的基础检查脚本:
# 文件路径:scripts/physicochemical_check.py from Bio.SeqUtils.ProtParam import ProteinAnalysis from Bio.SeqUtils import molecular_weight from Bio.Seq import Seq def check_sequence(seq): protein = ProteinAnalysis(str(seq)) return { "length": len(seq), "molecular_weight": molecular_weight(seq, seq_type="protein"), "aromaticity": protein.aromaticity(), "instability_index": protein.instability_index(), "isoelectric_point": protein.isoelectric_point(), "gravy": protein.gravy(), } # 示例 seq = "EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVS" print(check_sequence(seq))在实际筛选中,可以重点关注:
- 理论等电点:是否在正常抗体范围内
- 不稳定指数:大于 40 通常被认为不稳定
- GRAVY 值:过高可能出现溶解性或聚集问题
4.5 组装成完整评估流水线
将上述模块组合起来,形成一条简单的过滤管线:
# 文件路径:scripts/pipeline.py def evaluate_candidate(seq): # 检查序列合法性 if len(seq) < 80 or len(seq) > 140: return {"status": "reject", "reason": "length_out_of_range"} # 理化性质检查 phys = check_sequence(seq) if phys["instability_index"] > 40: return {"status": "reject", "reason": "unstable"} if phys["gravy"] > 0.5: return {"status": "reject", "reason": "hydrophobic_too_high"} # 模型打分(示例中省略具体模型) score = 0.8 # 替代为你自己的排序模型输出 return {"status": "pass", "score": score, "phys": phys}运行以上代码,会输出候选序列的“通过 / 拒绝”状态和原因。这一层筛选是 AI 抗体设计中最容易被低估的环节。盲测中很多模型生成序列被淘汰,往往不是模型生成能力不够,而是生成后过滤规则太弱。
5. 从盲测角度看真实边界:AI 设计抗体容易“翻车”的环节
5.1 序列生成不等于实验阳性
这是 AI 抗体设计新手最容易混淆的点。模型可以生成一条看起来非常“像抗体”的序列,氨基酸分布正常,结构预测也能折叠出抗体结构,但放到 SPR 实验里却没有任何结合信号。
原因在于生成模型学习的是“抗体序列的统计规律”,而不是“针对特定抗原的结合规律”。如果模型没有充分引入抗原表位约束,生成结果只能算“看起来像抗体的蛋白”,离“能结合目标抗原的抗体”还有距离。
在盲测中,这类序列通常会在功能评估阶段被大量淘汰。这也是为什么很多机构的报告里,序列多样性指标很高,但结合成功率却不理想。
5.2 结构预测精度与结合能预测误差
AlphaFold2 已经大幅提升了单链蛋白质结构预测精度,但抗原-抗体复合物结构预测依然是难题。CDR H3 环区柔性大、构象多样,是目前结构预测最容易出错的区域之一。
结合自由能预测同样存在系统性误差。不同打分函数在同一复合物上的排序可能完全不同。因此,当盲测中某个团队的亲和力预测评分很高,但结构预测显示结合界面存在严重冲突时,需要谨慎看待该团队的可靠性。
5.3 可开发性是最大的暗礁
可靠结合只是第一步。抗体药物开发对分子有额外的“可开发性”要求:
- 高表达量
- 低聚集倾向
- 高稳定性
- 低免疫原性
- 良好的溶解度
AI 模型在生成序列时,往往会偏向“最大化结合预测分数”,导致生成的 CDR 区域高度疏水、带电量异常,从而引发聚集问题。这类序列在计算阶段可能很漂亮,但进入 CMC(化学、制造和控制)评估时会被迅速淘汰。
现在很多团队已经意识到这一点,开始在生成模型中加入可开发性约束,或者在筛选阶段强制设置多个 CMC 指标的阈值。
5.4 评估标准不统一带来的结果差异
观察盲测结果时,需要特别关注评估指标的定义。例如“序列多样性”可以定义为 CDR 序列两两之间的 Levenshtein 距离均值,也可以定义为氨基酸频率分布的熵。定义不同,排名就可能变化。
三个团队用同一个模型,如果下游筛选策略不同,最终提交结果也可能差异很大。因此,盲测排在末位的团队不代表其模型完全不可用,可能只是工程策略不匹配。阅读此类评测时,建议把注意力放在“任务设计”和“指标定义”上,而不是单纯看排名。
6. 常见问题与排查思路
以下表格汇总了 AI 抗体设计项目落地时最常见的问题,以及对应的排查建议:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 生成序列同源性过高,缺少多样性 | 训练集偏见,生成策略过于保守 | 调整采样温度、提高多样性奖励、对 CDR 区域做定点突变 |
| 结构预测结果与生成序列不符 | 序列-结构一致性差,模型步骤割裂 | 引入序列-结构联合生成模型,或增加结构约束损失 |
| 亲和力预测分数高但实验无信号 | 打分函数过拟合,抗原表位未参与建模 | 用已知阳性/阴性数据校准打分模型,添加表位约束 |
| 序列理化性质异常,聚集倾向高 | 生成阶段未加入理化约束 | 增加 GRAVY、疏水矩等约束项或后置过滤器 |
| 不同团队之间结果对比困难 | 评估指标定义不一致 | 项目内部优先固定指标,再做横向对比 |
| 模型生成速度慢,迭代效率低 | 采样候选量过大,未做预筛 | 使用浅层模型快速过滤,再做深度模型精筛 |
| 数据泄漏导致评估虚高 | 训练集中包含测试靶点 | 按序列一致性聚类划分训练/验证/测试集 |
如果你在项目中发现生成结果整体质量尚可,但实验阳性率很低,优先检查“筛选标准”和“模型是否真正用到了抗原信息”。大多数情况问题出在这里。
7. 最佳实践与工程建议
7.1 不要用单一模型走完全流程
抗体设计是一个多阶段问题,试图让一个模型同时完成生成、排序、可开发性预测,往往效果有限。更稳妥的工程架构是:
- LG:用轻量模型做快速生成和初筛。
- 结构模型:对 top 候选做结构验证。
- 排序模型:用实验数据校准的监督模型做最终排序。
- 实验验证:只测试最后 20-50 条序列。
这套架构能降低单一模型误差带来的风险,也更容易定位问题。比如生成结果不合格,先看是不是初筛条件太宽松;结构验证失败,再看是不是结构模型与生成模型不匹配。
7.2 实验数据要及时回流
AI 抗体设计项目里最容易犯的错误,是“模型训练一次,之后永远不再更新”。如果实验验证了 100 条序列,这 100 条结果应该作为新的监督信号回流到排序模型或生成模型中。即使只有几十条数据,也能显著改善排序模型在目标靶点上的表现。
工程实现上,建议建立统一的实验数据表,至少包含以下字段:
- 序列 ID
- 完整序列
- 目标抗原
- 是否结合
- 亲和力值(如果有)
- 表达量
- 稳定性指标
- 实验批次
持续积累下来的内部数据,往往比公开数据集更有价值,因为它们和你的实际研发管线高度一致。
7.3 建立内部基准集与阶段性评测
不要等到盲测这样的外部评测才评估模型。项目内部应该提前划分:
- 训练集:用于模型训练
- 验证集:用于超参数调优
- 测试集:用于最终效果评估
- 保留集:模拟真实盲测数据的未知靶点
在立项时就把“序列聚类去冗余”做好,避免跨集合泄漏。内部评测频率建议按版本管理,模型每迭代一版,都跑同一套基准集,记录性能变化趋势。
7.4 安全与合规边界
AI 设计抗体涉及生物医药领域,工程落地时需要注意:
- 所有序列生成和筛选行为应在合法授权范围内进行,尤其是涉及具体靶点、病原体或人体蛋白时。
- 涉及生产环境、临床前数据时,必须保证数据来源合法、脱敏、符合机构伦理要求。
- 计算模型只能作为辅助筛选工具,不能直接作为临床决策依据。
- 数据库、模型文件、训练数据的访问应有权限管理,防止核心资产泄露。
这些不是形式要求,而是项目能否长期推进的基本前提。
8. 总结与下一步学习路线
从这场 29 家机构、511 条序列的盲测中,可以看到 AI 抗体设计目前正处于一个“能生成、能优化、但还不能完全脱离湿实验验证”的阶段。计算工具已经能显著提高抗体发现的初始筛选效率,但从一条计算上合理的序列到真正可开发的先导分子,中间仍然需要大量实验筛选和数据回流。
对于刚进入这个方向的开发者,建议按以下路线逐步深入:
- 掌握抗体结构基础:尤其是可变区、框架区、CDR 区的作用。
- 熟悉常用序列工具:BioPython、ESM、HHblits。
- 理解结构预测工具:AlphaFold2、OpenFold 的用法与局限。
- 学习生成模型原理:扩散模型、GNN、语言模型在蛋白领域的适配方式。
- 做一个小型闭环项目:从公开数据集里选一个靶点,生成候选序列,用计算指标筛选,并对比已知阳性抗体。
AI 设计抗体不是“一键生成药物”的魔法,而是一套需要结合计算与实验、持续迭代的系统工程。下次再看到类似的盲测报告,希望你能从任务设计、指标定义、数据隔离、筛选策略这些维度,做出自己的判断。