关于 protein-qc
Protein Design Quality Control 是用于评估和排序设计蛋白的技能,将结构、结合和表达检查组织为筛选与综合评分,并指出计算指标不能证明结合亲和力。
主要功能
- 01结构、结合和表达质量检查
- 02指标阈值与设计级风险扫描
- 03分阶段筛选和项目诊断
- 04使用综合评分排序设计
- 05设计项目的失败恢复指导
适用场景
- 01实验测试前筛选设计蛋白
- 02结合多项质量指标排列候选项
- 03诊断设计项目的低通过率
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ adaptyvbio/ protein-design-skills --skill protein-qc安装后在 Claude Code 中输入/protein-qc确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/binding-qc.mdcomposite-scoring.mdexpression-qc.mdstructural-qc.md详细介绍
蛋白质设计质量控制
关键局限
单项指标对结合的预测能力较弱。研究表明:
- 单项指标 ROC AUC:0.64-0.66(仅略优于随机)
- 指标是预筛选过滤条件,而非亲和力预测指标
- 组合评分对于有意义的排序至关重要
这些阈值可以筛除较差的设计,但不能预测结合亲和力。
QC 组织方式
QC 按用途和层级组织:
| 用途 | 评估内容 | 关键指标 |
|---|---|---|
| 结合 | 界面质量、结合几何结构 | ipTM、PAE、SC、dG、dSASA |
| 表达 | 可制造性、溶解度 | 不稳定性、GRAVY、pI、半胱氨酸 |
| 结构 | 折叠置信度、一致性 | pLDDT、pTM、scRMSD |
每个类别分为两个层级:
- 指标层级:计算所得数值及阈值(pLDDT > 0.85)
- 设计层级:模式/基序检测(奇数个半胱氨酸、NG 位点)
快速参考:所有阈值
| 类别 | 指标 | 标准 | 严格 | 来源 |
|---|---|---|---|---|
| 结构 | pLDDT | > 0.85 | > 0.90 | AF2/Chai/Boltz |
| pTM | > 0.70 | > 0.80 | AF2/Chai/Boltz | |
| scRMSD | < 2.0 Å | < 1.5 Å | 设计与预测 | |
| 结合 | ipSAE_min | > 0.61 | > 0.70 | AF3/Boltz(参见 ipsae) |
| ipTM | > 0.50 | > 0.60 | AF2/Chai/Boltz | |
| PAE_interaction | < 12 Å | < 10 Å | AF2/Chai/Boltz | |
| 形状互补度(SC) | > 0.50 | > 0.62 | PyRosetta | |
| interface_dG | < -10 | < -15 | PyRosetta | |
| 界面 BUNS | <= 4 | <= 2 | PyRosetta | |
| 表达 | 不稳定性 | < 40 | < 30 | BioPython |
| GRAVY | < 0.4 | < 0.2 | BioPython | |
| ESM2 PLL | > 0.0 | > 0.2 | ESM2 | |
| 折叠 ΔG | < -2 kcal/mol | < -4 kcal/mol | SaProtΔG |
设计层级检查(表达)
| 模式 | 风险 | 操作 |
|---|---|---|
| 奇数个半胱氨酸 | 未配对的二硫键 | 重新设计 |
| NG/NS/NT 基序 | 脱酰胺 | 标记/避免 |
| 连续 >= 3 个 K/R | 蛋白水解 | 标记 |
| 连续 >= 6 个疏水残基 | 聚集 | 重新设计 |
参见:references/binding-qc.md、references/expression-qc.md、references/structural-qc.md
界面指标(PyRosetta)
除了形状互补度和 interface_dG 外,两项界面指标还能检测常见的从头设计失败模式:
- 埋藏但未满足的氢键(BUNS):埋藏的极性原子未形成氢键。 这是主要的能量学失败模式,与 dG 和 dSASA 正交。界面 BUNS 应保持在 4 以下或等于 4(标准),或 2 以下或等于 2(严格)。
- ContactMolecularSurface:按形状互补度加权的接触面积,与 dSASA 不同,它不会被存在间隙或孔洞的界面误导。数值越高越好。
这两项指标均包含在 Cao 2022、AlphaProteo 和 BindCraft 的过滤条件中。
在结构质量排序方面,biomodals 还提供 modal_af2rank.py(AF2Rank),用于评估设计以自身结构作为模板时,能否重新预测出该结构。
结合体排序(有基准测试支持)
一项针对 15 个靶标、3,766 个经实验测试结合体的元分析(Overath 等人,bioRxiv 2025,doi:10.1101/2025.08.14.670059)发现,AF3 ipSAE_min 是最佳的单一计算机模拟结合预测指标;由三个特征组成的简单线性模型在不同靶标间的泛化能力最佳。提高复杂度并无帮助:梯度提升模型和使用多个特征的模型都未能胜过线性模型。
该研究推荐的过滤策略:
- 使用以下任一条件进行阈值筛选:
AF3 ipSAE_min > 0.61,或ipSAE_min × interface_ΔG/ΔSASA < -1.5,或LIS × shape_complementarity > 0.42。 - 先按
shape_complementarity > 0.62和RMSD_binder < 3.73(输入结构与重新预测结构对比)预筛选,再按ipSAE_min选取排名靠前的 K 个。
ipSAE_min 是两个非对称 ipSAE 方向(结合体→靶标和靶标→结合体)中的较小值,不是平均值或最大值。使用 ipsae skill 计算该值。请注意,RMSD_binder 筛选条件对某些靶标可能过于严格,因此最好将其作为软性预筛选条件,而非硬性阈值。
稳定性预测(小型结构域)
对于小型结构域(约 60 到 80 个残基,即迷你结合蛋白的范围),可以直接预测绝对折叠稳定性。SaProtΔG(Cho 等人,bioRxiv 2026,doi:10.64898/2026.05.19.726285)预测绝对折叠 ΔG 的 RMSE 约为 0.8 kcal/mol,并能更好地区分稳定与不稳定的设计蛋白。在商业项目中,请使用 SaProt 变体,而不是 ESM3 变体,因为 ESM3 权重仅限非商业用途。筛选 ΔG 更负(更稳定)的设计。
序列负担扫描
直接将负担检查实现为基序规则,而不是依赖特定于抗体的依赖项。有结构时,根据溶剂暴露程度调整严重程度(通过 SASA 进行筛选)。
import re
LIABILITIES = {
"deamidation": (r"N[GSNTH]", "NG/NS high, NN/NT moderate"),
"isomerization": (r"D[GSTDH]", "Asp isomerization"),
"N-glycosylation": (r"N[^P][ST]", "NxS/T sequon"),
"polybasic": (r"[KR]{3,}", "proteolysis / charge patch"),
"hydrophobic_run": (r"[AILMFWVY]{6,}", "aggregation"),
}
def scan_liabilities(seq):
hits = {}
for name, (pattern, note) in LIABILITIES.items():
positions = [m.start() for m in re.finditer(pattern, seq)]
if positions:
hits[name] = (positions, note)
# Unpaired cysteine check
if seq.count("C") % 2 == 1:
hits["unpaired_cysteine"] = ([seq.index("C")], "odd cysteine count")
return hits
Met 和 Trp 氧化也是负担,但只有在残基暴露于溶剂时才应标记。
顺序筛选流水线
import pandas as pd
designs = pd.read_csv('designs.csv')
# Stage 1: Structural confidence
designs = designs[designs['pLDDT'] > 0.85]
# Stage 2: Self-consistency
designs = designs[designs['scRMSD'] < 2.0]
# Stage 3: Binding quality
designs = designs[(designs['ipTM'] > 0.5) & (designs['PAE_interaction'] < 10)]
# Stage 4: Sequence plausibility
designs = designs[designs['esm2_pll_normalized'] > 0.0]
# Stage 5: Expression checks (design-level)
designs = designs[designs['cysteine_count'] % 2 == 0] # Even cysteines
designs = designs[designs['instability_index'] < 40]
综合评分(排名必需)
单项指标的表现都不够好。请使用综合评分:
def composite_score(row):
return (
0.30 * row['pLDDT'] +
0.20 * row['ipTM'] +
0.20 * (1 - row['PAE_interaction'] / 20) +
0.15 * row['shape_complementarity'] +
0.15 * row['esm2_pll_normalized']
)
designs['score'] = designs.apply(composite_score, axis=1)
top_designs = designs.nlargest(100, 'score')
高级综合评分请参阅 references/composite-scoring.md。
特定工具的筛选
BindCraft 筛选级别
| 级别 | 用例 | 严格程度 |
|---|---|---|
| Default | 标准设计 | 最严格 |
| Relaxed | 需要更多设计 | 失败率较高 |
| Peptide | < 30 AA 的设计 | 成功率低约 5-10 倍 |
BoltzGen 筛选
boltzgen run ... \
--budget 60 \
--alpha 0.01 \
--filter_biased true \
--refolding_rmsd_threshold 2.0 \
--additional_filters 'ALA_fraction<0.3'
alpha=0.0:仅按质量排名alpha=0.01:默认值(轻微考虑多样性)alpha=1.0:仅按多样性排名
设计级严重程度评分
对于基于模式的检查,请使用严重程度评分:
| 严重程度 | 分数 | 操作 |
|---|---|---|
| LOW | 0-15 | 继续 |
| MODERATE | 16-35 | 审查标记的问题 |
| HIGH | 36-60 | 建议重新设计 |
| CRITICAL | 61+ | 必须重新设计 |
实验相关性
| 指标 | AUC | 用途 |
|---|---|---|
| ipTM | ~0.64 | 预筛选 |
| PAE | ~0.65 | 预筛选 |
| ESM2 PLL | ~0.72 | 最佳单项指标 |
| Composite | ~0.75+ | 务必使用 |
关键见解:这些指标适合作为筛选器(排除失败设计),而非预测指标(对成功设计排名)。
项目健康状况评估
快速评估设计项目:
| 通过率 | 状态 | 说明 |
|---|---|---|
| > 15% | Excellent | 高于平均水平,继续 |
| 10-15% | Good | 正常,继续 |
| 5-10% | Marginal | 低于平均水平,检查问题 |
| < 5% | Poor | 存在重大问题,进行诊断 |
故障恢复树
通过 pLDDT 筛选的设计过少(pLDDT > 0.85 的比例 < 5%)
Low pLDDT across campaign
├── Check scRMSD distribution
│ ├── High scRMSD (>2.5Å): Backbone issue
│ │ └── Fix: Regenerate backbones with lower noise_scale (0.5-0.8)
│ └── Low scRMSD but low pLDDT: Disordered regions
│ └── Fix: Check design length, simplify topology
├── Try more sequences per backbone
│ └── modal run modal_ligandmpnn.py --input-pdb bb.pdb --params-str "--number_of_batches 32 --temperature 0.1"
├── Use SolubleMPNN instead of ProteinMPNN
│ └── Better for expression-optimized sequences
└── Consider different design tool
└── BindCraft (integrated design) may work better
通过 ipTM 筛选的设计过少(ipTM > 0.5 的比例 < 5%)
Low ipTM across campaign
├── Review hotspot selection
│ ├── Are hotspots surface-exposed? (SASA > 20Ų)
│ ├── Are hotspots conserved? (check MSA)
│ └── Try 3-6 different hotspot combinations
├── Increase binder length (more contact area)
│ └── Try 80-100 AA instead of 60-80 AA
├── Check interface geometry
│ ├── Is target flat? → Try helical binders
│ └── Is target concave? → Try smaller binders
└── Try all-atom design tool
└── BoltzGen (all-atom, better packing)
scRMSD 偏高(scRMSD > 2.0Å 的比例 > 50%)
Sequences don't specify intended structure
├── ProteinMPNN issue
│ ├── Lower temperature: --sampling_temp "0.1"
│ ├── Increase sequences: --num_seq_per_target 32
│ └── Check fixed_positions aren't over-constraining
├── Backbone geometry issue
│ ├── Backbones may be unusual/strained
│ ├── Regenerate with lower noise_scale (0.5-0.8)
│ └── Reduce diffuser.T to 30-40
└── Try different sequence design
└── ColabDesign (AF2 gradient-based) may work better
所有设计均通过,但没有实验命中
In silico metrics don't predict affinity
├── Generate MORE designs (10x current)
│ └── Computational metrics have high false positive rate
├── Increase diversity
│ ├── Higher ProteinMPNN temperature (0.2-0.3)
│ ├── Different backbone topologies
│ └── Different hotspot combinations
├── Try different design approach
│ ├── BindCraft (different algorithm)
│ ├── ColabDesign (AF2 hallucination)
│ └── BoltzGen (all-atom diffusion)
└── Check if target is druggable
└── Some targets are inherently difficult
通过的设计过多(> 50%)
Suspiciously high pass rate
├── Check if thresholds are too lenient
│ └── Use stringent thresholds: pLDDT > 0.90, ipTM > 0.60
├── Verify prediction quality
│ ├── Are predictions actually running? Check output files
│ └── Are complexes being predicted, not just monomers?
├── Check for data issues
│ ├── Same sequence being predicted multiple times?
│ └── Wrong FASTA format (missing chain separator)?
└── Apply diversity filter
└── Cluster at 70% identity, take top per cluster
诊断命令
快速项目评估
import pandas as pd
df = pd.read_csv('designs.csv')
# Pass rates at each stage
print(f"Total designs: {len(df)}")
print(f"pLDDT > 0.85: {(df['pLDDT'] > 0.85).mean():.1%}")
print(f"ipTM > 0.50: {(df['ipTM'] > 0.50).mean():.1%}")
print(f"scRMSD < 2.0: {(df['scRMSD'] < 2.0).mean():.1%}")
print(f"All filters: {((df['pLDDT'] > 0.85) & (df['ipTM'] > 0.5) & (df['scRMSD'] < 2.0)).mean():.1%}")
# Identify top issue
if (df['pLDDT'] > 0.85).mean() < 0.1:
print("ISSUE: Low pLDDT - check backbone or sequence quality")
elif (df['ipTM'] > 0.50).mean() < 0.1:
print("ISSUE: Low ipTM - check hotspots or interface geometry")
elif (df['scRMSD'] < 2.0).mean() < 0.5:
print("ISSUE: High scRMSD - sequences don't specify backbone")