关于 tooluniverse-protein-lof-mechanism
面向单个错义变异的蛋白质功能丧失机制分析技能,整合致病性、结构、序列、SAE 特征和稳定性信号,推断可能受损的分子机制。
主要功能
- 01整合五类计算信号
- 02评估致病性与结构环境
- 03比较突变前后序列似然
- 04识别受损生物学特征
- 05估算蛋白质稳定性
- 06按证据评估机制可信度
适用场景
- 01分析已知有害错义变异的机制
- 02为药物挽救策略提供机制依据
- 03区分修复蛋白与替换蛋白的思路
- 04撰写临床机制说明
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mims-harvard/ tooluniverse --skill tooluniverse-protein-lof-mechanism安装后在 Claude Code 中输入/tooluniverse-protein-lof-mechanism确认已加载。
详细介绍
蛋白质 LoF 机制综合分析
对于单个错义变异,综合 5 种独立的计算信号,提出具体的功能丧失机制。每种信号回答不同的问题:
| 信号 | 工具 | 回答的问题 |
|---|---|---|
| 致病性 | AlphaMissense_get_variant_score | “这个变异是否有害?” |
| 结构背景 | alphafold_get_prediction | “突变位于折叠区域还是无序区域?” |
| 序列似然 | ESM_score_sequence | “这种氨基酸替换在进化上是否合理?” |
| 特征破坏 | ESM_explain_variant_mechanism(或使用 ESM_score_variant_sae_disruption + ESM_describe_sae_feature 进行原始控制) | “哪个生物学特征受到破坏?” |
| 稳定性 | DynaMut2_predict_stability | “蛋白质还能否正确折叠?” |
何时使用此技能
适用于错义(编码区)变异,且满足以下条件:
- 你已有证据表明该变异有害(或想确认这一点)
- 你需要从分子层面了解该变异有害的原因
- 后续工作取决于机制:药物挽救策略需要了解受损之处,基因治疗决策需要区分“修复蛋白质”与“替换蛋白质”,临床报告需要描述机制
不适用于(请改用其他技能):
- 非编码区/调控区变异 →
tooluniverse-variant-to-mechanism - ACMG 致病性分类 →
tooluniverse-variant-interpretation - 仅分析 SAE 特征破坏(不进行完整综合分析)→
tooluniverse-protein-sae-variant-interpretation - 癌症特异性驱动变异 →
tooluniverse-cancer-variant-interpretation
必需输入
| 输入 | 格式 | 示例 |
|---|---|---|
| 变异 ID | {accession}_{ref_aa}{position}{alt_aa} | P04637_R175H |
| 或:UniProt 登录号 + 变异字符串 | 登录号 + 参考/位置/替代氨基酸 | P04637、R175H |
| 或:基因符号 + 变异 | HGNC 符号 + 参考/位置/替代氨基酸 | TP53、R175H |
解析变异字符串:
import re
m = re.match(r"([A-Z])(\d+)([A-Z])", variant_str)
ref_aa, position, alt_aa = m.group(1), int(m.group(2)), m.group(3)
前提条件
- SAE 信号需要 ESM_API_KEY 环境变量(https://forge.evolutionaryscale.ai)
- 支持 SAE 的 esm 包:
pip install 'esm @ git+https://github.com/evolutionaryscale/esm@ee891c52' - 访问 AlphaMissense、AlphaFold、UniProt、DynaMut2 需要互联网连接(均为托管端点,这些服务均无需 API 密钥)
工作流
步骤 0:解析登录号 + 获取规范序列
如果用户提供了基因符号:
UniProt_search(
query="gene:TP53 AND organism_id:9606 AND reviewed:true",
fields=["accession"],
)
# → P04637
获取规范序列:
UniProt_get_sequence_by_accession(accession="P04637")
验证参考残基:
assert sequence[position - 1] == ref_aa, "Wrong sequence or wrong isoform"
步骤 1:AlphaMissense 致病性
AlphaMissense_get_variant_score(
uniprot_id="P04637",
position=175,
ref_aa="R",
alt_aa="H",
)
# → returns score 0..1; ≥0.564 is the "likely pathogenic" threshold per the
# AlphaMissense paper. Above 0.9 is very confident damaging.
如果 AlphaMissense 判定为良性(≤0.34),其余分析仅供探索参考——大多数良性变异都没有明确的 LoF 机制。
步骤 2:AlphaFold 结构背景
alphafold_get_prediction(uniprot_id="P04637")
# → returns structure data including per-residue pLDDT
检查突变位置的 pLDDT:
- pLDDT > 70 → 折叠良好的区域;变异位于结构区域,结构/功能破坏具有意义
- pLDDT 50-70 → 灵活/部分折叠区域;结果存在歧义
- pLDDT < 50 → 无序区域;SAE/稳定性信号可能不可靠
步骤 3:ESMC 序列似然
ESM_score_sequence(
sequence=ref_sequence,
model="esmc-600m-2024-12", # or 300m for cheaper
)
# Then for the mutant sequence:
ESM_score_sequence(
sequence=mutant_sequence,
model="esmc-600m-2024-12",
)
计算位置窗口内的 ΔlogP = mean_logP(mutant) − mean_logP(reference):
- ΔlogP < −1 → 突变在进化上不合理(功能代价的强信号)
- ΔlogP ≈ 0 → 突变较为保守,或位于可容忍的位置
- ΔlogP > 0 的情况很少见,通常是噪声
步骤 4:SAE 特征破坏(独特信号)
推荐——一次调用(组合工具,返回破坏情况、类别标签和摘要):
ESM_explain_variant_mechanism(
sequence=ref_sequence,
position=175,
ref_aa="R",
alt_aa="H",
window=8,
top_k_features=5,
)
# data["mechanism_summary"] e.g.:
# "Disrupted feature categories (lost): catalytic=2, ligand-binding=1"
# data["lost_feature_categories"] / data["gained_feature_categories"] give the raw counts
# data["top_features_lost"] / data["top_features_gained"] include per-feature deltas + categories
较低层级的替代方案(仅在需要标注前获取原始 feature_ids 时使用,例如在调用 describe 前筛选某个类别):
ESM_score_variant_sae_disruption(
sequence=ref_sequence, position=175, ref_aa="R", alt_aa="H",
window=8, top_k_features=10,
)
# Then for each kept feature:
ESM_describe_sae_feature(feature_id=feat["feature_id"])
# → returns category: catalytic | ligand-binding | ptm | domain |
# motif | structural-stability | secondary-structure |
# transmembrane | signal-peptide | propeptide | uncategorized
主要损失特征所属类别 = 最可能受到破坏的功能。
步骤 5:DynaMut2 稳定性(ΔΔG)
DynaMut2 需要 PDB 结构。有两种选择:
选项 A — 如果有该蛋白的 PDB ID,请使用:
# Look up PDB cross-references from UniProt entry
UniProt_get_entry_by_accession(accession="P04637")
# → check `uniProtKBCrossReferences` for entries with database == "PDB"
# → pick a structure that covers the mutation position
DynaMut2_predict_stability(
pdb_id="2FEJ", # example TP53 DNA-binding domain crystal structure
chain="A",
mutation="R175H",
)
# → returns ddG in kcal/mol
选项 B — 如果没有覆盖该位置的实验 PDB 结构,请使用 AlphaFold 模型(步骤 2 的输出)。DynaMut2 也能以相同方式接受 AlphaFold PDB 文件。
步骤 6:综合判断 — 确定 LoF 机制类别
应用上游的 variant_lof_mechanism 决策规则:
| 信号模式 | 推断机制 |
|---|---|
| ddG > +1 kcal/mol 且 ΔlogP < 0 | 结构稳定性 LoF — 突变会降低折叠稳定性;蛋白质可能错误折叠或被降解。药物挽救策略:药理伴侣、复折叠剂。 |
| ddG ≈ 0(在 [-0.5, +1] 范围内)且 丢失的 SAE 特征为催化特征 | 直接催化 LoF — 蛋白质正常折叠,但活性位点已受损。策略:底物类似物或补充辅因子。 |
| ddG ≈ 0 且 丢失的 SAE 特征为配体结合特征 | 结合 LoF — 折叠结构得以保留,但结合口袋受到破坏。策略:使用小分子恢复功能。 |
| ddG ≈ 0 且 丢失的 SAE 特征为 PTM 特征 | PTM LoF — 调控位点(磷酸化 / 糖基化 / 泛素化)受损。机制:调控失常,而非直接丧失活性。 |
| ddG ≈ 0 且 丢失的 SAE 特征为结构域 / 基序特征 | 界面 LoF — 蛋白质相互作用界面受到影响。策略:恢复 PPI。 |
| ddG > 0 + AlphaMissense 判定为致病 + ΔlogP < 0,但没有明确的 SAE 信号 | 一般有害突变 — 明显有害,但机制不明确。通过实验检测进一步调查。 |
步骤 7:如实评估证据
报告前,对综合判断进行评分:
| 置信度 | 信号要求 |
|---|---|
| 高 | ≥4 个信号指向相同结论(例如,AlphaMissense 判定为致病 + ΔlogP 较低 + ddG > +1 + SAE 特征丢失) |
| 中 | 2–3 个信号一致,但至少 1 个信号无法得出明确结论 |
| 低 | 信号相互矛盾(例如,AlphaMissense 判定为致病,但 SAE 未显示具体类别)— 标记为需要实验跟进 |
报告格式
Variant: {VARIANT_ID} e.g. P04637_R175H = TP53 R175H
EVIDENCE LAYERS
1. AlphaMissense: {score:.3f} ({pathogenic|ambiguous|benign})
2. AlphaFold pLDDT: {plddt:.1f} ({well-folded|flexible|disordered})
3. ESMC ΔlogP: {dlogp:+.3f} ({implausible|tolerated})
4. SAE feature loss: top 3 features lost, dominant category = {category}
Feature {f1.id}: Δ={f1.delta:+.3f}, category={cat1}
Feature {f2.id}: Δ={f2.delta:+.3f}, category={cat2}
Feature {f3.id}: Δ={f3.delta:+.3f}, category={cat3}
5. DynaMut2 ΔΔG: {ddg:+.2f} kcal/mol ({destabilizing|neutral|stabilizing})
PROPOSED MECHANISM: {one of the 6 categories from Step 6}
SUPPORTING LOGIC: {one paragraph synthesizing the signals}
CONFIDENCE: {high|medium|low}
LIMITATIONS: {any signals that conflicted, missing data, low pLDDT, etc.}
如实说明局限性
- 仅适用于错义变异。 插入缺失、无义和剪接变异需要使用其他工作流。
- 仅使用单一异构体。 使用 UniProt 标准异构体。非标准异构体中的变异可能不适用。
- SAE 标签是推断得出的,并非经过整理验证。
ESM_describe_sae_feature标签是基于一个包含 10 种蛋白质的面板进行的尽力汇总;某些特征仍会显示为“未分类”,但激活值较高 — 应将此解读标记为低置信度。 - DynaMut2 需要 PDB。 如果没有 PDB 结构覆盖突变位置,且 AlphaFold 置信度较低(pLDDT < 50),则稳定性信号不可靠。
- 未能捕捉远距离变构效应。 SAE 窗口为 ±8 个残基。有些突变会通过远距离效应破坏蛋白质功能(例如,调节二聚化界面)— 仅靠 SAE 无法检测到。
- 综合判断决策规则为启发式规则。 步骤 6 中的 6 类映射是一个合理的起点,而非临床金标准。对于高风险解读,应将该规则视为有待实验验证的假设。
- SAE 输出采用非商业许可(依据 EvolutionaryScale Cambrian License)。
可选:高级用户(配备 GPU)可使用 ThermoMPNN 替代 DynaMut2
DynaMut2 是推荐的默认选择 — 它已通过托管学术 API(澳大利亚昆士兰大学 BioSig 实验室)接入 TU,无需任何额外设置。不过,如果你需要使用较新的 ThermoMPNN 模型(Dieckhaus 等人,PNAS 2024)以获得更高准确度,可以选择以下方案:
本地安装(你有 GPU 且希望完全掌控)
git clone https://github.com/Kuhlman-Lab/ThermoMPNN.git
cd ThermoMPNN
# Install conda env from environment.yaml — note the GitHub README warns
# the .yaml may install CPU-only PyTorch by mistake; verify GPU PyTorch
conda env create -f environment.yaml
conda activate ThermoMPNN
# The checkpoint thermoMPNN_default.pt ships in models/
python custom_inference.py --pdb <your.pdb> --mutation <e.g. R175H>
要求:配备 CUDA 11.8 的 NVIDIA GPU;一次性设置约需 15 分钟。
许可:MIT(无商业限制)。
引用:Dieckhaus 等人(2024)。Transfer learning to leverage larger datasets for improved prediction of protein stability changes. PNAS 121(6):e2314853121. doi:10.1073/pnas.2314853121.
托管式 SaaS(无需 GPU,但需要注册并提供 API 密钥)
多个商业平台托管了 ThermoMPNN,并提供免费套餐(具体额度各不相同,且不一定有文档说明):
- Tamarind Bio — REST API 地址为
app.tamarind.bio/api/,使用x-api-key进行身份验证 - Neurosnap — 基于额度,提供 HTTP API
- BioLM —
POST /api/v3/thermompnn/predict/,使用 Token 进行身份验证 - ProteinIQ — 以 Web 为主
- Levitate Bio — REST API
这些都是商业 SaaS——“免费套餐”通常意味着“试用几次后就要付费”。它们不像 DynaMut2 那样提供纯学术用途的免费接口,因此 TU 默认使用 DynaMut2。
ThermoMPNN 在哪些情况下确实优于 DynaMut2
对于 LoF 机制分类(本技能的使用场景),驱动综合判断的是 ddG > +1 与 ddG ≈ 0 之间的二元区别。对于明确的情况,这两个模型都能正确给出这一信号。ThermoMPNN 相较于 DynaMut2 的优势:
- 在阈值附近能更准确地预测 ΔΔG(例如,可靠地区分 +0.5 和 +1.2)
- 支持双突变(ThermoMPNN-D)
- 支持插入/缺失变体(ThermoMPNN-I)
如果你的工作依赖上述任何一项,请改用 ThermoMPNN。否则,对于本技能中的 LoF 机制判断,DynaMut2 已足够。