指标速查
表中判断线均来自官方文档或原始论文。标为“无”的指标没有官方阈值,不要套用其他指标的阈值。
pLDDT 分段的依据:在近期 PDB 测试集上,pLDDT>90 的残基 χ1 侧链角约 80% 正确;pLDDT>70 对应主链基本正确。把 1 − 0.01×pLDDT 当作无序预测器,在 CAID 基准上 AUC 为 0.897(Tunyasuvunakool 等,2021)。
AF3 的 pLDDT 按原子计算。配体原子只计算它与聚合物之间的距离误差;蛋白使用 15 Å 半径,DNA/RNA 使用 30 Å 半径。因此配体 pLDDT 与蛋白残基 pLDDT 不能放在同一尺度上比较。
AF3 的总 iptm 是所有界面的平均。开发者在 GitHub issue #565 中确认:只关心一个界面时,应看 chain_pair_iptm 中对应的元素。
| 指标 | 衡量什么 | 取值 | 判断线 | 出处 |
|---|---|---|---|---|
| pLDDT | 残基(AF3 为原子)周围局部距离的预测准确度,基于 lDDT-Cα | 0–100,越高越好 | >90 主链和侧链较准确;70–90 主链基本正确;50–70 低;<50 很低,长片段读作无序 | AF2 人类蛋白组论文;EBI 课程;AF3 output.md |
| PAE | 用残基 i 的局部框架对齐后,残基 j 位置的预期误差 | Å,越低越好;矩阵不对称 | 无统一阈值;链间区块成片低值表示相对位置可信 | AF3 output.md;EBI 课程 |
| pTM | 整个结构的预测 TM-score | 0–1 | >0.5 表示整体折叠可能接近真实结构;少于 20 个 token 时被压到 <0.05 | AF3 output.md |
| ipTM | 链间相对位置的预测 TM-score,对所有界面取平均 | 0–1 | >0.8 高置信;<0.6 多为失败;0.6–0.8 灰区 | AF3 output.md;issue #565 |
| ranking_score | AF3 的排序分 | −100 到 1.5 | 无;只用于同一任务内排序 | AF3 output.md |
| chain_pair_iptm | 只统计链 i 与链 j 的 ipTM;对角线为单链 pTM | 0–1 矩阵 | 沿用 ipTM 判断线;已知两链互作时用它给该界面排序 | AF3 output.md |
| chain_iptm | 某条链与其余所有链界面的平均 ipTM | 0–1 | 无;配体或不知道结合哪条链时用它排序 | AF3 output.md;issue #418 |
| chain_pair_pae_min | 链 i 的行与链 j 的列范围内的最小 PAE | Å | 无;官方称其与两链是否互作相关,部分情况下能区分结合与不结合 | AF3 output.md |
| fraction_disordered | 按可及表面积估计的无序比例 | 0–1 | 无;在 ranking_score 中权重为 +0.5 | AF3 output.md |
| has_clash | 冲突原子超过某条链的 50%,或某条链冲突原子超过 100 个 | 0 或 1 | 为 1 时 ranking_score 减 100,该模型弃用 | AF3 output.md |
| contact_probs | 两个 token 代表原子距离 <8 Å 的预测概率 | 0–1 矩阵 | 无 | AF3 output.md |
输出文件
四种常用工具的文件名和“最佳模型”的排序规则各不相同。拿到结果先确认自己看的是不是排名第一的模型。
ColabFold 的 scores JSON 中 iptm、ptm 只保留两位小数。需要更多位数时,log.txt 中给出三位有效数字,或加 --save-all 保存原始 pickle。
AF2 单体的 ranked_0.pdb 按平均 pLDDT 排序,不按 pTM。ColabFold 单体同样按 pLDDT 排序。比较“最佳模型”之前,先确认几个工具用的是同一个排序指标。
| 工具 | 文件 | 内容 | 说明 |
|---|---|---|---|
| AF3 本地版 | <job>_model.cif | 排名第一的结构,B-factor 列为每个原子的 pLDDT | 所有 seed × sample 中 ranking_score 最高者 |
| AF3 本地版 | <job>_summary_confidences.json | ptm、iptm、ranking_score、chain_pair_iptm、chain_pair_pae_min、chain_iptm、chain_ptm、fraction_disordered、has_clash、chain_ids | 判断与排序看这个文件。本页实测(AF3 仓库 2026-10-09 版本):chain_ids 是逐 token 的链 ID 列表,长度等于 token 数;Server 下载包的 summary 中没有 chain_ids |
| AF3 本地版 | <job>_confidences.json | pae、atom_plddts、contact_probs、token_chain_ids、token_res_ids、atom_chain_ids | 画 PAE 图用 |
| AF3 本地版 | <job>_ranking_scores.csv | 每个 seed、sample 的 ranking_score | 看 seed 之间差多少 |
| AF3 本地版 | seed-<s>_sample-<n>/ | 每个样本一套 cif 与两个 JSON | 默认每个 seed 5 个样本 |
| AF3 本地版 | <job>_data.json | 加入 MSA 与模板后的输入 | 加 --run_data_pipeline=false 可直接复用,换 seed 时跳过 MSA 搜索 |
| AlphaFold Server | fold_<job>_model_<N>.cif | N=0–4,0 为排名第一 | 每个任务 1 个 seed、5 个模型 |
| AlphaFold Server | fold_<job>_summary_confidences_<N>.json / fold_<job>_full_data_<N>.json | 字段同本地版 summary_confidences / confidences | full_data 含 PAE 矩阵 |
| AlphaFold Server | fold_<job>_job_request.json | 提交参数 | 可改 seed 后重新提交 |
| AF2 官方 | ranked_0.pdb | 最佳模型 | 单体按平均 pLDDT 排序;multimer 按 0.8·ipTM + 0.2·pTM 排序 |
| AF2 官方 | ranking_debug.json | 排序分与模型名对应 | 键名为 plddts(单体)或 iptm+ptm(multimer) |
| AF2 官方 | result_model_*.pkl | plddt、ptm、iptm、predicted_aligned_error 等原始输出 | multimer 默认每个模型 5 个 seed,共 25 个预测 |
| ColabFold 1.6.3 | <job>_unrelaxed_rank_001_alphafold2_multimer_v3_model_<m>_seed_<s>.pdb | rank_001 为最佳;B-factor 列为 pLDDT | 复合物默认按 80·ipTM + 20·pTM 排序,单体按 pLDDT |
| ColabFold 1.6.3 | <job>_relaxed_rank_001_….pdb | Amber 优化后的结构 | 只在加 --amber 时生成 |
| ColabFold 1.6.3 | <job>_scores_rank_00X_….json | plddt、pae、max_pae、ptm、iptm;复合物另有 ipsae、pdockq、pdockq2,三者按链对存成字典,例如 "ipsae": {"A-B": 0.78, "B-A": 0.87},A-B 表示以 A 链对齐、评估 B 链,log.txt 中显示两个方向的较大值 | 加 --calc-extra-ptm 时另有 actifptm、pairwise_iptm、pairwise_actifptm、per_chain_ptm |
| ColabFold 1.6.3 | <job>_predicted_aligned_error_v1.json | 排名第一模型的 PAE,AlphaFold DB 格式 | 可直接被 ChimeraX 读取 |
| ColabFold 1.6.3 | log.txt、<job>_pae.png、<job>_plddt.png、<job>_coverage.png、config.json、<job>.a3m、<job>_ext_metrics.png(加 --calc-extra-ptm 时) | 每个模型的指标、前 5 个模型的图、MSA 覆盖度、运行参数、MSA | ipTM 偏低时先看 coverage.png 的 MSA 深度 |
PAE 图
- 01
确认坐标含义
AF3 的定义:矩阵元素 (i, j) 是用 token i 的局部框架对齐后,token j 的位置误差。行是对齐所用的残基,列是被评估的残基。矩阵不对称,A→B 和 B→A 两个链间区块要分别看。
- 02
忽略对角线
对角线是残基与自身对齐,恒为低值,不提供信息。
- 03
看链内区块
一条链内出现两个低值方块、方块之间为高值,说明两个结构域各自可信,但相对朝向不可信。此时即使每个结构域的 pLDDT 都高于 90,也不能讨论结构域之间的相对位置。
- 04
看链间区块
界面所在的行和列出现成片低值,说明模型对这部分界面的相对位置有把握。整个链间区块都是高值时,链间相对位置基本没有约束,结构图上两条链贴在一起也不能当作互作证据。
- 05
与 pLDDT 对照
低 pLDDT 的无序片段通常 PAE 也高。界面两侧残基 pLDDT 高、且链间 PAE 低时,才值得逐个分析界面残基。
互作判断
- 01
排除冲突模型
AF3 先看 has_clash,为 1 直接弃用。AF2 和 ColabFold 没有这个字段,需要在结构中检查链是否相互穿插。
- 02
看目标链对的 chain_pair_iptm
二聚体看 ipTM,多链复合物看 chain_pair_iptm 中对应的元素。>0.8 进入下一步;<0.6 视为没有预测出互作;0.6–0.8 需要后面几步的证据补充。
- 03
看链间 PAE
chain_pair_pae_min 只反映最好的那一对残基。还要统计链间 PAE 低于 10 Å 的残基对数量(下文脚本输出的 pairs<10A 列),只有少数几对低值时,界面证据很弱。
- 04
看界面残基 pLDDT
界面两侧残基 pLDDT ≥70 才讨论哪些残基接触;讨论盐桥、氢键等侧链相互作用需要 pLDDT>90。
- 05
检查多个 seed 是否一致
至少跑 5 个 seed:AF3 本地在 modelSeeds 中写 5 个值;AlphaFold Server 每个任务只有 1 个 seed,需改 seed 后多次提交;ColabFold 加 --num-seeds 5。比较排名靠前的模型结合位点是否相同,可用 DockQ 以一个模型为参考评估另一个模型。
- 06
补充非聚合物上下文
天然复合物中有金属离子、辅因子或配体时,把它们加进 AF3 输入。AF3 开发者在 issue #142 和 #474 中说明置信度依赖这些上下文,缺少时可能整体偏低。
- 07
做阴性对照
用相同参数预测目标蛋白与一个已知不互作的蛋白,或与打乱顺序(氨基酸组成不变)的肽。对照组的分数就是本体系的背景。Dunbrack 2025 的基准中,真、假二聚体的 ipTM 与 ipSAE 分布在 0.3–0.7 之间重叠,只看单个分数无法区分。
ipTM 的局限
长无序区或附加结构域:ipTM 对整条链取平均,d0 按全部链长计算,不参与结合的残基会拉低分数。Dunbrack 2025 的 KRAS–RAF1 RBD 例子中,只含结构域时 ipTM 为 0.9;两条链各加 120 个无序残基后,AF2 的 ipTM 降到 0.59,界面本身没有变化,ipSAE 为 0.8。截短到结构域能提高 ipTM,但截短后的高分只说明截短构建体的界面。
短链和短肽:少于 20 个 token 时 pTM 被压到 0.05 以下,官方建议改看 PAE 和 pLDDT。肽两端的柔性侧翼同样会拉低 ipTM,actifpTM 就是为这种情形设计的。
大复合物:总 iptm 混合了所有界面,某一对链的好坏会被其他链稀释或掩盖。看单个界面用 chain_pair_iptm,看配体用 chain_iptm。
pTM、ipTM 由 PAE 的概率分布计算,JSON 里保存的 PAE 只是期望值,不能据此精确重算 ipTM(ColabFold issue #194)。下表的替代指标都是基于 PAE 期望值或 pLDDT 的近似。
| 指标 | 计算方式 | 适用情形 | 判断线 | 来源 |
|---|---|---|---|---|
| ipSAE | 只统计链间 PAE 低于阈值的残基对,d0 按这些残基数计算,按方向取最大值 | 有无序区或附加结构域的蛋白互作、结构域–肽互作 | 论文未给通用阈值;建议 PAE 阈值 10 或 15 Å | Dunbrack 2025;ColabFold 1.6.3 内置 |
| pDockQ | 界面平均 pLDDT × log10(界面接触数) 经 sigmoid 映射为预测 DockQ;接触为 Cβ 距离 ≤8 Å | AF2 异源二聚体 | 区分可接受模型(DockQ≥0.23)的 AUC 为 0.95;SpeedPPI 默认以 0.5 作为保存结构的阈值;不适用于同源多聚体等链重叠情形 | Bryant 2022;FoldDock、SpeedPPI |
| pDockQ2 | 结合界面 pLDDT 与界面 PAE,逐链对计算 | 多链复合物中的单个界面 | 本文未核实通用阈值 | Zhu 2023;ColabFold 1.6.3 内置 |
| actifpTM | 只对实际参与界面的残基计算 ipTM | 肽、带柔性侧翼的基序介导互作 | 无 | Varga 2025;ColabFold --calc-extra-ptm |
| LIS / iLIS | 链间 PAE ≤12 Å 区域的平均置信度;iLIS 再加 Cβ ≤8 Å 接触过滤 | 大规模 PPI 筛选、柔性互作 | iLIS ≥0.223;或 LIS ≥0.203 且 LIA ≥3432 | Kim 2024、2026;AFM-LIS |
常见误读
把 pLDDT 或 ipTM 当作结合强度
这些指标的训练目标是结构误差(lDDT、TM-score),不含亲和力信息。Pak 等 2023 发现 AlphaFold 输出指标与单点突变引起的稳定性变化几乎不相关。比较结合强弱需要对接打分、自由能计算或实验测定。
低 pLDDT 区域就是预测错了
pLDDT<50 的长片段在 AF2 中呈带状,含义是“单独存在时可能无序”。人类蛋白组论文还发现,低 pLDDT 集中在与其他链接触比例高的区域:把结合伙伴加入预测后,这些区域的 pLDDT 可能上升。
高 pLDDT 就一定有稳定结构
只在结合时折叠的无序区,AF2 倾向于以高 pLDDT 预测成折叠态(EBI 课程)。AF3 是扩散模型,会在无序区生成规则结构;这些区域通常 pLDDT 很低,但不像 AF2 那样呈带状,看结构图时容易误认为有结构。
pTM 高说明界面对
pTM 对全部残基计算,大蛋白预测准确时会主导分数,小伙伴放错位置 pTM 仍可能较高。界面看 ipTM 或 chain_pair_iptm。
跨任务比较 ranking_score
ranking_score 含 +0.5·fraction_disordered 和 −100·has_clash 两项,官方说明它只用于排序。不同构建体、不同伙伴之间比较应使用 chain_pair_iptm 等指标。
多个 seed 结果不一致时挑最好的报告
不同 seed 给出不同结合位点,说明模型对界面没有把握。AF3 论文中,抗体–抗原复合物的预测随 seed 数增加持续改善(到 1000 个 seed),其他类别一般没有这种提升。抗体体系可以多跑 seed 再按 ipTM 排序;其他体系 seed 之间不一致时,应报告为不确定。seed 之间一致也只说明结果稳定:开发者在 issue #142 中强调置信度与准确度是相关关系。
代码
同一个脚本支持 AF3 本地版、AlphaFold Server 和 ColabFold,只依赖 numpy 和 matplotlib。脚本输出每条链的平均 pLDDT、各链对的最小与平均 PAE、PAE 低于阈值的残基对数,以及 summary 中的指标。
热图中的黑线是链边界。行是对齐所用的 token,列是被评估的 token,与 AF3 文档对 pae[i][j] 的定义一致。AF3 中配体的每个原子是一个 token,所以配体在图上占的行数等于重原子数。
#!/usr/bin/env python3
"""读取 AlphaFold 3 / AlphaFold Server / ColabFold 的置信度 JSON,输出链对指标并画 PAE 热图。
AlphaFold 3 本地版: python af_pae.py job_confidences.json --summary job_summary_confidences.json
AlphaFold Server: python af_pae.py fold_job_full_data_0.json --summary fold_job_summary_confidences_0.json
ColabFold: python af_pae.py job_scores_rank_001_xxx.json --lengths 110,89
"""
import argparse
import json
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
def segments(ids):
"""把逐 token 的链 ID 切成 [(链, 起点, 终点)],终点不含。"""
segs, start = [], 0
for i in range(1, len(ids) + 1):
if i == len(ids) or ids[i] != ids[start]:
segs.append((ids[start], start, i))
start = i
return segs
def main():
ap = argparse.ArgumentParser()
ap.add_argument("conf", help="含 pae 矩阵的 JSON")
ap.add_argument("--summary", help="AF3 的 summary_confidences JSON")
ap.add_argument("--lengths", help="ColabFold 用:各链长度,逗号分隔")
ap.add_argument("--cutoff", type=float, default=10.0, help="统计界面用的 PAE 阈值 (Å)")
ap.add_argument("--out", default="pae.png")
args = ap.parse_args()
with open(args.conf) as f:
d = json.load(f)
pae = np.asarray(d.get("pae", d.get("predicted_aligned_error")), dtype=float)
n = pae.shape[0]
if "token_chain_ids" in d: # AF3 本地版与 AlphaFold Server
chain_of_token = d["token_chain_ids"]
elif args.lengths: # ColabFold:scores JSON 不含链 ID
lens = [int(x) for x in args.lengths.split(",")]
if sum(lens) != n:
raise SystemExit(f"--lengths 之和 {sum(lens)} 与 PAE 维度 {n} 不一致")
chain_of_token = [chr(65 + k) for k, m in enumerate(lens) for _ in range(m)]
else:
chain_of_token = ["A"] * n
segs = segments(chain_of_token)
# 每条链的平均 pLDDT
if "atom_plddts" in d and "atom_chain_ids" in d: # AF3:逐原子
pl = np.asarray(d["atom_plddts"])
ids = np.asarray(d["atom_chain_ids"])
for c in dict.fromkeys(d["atom_chain_ids"]):
print(f"chain {c}: mean pLDDT (atoms) = {pl[ids == c].mean():.1f}")
elif "plddt" in d: # ColabFold:逐残基
pl = np.asarray(d["plddt"])
for c, s, e in segs:
print(f"chain {c}: mean pLDDT (residues) = {pl[s:e].mean():.1f}")
# 链对 PAE 统计:行 = 对齐所用的链,列 = 被评估的链
print(f"\naligned scored min_PAE mean_PAE pairs<{args.cutoff:g}A")
for ci, si, ei in segs:
for cj, sj, ej in segs:
if ci == cj:
continue
b = pae[si:ei, sj:ej]
print(f"{ci:>7} {cj:>6} {b.min():8.2f} {b.mean():9.2f} {int((b < args.cutoff).sum()):10d}")
# 汇总指标
for key in ("ptm", "iptm", "ipsae", "pdockq", "pdockq2", "actifptm"):
if key in d:
print(f"{key}: {d[key]}")
if args.summary:
with open(args.summary) as f:
s = json.load(f)
for key in ("ptm", "iptm", "ranking_score", "fraction_disordered", "has_clash"):
print(f"{key}: {s.get(key)}")
# AF3 本地版的 chain_ids 是逐 token 的列表,Server 版没有该字段;去重后得到链顺序
cids = list(dict.fromkeys(s.get("chain_ids") or [])) or [c for c, _, _ in segs]
for key in ("chain_pair_iptm", "chain_pair_pae_min"):
if key in s:
print(f"\n{key} (rows/cols = {cids})")
for c, row in zip(cids, s[key]):
print(c, " ".join(" nan" if v is None else f"{v:5.2f}" for v in row))
# PAE 热图
fig, ax = plt.subplots(figsize=(6, 5), dpi=200)
im = ax.imshow(pae, cmap="Greens_r", vmin=0, vmax=30)
for _, s, _ in segs[1:]:
ax.axhline(s - 0.5, color="black", lw=0.8)
ax.axvline(s - 0.5, color="black", lw=0.8)
ax.set_xlabel("Scored token")
ax.set_ylabel("Aligned token")
fig.colorbar(im, ax=ax, label="Expected position error (A)")
fig.tight_layout()
fig.savefig(args.out)
print(f"\nsaved {args.out}")
if __name__ == "__main__":
main()# 只需要 numpy 和 matplotlib
pip install numpy matplotlib
# AlphaFold 3 本地版(排名第一的模型)
python af_pae.py myjob/myjob_confidences.json --summary myjob/myjob_summary_confidences.json --out myjob_pae.png
# AlphaFold Server(解压后,N=0 为排名第一)
python af_pae.py fold_myjob_full_data_0.json --summary fold_myjob_summary_confidences_0.json --out pae_0.png
# ColabFold:scores JSON 不含链信息,用 --lengths 按顺序给出各链长度
python af_pae.py out/barnase_barstar_scores_rank_001_*.json --lengths 110,89 --out pae_rank1.png可视化
AF2、ColabFold 的 PDB 文件和 AF3 的 mmCIF 文件都把 pLDDT 写在 B-factor 列,AF3 为逐原子数值。pLDDT 越高越可信,与晶体学 B 因子的方向相反,用模型做分子置换前要先转换。
ChimeraX 默认使用连续配色,与 AlphaFold DB 的四段配色不同。ChimeraX 文档不推荐四段配色,因为 pLDDT 为 71 和 69 的残基会显示成差别很大的颜色。
load fold_myjob_model_0.cif, m
hide everything, m
show cartoon, m
# B-factor 列即 pLDDT。按 AlphaFold DB 的四段配色:<=50 橙、50-70 黄、70-90 浅蓝、>90 深蓝
color 0xFF7D45, m
color 0xFFDB13, m and b > 50
color 0x65CBF3, m and b > 70
color 0x0053D6, m and b > 90
# 连续配色(可选):50 以下全红,90 以上全蓝
# spectrum b, red_yellow_green_cyan_blue, m, minimum=50, maximum=90
# 界面残基:与对方链任意原子距离 5 A 以内
select ifA, byres ((m and chain A) within 5 of (m and chain B))
select ifB, byres ((m and chain B) within 5 of (m and chain A))
select iface, ifA or ifB
show sticks, iface and not name N+C+O
# 打印界面残基的 pLDDT(取 CA 原子)
iterate iface and name CA, print(chain, resi, resn, round(b, 1))
# 另存为 PDB
save model_0.pdb, mopen fold_myjob_model_0.cif
# ChimeraX 默认的 pLDDT 连续配色
color bfactor #1 palette alphafold
# 读入 PAE:AF3 的 full_data / confidences JSON、ColabFold 的 scores JSON 都可直接读
alphafold pae #1 file fold_myjob_full_data_0.json plot true
# 把 A、B 链之间距离 <=4 A 且 PAE <=5 A 的残基对画成伪键
alphafold contacts #1/A toAtoms #1/B distance 4 maxPae 5
# 按 PAE 聚类出刚性结构域并着色(默认 connectMaxPae 5 A)
alphafold pae #1 colorDomains truepip install gemmi
# --shorten 把链名缩到 1-2 个字符;配体用了 5 字符单体名时再加 --shorten-tlc
gemmi convert --shorten fold_myjob_model_0.cif model_0.pdb示例
选有实验结构的体系,可以用 DockQ 把置信度指标与真实误差放在一起看,校准自己对阈值的判断。barnase–barstar 的实验结构为 PDB 1BRS。
1BRS 的一个不对称单元含 3 套复合物(A–D、B–E、C–F),barstar 为 C40A/C82A 突变体,上面的序列与 1BRS 一致。--mapping AB:AD 指定模型 A、B 链分别对应 1BRS 的 A、D 链。
DockQ 分级:<0.23 错误,0.23–0.49 可接受,0.49–0.80 中等,≥0.80 高质量。把 25 个模型的 ipTM、ipSAE 与 DockQ 列成一张表,可以直接看到高 ipTM 的模型 DockQ 是否也高。再检查 barnase Arg59、His102 是否出现在模型界面上。
ColabFold 默认把序列发送到公共 MMseqs2 服务器生成 MSA。复合物默认 --pair-mode unpaired_paired,同时使用配对和未配对的 MSA;来自不同物种、缺少共进化信号的蛋白对,配对 MSA 很浅,ipTM 往往偏低,可先看 coverage.png。
本页实测(2026-10-10):ColabFold 1.6.3,macOS arm64 8 核 CPU(无 GPU),公共 MMseqs2 服务器生成 MSA,参数为 --num-models 5 --num-seeds 1 --calc-extra-ptm(只跑 5 个模型,未加 --amber)。每个模型在第 1 次 recycle 后即达到提前停止条件(tol 0.285 < 0.5),单个模型约 10–12 分钟(运行时本机还有其他任务占用 CPU;第一个模型含 JAX 编译,用时约 59 分钟),5 个模型共约 105 分钟。DockQ 2 用上面的 --mapping AB:AD 命令计算。
5 个模型都是高质量(DockQ ≥ 0.80),ipTM 只相差 0.004,排名第一的模型 DockQ 反而最低、排名第五的最高。分数都很高、差值很小时,排名先后不代表结构准确度的先后。PyMOL 按上一节命令选出的界面包含 barnase Arg59(pLDDT 97.1)和 His102(pLDDT 98.8)。scores JSON 中排名第一模型的 iptm 存为 0.92,log.txt 中为 0.919。
作为对照,本页用同一份 ColabFold MSA 在本机以 AF3 本地版(CPU 后端,1 个 seed × 5 个样本)预测同一复合物:ipTM 0.93–0.94,chain_pair_pae_min 0.78–0.79 Å,DockQ 0.97–0.98,5 个样本都高于 ColabFold 的最好模型。
cat > barnase_barstar.fasta <<'EOF'
>barnase_barstar
AQVINTFDGVADYLQTYHKLPDNYITKSEAQALGWVASKGNLADVAPGKSIGGDIFSNREGKLPGKSGRTWREADINYTSGFRNSDRILYSSDWLIYKTTDHYQTFTKIR:KKAVINGEQIRSISDLHQTLKKELALPEYYGENLDALWDALTGWVEYPLVLEWRQFEQSKQLTENGAESVLQVFREAKAEGADITIILS
EOF
# 5 个模型 x 5 个 seed = 25 个预测;复合物默认按 80*ipTM + 20*pTM 排序
colabfold_batch --num-models 5 --num-seeds 5 --calc-extra-ptm \
--amber --num-relax 1 --use-gpu-relax \
barnase_barstar.fasta out/
# 汇总 25 个模型的 ipTM、pTM、ipSAE、pDockQ2(1.6.3 起 scores JSON 自带后两项)
# ipsae、pdockq2 按链对存成字典(A-B、B-A),这里取较大值,与 log.txt 一致
python - <<'PY'
import glob, json
for f in sorted(glob.glob("out/barnase_barstar_scores_rank_*.json")):
s = json.load(open(f))
rank = f.split("_scores_")[1].split("_alphafold2")[0]
mx = lambda v: max(v.values()) if isinstance(v, dict) and v else v
print(rank, s.get("iptm"), s.get("ptm"), mx(s.get("ipsae")), mx(s.get("pdockq2")))
PY
# 与实验结构 1BRS 对比:模型 A、B 链对应 1BRS 的 A(barnase)、D(barstar)链
wget https://files.rcsb.org/download/1BRS.pdb
pip install DockQ
for f in out/barnase_barstar_unrelaxed_rank_*.pdb; do
DockQ "$f" 1BRS.pdb --mapping AB:AD --short | tail -1
done| 排名 | 模型 | ipTM | pTM | ipSAE(较大方向) | pDockQ | pDockQ2(较大方向) | DockQ(对 1BRS A/D) |
|---|---|---|---|---|---|---|---|
| rank_001 | model_3 | 0.919 | 0.930 | 0.869 | 0.462 | 0.925 | 0.845 |
| rank_002 | model_4 | 0.917 | 0.930 | 0.866 | 0.481 | 0.915 | 0.875 |
| rank_003 | model_1 | 0.917 | 0.929 | 0.865 | 0.488 | 0.911 | 0.883 |
| rank_004 | model_2 | 0.915 | 0.929 | 0.863 | 0.490 | 0.915 | 0.877 |
| rank_005 | model_5 | 0.915 | 0.928 | 0.862 | 0.477 | 0.908 | 0.901 |
中文教程
以下问题在多篇中文教程中出现,按官方文档给出更正。
配色方向与 AlphaFold DB 相反
常见写法 spectrum b, blue_white_red,以及 color_b.py 的 gradient=bgr(作者注明 pLDDT 从低到高依次为蓝、绿、红),都把高 pLDDT 显示为红色。这沿用的是晶体学 B 因子“红色表示柔性”的习惯,与 AlphaFold DB 的“深蓝表示高置信”相反,读者会把最可信的区域看成最不可信的区域。color_b.py 的 mode=ramp 让每个颜色段包含相同数目的原子,分段边界随结构变化,不同模型中的同一颜色对应不同的 pLDDT。论文图用固定阈值着色(“可视化”一节的四段配色,或 spectrum 加 minimum=50, maximum=90)并附色标。
按 pLDDT 选原子要写 b
PyMOL 中 pLDDT 存在 B 因子列,没有单独的 pLDDT 属性。选出低置信区域写 select low, m and b < 50;写成 plddt < 50 之类的表达式会报选择语法错误。
Server 下载包里没有 ranked_0.cif
有教程写“解压后找 ranked_0.cif”。ranked_0 是 AF2 本地版的文件名;AlphaFold Server 下载包中排名第一的结构是 fold_<job>_model_0.cif,AF3 本地版是 <job>_model.cif。
chain_ptm 不反映界面
有教程把 chain_ptm 解释为某条链与其他链界面的置信度,并认为 chain_pair_iptm 与 chain_pair_pae_min 含义相近。AF3 output.md 的定义是:chain_ptm 为限定在第 i 条链内的 pTM,只反映该链自身折叠;界面看 chain_iptm 或 chain_pair_iptm;chain_pair_pae_min 是 PAE 的最小值,单位为 Å,与 ipTM 不在同一尺度上。
两种界面 PAE 过滤值的算法不同
蛋白 binder 设计论文常用两种值。pae_interaction 取两个链间区块(A→B、B→A)各自均值,再求平均;Bennett 等 2023 以 AF2 的 pae_interaction < 10 作为筛选条件。min PAE interaction 取两个链间区块最小值中的较小者,AF3 summary_confidences.json 中 chain_pair_pae_min 的非对角元素就是各区块最小值,可直接读取(中文经验帖示例 [[0.76, 1.29], [1.4, 0.76]] 取 1.29)。这些阈值是在从头设计的 binder 上标定的,用于天然蛋白互作前没有同样的校准,仍按“互作判断”一节的多指标流程判断。
交给 Agent
指令示例:“用 ColabFold 预测 barnase–barstar 复合物,5 个模型 × 5 个 seed,与 PDB 1BRS 对比,报告每个模型的 ipTM、pTM、ipSAE、pDockQ2、链间 PAE 和 DockQ,检查 barnase Arg59、His102 是否在界面上。”
- 01
准备环境
租用 GPU,选择生物信息环境并运行环境自检。
- 02
运行预测
写出 FASTA 和运行脚本,执行 colabfold_batch,保留 log.txt 与 config.json。
- 03
汇总与对比
用本文脚本统计每个模型的指标并画 PAE 图,下载 1BRS 运行 DockQ,生成指标汇总表。
- 04
对抗审阅
检查 25 个模型是否都被评估、DockQ 的链映射是否正确、报告中的数值是否与 JSON 一致,然后释放算力。
- 产出:FASTA、运行命令、全部模型、scores JSON、PAE 与 pLDDT 图、指标汇总表、DockQ 结果、分析报告
- 仍需自己核对:链与实验结构的对应关系
- 仍需自己核对:界面残基是否与文献报道一致
- 仍需自己核对:报告中把预测写成结论的措辞
写论文
审稿人能据此复现并判断可信度的最小信息如下。
- 方法:软件与版本(如 ColabFold 1.6.3、AlphaFold 3 v3.0.1)、模型权重(如 alphafold2_multimer_v3)、MSA 来源(MMseqs2 服务器或本地数据库及版本)、是否使用模板、seed 数 × 模型或样本数、recycle 数、是否 Amber 优化、排序指标
- 选用的模型及理由:rank_001 或 ranking_score 最高,还是按 chain_pair_iptm 重新排序
- 数值表:每个报告模型的 pTM、ipTM(多链给目标链对的 chain_pair_iptm)、各链平均 pLDDT、界面残基平均 pLDDT;有无序区时加 ipSAE(注明 PAE 阈值)或 pDockQ2
- 多 seed 分布:全部模型 ipTM 的中位数和范围,或排名前 5 的模型之间结合位点是否一致
- 图:按 pLDDT 着色的结构(附色标);PAE 热图,标出链边界,色标单位为 Å,色标范围在各图之间保持一致
- 有实验结构时:DockQ 或界面 RMSD
- 数据:模型坐标与置信度 JSON 放入补充材料,或提交到 ModelArchive,每个模型会获得可在论文中引用的 DOI
参考资料
- AlphaFold 3 输出文档 output.md — 文件结构、各指标定义、ipTM 与 pTM 判断线、ranking_score 公式
- Abramson et al. 2024, Nature(AlphaFold 3) — 幻觉、手性违例率、抗体–抗原多 seed 结果
- Tunyasuvunakool et al. 2021, Nature(人类蛋白组) — pLDDT 分段依据、无序预测 AUC
- AlphaFold 2 README — AF2 输出文件、ranked_0 排序规则、B-factor 中的 pLDDT
- ColabFold 1.6.3 发布说明 — ipSAE 与 pDockQ2 输出
- ColabFold batch.py(v1.6.3) — 输出文件命名、排序规则、命令行参数
- EBI AlphaFold 培训课程 — pLDDT 与 PAE 解读、AlphaFold Server 输出文件
- Dunbrack 2025, ipSAE(bioRxiv) — ipTM 被无序区稀释的问题与 ipSAE
- DunbrackLab/IPSAE — ipSAE 脚本与 PAE 阈值示例
- Bryant et al. 2022, Nature Communications(pDockQ) — pDockQ 定义
- FoldDock README — pDockQ 参数、AUC 0.95、同源多聚体限制
- Varga et al. 2025, Bioinformatics(actifpTM) — 柔性侧翼下的界面置信度
- AFM-LIS — LIS 与 iLIS 定义和阈值
- Pak et al. 2023, PLoS One — AlphaFold 指标与突变稳定性变化不相关
- AlphaFold 3 issue #492 — Server 与本地 ipTM 差异源于 MSA(开发者复现)
- AlphaFold 3 issue #385 — 不同遗传数据库下 ipTM 的变化
- AlphaFold 3 issue #142、#474 — 置信度依赖配体与离子上下文(开发者回复)
- AlphaFold 3 issue #565、#418 — iptm 与 chain_pair_iptm、chain_iptm 的关系
- AlphaFold 3 issue #606 — 经验帖:用打乱序列的肽做阴性对照
- ColabFold issue #194 — 经验帖:ipTM 不能由 PAE 期望值精确重算
- ChimeraX alphafold 命令文档 — alphafold pae、alphafold contacts 用法与 pLDDT 配色
- gemmi 命令行文档 — gemmi convert 的 --shorten 选项
- DockQ — DockQ 分级与链映射
- ModelArchive — 计算模型存档与 DOI
- CSDN:PyMOL 中使用 AlphaFold 的 pLDDT 对蛋白进行染色 — 经验帖:color_b.py 的 bgr 配色与 ramp 分段
- CSDN:蛋白质复合物结构预测与互作位点可视化(AlphaFold + PyMOL) — 经验帖:spectrum b, blue_white_red 与 ranked_0.cif 的写法
- CSDN:AF3 结构解读 — 经验帖:pae_interaction 与 min PAE interaction 的算法、chain_pair_pae_min 示例
- Bennett et al. 2023, Nature Communications — binder 设计中以 AF2 pae_interaction < 10 筛选