365

CDR Loop 建模:抗体可变区为什么最难预测

CDR-H3 是抗体结构预测中最难的部分。这篇讲清难在哪、典型构象的概念,以及处理 H3 不确定性的实际策略。

抗体的六个 CDR 中,五个可以按「典型构象」相对可靠地预测,唯独 CDR-H3 不行。理解这个例外,是理解抗体建模全部难点的钥匙。

典型构象(canonical structures)的概念

Chothia 等人发现,除 H3 外的五个 CDR 环只采取有限几种主链构象,且构象由环长度 + 少数关键位置的残基决定:

  • 这些环的两端被框架区固定,长度较短;
  • 某些关键残基(如脯氨酸、甘氨酸、能形成氢键的残基)决定了环的折叠方式;
  • 因此可以建立「长度 + 关键残基 → 构象类别」的规则,查表即可预测。

CDR-H3 为什么是例外

因素 说明
长度变化极大 3~25 残基(人类抗体常见 8~20),远超其他 CDR
由 V(D)J 重组产生 包含 D 基因片段与随机的 N 区插入,序列多样性最高
位于结合位点中心 受两侧框架约束最少,构象自由度最大
无明确的构象分类 长 H3 尤其如此,难以归类
诱导契合明显 结合抗原时构象可能显著改变

「扭结(kink)」是 H3 的一个已知结构特征:H3 基部(靠近框架的部分)常有一个特征性的扭转,由保守残基(如 Arg94、Asp101,Kabat 编号)间的相互作用稳定。基部相对可预测,而顶端(apex)的构象几乎无法可靠预测

H3 的分区处理

# 实际分析中把 H3 分成两部分处理
#
#   基部(torso/base):靠近框架的几个残基
#     - 有扭结/伸展两种主要构象
#     - 可按序列特征预测(保守的 Arg-Asp 相互作用)
#     - 预测相对可靠
#
#   顶端(apex/head):环的中间部分
#     - 高度可变
#     - 常直接接触抗原
#     - 预测不可靠
#
# 含义:即使整体 RMSD 看着还行,
#      真正接触抗原的顶端部分可能完全不对

评估预测的 H3 是否可信

from Bio.PDB import PDBParser
import numpy as np

def assess_h3_confidence(pdb_path, h3_start, h3_end, chain="H"):
    """从预测结构中提取 H3 区域的置信度"""
    parser = PDBParser(QUIET=True)
    st = parser.get_structure("ab", pdb_path)

    # IgFold 把预测 RMSD 存在 B-factor;AF 系存 pLDDT
    h3_vals, fw_vals = [], []
    for res in st[0][chain]:
        if "CA" not in res:
            continue
        v = res["CA"].get_bfactor()
        if h3_start <= res.id[1] <= h3_end:
            h3_vals.append(v)
        else:
            fw_vals.append(v)

    return {
        "h3_mean": float(np.mean(h3_vals)) if h3_vals else None,
        "framework_mean": float(np.mean(fw_vals)) if fw_vals else None,
        "h3_length": len(h3_vals),
    }

# 经验规律:
#   H3 长度 < 10   → 预测相对可靠
#   H3 长度 10~15  → 中等
#   H3 长度 > 15   → 预测很可能不准,需实验结构

# 多模型一致性检验(更可靠)
def h3_ensemble_agreement(pdb_paths, h3_range, chain="H"):
    """多个模型/多次预测的 H3 是否收敛"""
    from Bio.PDB import Superimposer
    # 先按框架区叠合,再比较 H3 的 RMSD
    # 若不同模型的 H3 差异 > 2 Å,说明该 H3 预测不可信
    pass

多模型一致性是判断 H3 可信度最实用的方法:用 IgFold、ABodyBuilder、AlphaFold 各预测一遍,按框架区叠合后比较 H3 的差异。差异大就说明这个 H3 预测不可靠。

处理 H3 不确定性的策略

  • 用构象系综而非单一结构:既然 H3 构象不确定,就生成多个可能构象,后续分析(如对接)在系综上做。
  • 优先用实验结构:如果有该抗体或高度同源抗体的晶体/冷冻电镜结构,直接用。
  • 直接预测复合物:用 AF-Multimer 或 Boltz 预测抗体-抗原复合物(见 344《用 Boltz 或 Chai-1 预测蛋白-配体复合物》371《抗体-抗原对接与表位预测》),让模型在抗原存在下确定 H3 构象——这通常比先预测游离抗体再对接更合理,因为诱导契合被自然地纳入了。
  • 限制分析深度:H3 不可靠时,不要做残基级的相互作用分析;可以做的是整体表面性质、电荷分布这类对局部构象不敏感的分析。
  • 用序列层面的方法:亲和力成熟等任务可以用蛋白语言模型(见 194《ESM》)在序列层面做,绕开结构不确定性。

H3 长度的生物学含义

H3 长度 常见特征
短(< 10) 结合位点较平坦,适合大表位(蛋白抗原)
中(10~16) 最常见
长(> 16) 可深入凹陷表位(如病毒的保守口袋);但可能带来可开发性问题

牛源抗体有极长的 H3(可达 60 残基),形成独特的「柄-结」结构——这是抗体工程中一个有趣的天然方案。

H3 相关的可开发性风险

# 长 H3 与某些序列特征关联着可开发性问题

RISKY_MOTIFS = {
    "deamidation": ["NG", "NS", "NT"],      # 脱酰胺(NG 风险最高)
    "isomerization": ["DG", "DS", "DT"],    # 异构化
    "oxidation": ["M", "W"],                 # 氧化
    "glycosylation": ["NxS", "NxT"],         # 非预期糖基化位点
    "cleavage": ["DP"],                      # 酸性条件下断裂
}

def scan_liabilities(cdr_seq, region_name="CDR-H3"):
    found = []
    for risk, motifs in RISKY_MOTIFS.items():
        for m in motifs:
            if "x" in m:
                continue     # 需正则处理
            idx = cdr_seq.find(m)
            if idx >= 0:
                found.append({"region": region_name, "risk": risk,
                              "motif": m, "position": idx})
    return found

# CDR 中的化学不稳定位点风险最高 ——
# 因为它们直接影响结合,一旦修饰就可能失活

关键要点

  • 五个 CDR 有典型构象可查表预测,H3 因 V(D)J 重组产生而无法归类
  • H3 基部相对可预测,顶端(直接接触抗原的部分)最不可靠
  • 用多模型一致性判断 H3 可信度;H3 长度 > 15 时预测很可能不准;
  • 需要界面分析时,直接预测抗体-抗原复合物比先建模再对接更合理。

延伸资源