药物相互作用预测¶
一句话说明¶
当患者同时服用多种药物时,一种药可能影响另一种药的代谢速度,导致疗效降低或毒性增加——药物相互作用预测就是用基因组和药理学数据来提前预警这些风险。
核心知识点¶
1. 药物相互作用(DDI)类型¶
- 药代动力学(PK)互作:一种药改变另一种药的吸收、分布、代谢或排泄
- CYP 抑制:药物A抑制CYP3A4 → 药物B代谢变慢 → 血浓度升高 → 中毒风险
- CYP 诱导:药物A诱导CYP3A4 → 药物B代谢加快 → 疗效降低
- 转运体互作:P-gp、OATP 等转运体的抑制/诱导
- 药效动力学(PD)互作:药物在靶点/通路层面的叠加或拮抗
- 协同:两药合用效果 > 各自效果之和
- 拮抗:两药合用效果 < 各自效果
- 白话:PK 互作是"一种药影响另一种药的浓度",PD 互作是"两种药在靶点上打架"
2. CYP 介导的 DDI 分级¶
| 分级 | 定义 | 示例 |
|---|---|---|
| 强抑制剂 | 使底物 AUC 升高 >=5 倍 | 酮康唑(CYP3A4) |
| 中抑制剂 | AUC 升高 2-5 倍 | 红霉素(CYP3A4) |
| 弱抑制剂 | AUC 升高 1.25-2 倍 | 柚子汁(CYP3A4) |
| 强诱导剂 | 使底物 AUC 降低 >=80% | 利福平(CYP3A4) |
3. 计算预测方法¶
- 基于规则的方法:查询已知 DDI 数据库(DrugBank、Drugs.com)
- 基于机制的方法:PBPK 模型(生理药代动力学模型)模拟代谢过程
- 机器学习方法:用药物分子特征、靶点网络等预测新的 DDI
- 网络药理学:构建药物-靶点-通路网络,分析重叠通路
4. 常用数据库和工具¶
| 资源 | 类型 | 特点 |
|---|---|---|
| DrugBank DDI | 数据库 | 已知 DDI 最全 |
| KEGG Drug | 数据库 | 代谢通路关联 |
| SuperCYP | 数据库 | CYP-药物关系 |
| DDInter | 数据库 | 中国团队,ML预测 |
| pkCSM | 工具 | ADMET 性质预测 |
| SimCYP | 软件 | PBPK 模拟 |
实战代码¶
# === 基于 CYP 代谢通路的 DDI 风险评估 ===
import pandas as pd # 数据处理
from itertools import combinations # 组合计算
# 1. 定义药物的 CYP 代谢关系
drug_cyp_profile = {
"氯吡格雷": {
"substrate": ["CYP2C19", "CYP3A4"], # 被这些酶代谢
"inhibitor": [], # 抑制哪些酶
"inducer": [], # 诱导哪些酶
"prodrug": True, # 是前药
},
"奥美拉唑": {
"substrate": ["CYP2C19", "CYP3A4"],
"inhibitor": ["CYP2C19"], # 抑制CYP2C19!
"inducer": [],
"prodrug": False,
},
"利福平": {
"substrate": [],
"inhibitor": [],
"inducer": ["CYP3A4", "CYP2C19", "CYP2C9"], # 强诱导剂
"prodrug": False,
},
"华法林": {
"substrate": ["CYP2C9", "CYP3A4"],
"inhibitor": [],
"inducer": [],
"prodrug": False,
},
"他莫昔芬": {
"substrate": ["CYP2D6", "CYP3A4"],
"inhibitor": [],
"inducer": [],
"prodrug": True, # 前药,需要CYP2D6激活
},
"帕罗西汀": {
"substrate": ["CYP2D6"],
"inhibitor": ["CYP2D6"], # 强效CYP2D6抑制剂
"inducer": [],
"prodrug": False,
},
}
def predict_ddi(drug_a, drug_b, profiles):
"""预测两种药物的相互作用风险"""
profile_a = profiles.get(drug_a)
profile_b = profiles.get(drug_b)
if not profile_a or not profile_b:
return []
warnings = [] # 预警列表
# 检查 A 是否抑制 B 的代谢酶
for enzyme in profile_a["inhibitor"]:
if enzyme in profile_b["substrate"]:
if profile_b["prodrug"]:
warnings.append(
f"⚠ {drug_a} 抑制 {enzyme},可能降低 {drug_b}(前药)的疗效"
)
else:
warnings.append(
f"⚠ {drug_a} 抑制 {enzyme},可能增加 {drug_b} 血浓度(中毒风险)"
)
# 检查 A 是否诱导 B 的代谢酶
for enzyme in profile_a["inducer"]:
if enzyme in profile_b["substrate"]:
if profile_b["prodrug"]:
warnings.append(
f"⚠ {drug_a} 诱导 {enzyme},可能增加 {drug_b}(前药)的活性代谢物"
)
else:
warnings.append(
f"⚠ {drug_a} 诱导 {enzyme},可能降低 {drug_b} 疗效"
)
# 反向检查(B 对 A 的影响)
for enzyme in profile_b["inhibitor"]:
if enzyme in profile_a["substrate"]:
if profile_a["prodrug"]:
warnings.append(
f"⚠ {drug_b} 抑制 {enzyme},可能降低 {drug_a}(前药)的疗效"
)
else:
warnings.append(
f"⚠ {drug_b} 抑制 {enzyme},可能增加 {drug_a} 血浓度"
)
for enzyme in profile_b["inducer"]:
if enzyme in profile_a["substrate"]:
if profile_a["prodrug"]:
warnings.append(
f"⚠ {drug_b} 诱导 {enzyme},可能增加 {drug_a}(前药)的活化"
)
else:
warnings.append(
f"⚠ {drug_b} 诱导 {enzyme},可能降低 {drug_a} 疗效"
)
return warnings
# 2. 批量检查药物组合
print("=== 药物相互作用风险评估 ===\n")
drugs = list(drug_cyp_profile.keys())
for drug_a, drug_b in combinations(drugs, 2): # 所有两两组合
warnings = predict_ddi(drug_a, drug_b, drug_cyp_profile)
if warnings:
print(f"【{drug_a} + {drug_b}】")
for w in warnings:
print(f" {w}")
print()
# === DrugBank DDI 数据查询 ===
import requests # HTTP请求
def query_drugbank_ddi(drug_name, api_key=None):
"""查询 DrugBank API 获取已知 DDI(需要 API 密钥)"""
# DrugBank API(需要订阅)
# 替代方案:使用 DrugBank 下载的 XML 离线查询
url = f"https://api.drugbank.com/v1/drugs"
headers = {"Authorization": f"Bearer {api_key}"} if api_key else {}
params = {"q": drug_name} # 搜索参数
# 注意:完整 API 需要商业许可
# 学术用途建议下载 XML 文件离线解析
print(f"查询 {drug_name} 的药物相互作用...")
print("提示:使用 DrugBank XML 文件进行离线查询更高效")
# === PGx + DDI 综合分析 ===
def integrated_pgx_ddi(patient_genotype, medications, profiles):
"""综合考虑患者基因型和用药的风险评估"""
print("=" * 60)
print(" 综合药物基因组 + 相互作用风险评估")
print("=" * 60)
# 1. PGx 风险(基因型影响)
print("\n【1. 药物基因组风险】")
for gene, phenotype in patient_genotype.items():
print(f" {gene}: {phenotype}")
# 2. DDI 风险(药物间互作)
print("\n【2. 药物相互作用风险】")
for drug_a, drug_b in combinations(medications, 2):
warnings = predict_ddi(drug_a, drug_b, profiles)
if warnings:
for w in warnings:
print(f" {w}")
# 3. PGx + DDI 叠加风险
print("\n【3. 叠加风险提示】")
# 例:CYP2D6 PM + CYP2D6 抑制剂 = 极高风险
if patient_genotype.get("CYP2D6") == "PM":
for drug in medications:
profile = profiles.get(drug, {})
if "CYP2D6" in profile.get("inhibitor", []):
print(f" ★ 高危:患者CYP2D6 PM + {drug}(CYP2D6抑制剂) → 无意义")
if "CYP2D6" in profile.get("substrate", []):
if profile.get("prodrug"):
print(f" ★ 高危:患者CYP2D6 PM + {drug}(前药) → 无法激活")
# 使用示例
# integrated_pgx_ddi(
# {"CYP2D6": "PM", "CYP2C19": "IM"},
# ["他莫昔芬", "帕罗西汀", "氯吡格雷"],
# drug_cyp_profile
# )
面试常问点¶
★ 举一个临床上重要的药物相互作用例子?¶
参考答案:最经典的是氯吡格雷+奥美拉唑。氯吡格雷是前药,需要 CYP2C19 代谢激活才能发挥抗血小板作用。奥美拉唑(治胃酸的药)是 CYP2C19 的抑制剂,两药合用时奥美拉唑会抑制氯吡格雷的激活,导致抗血小板效果减弱,心血管事件风险增加。如果患者基因型还是 CYP2C19 IM 或 PM,那就是"雪上加霜"。解决方案:换用不影响 CYP2C19 的质子泵抑制剂(如泮托拉唑),或者换抗血小板药(替格瑞洛不需要 CYP2C19 激活)。
★ PBPK 模型在 DDI 预测中的优势是什么?¶
参考答案:PBPK(生理药代动力学)模型将人体分成多个生理隔室(胃肠道、肝脏、血液等),用微分方程模拟药物在体内的吸收、分布、代谢和排泄全过程。优势:(1) 可以模拟不同 CYP 基因型下的药代动力学;(2) 可以预测多药合用的复杂互作(不只是两两比对);(3) FDA 已接受 PBPK 模型作为 DDI 评估的证据。缺点是模型构建需要大量药物参数,且需要专业软件(SimCYP、GastroPlus)。
速查卡片¶
| 问题 | 答案 |
|---|---|
| DDI 全称 | Drug-Drug Interaction |
| PK 互作 | 影响药物浓度(代谢) |
| PD 互作 | 影响药物效果(靶点) |
| 强CYP3A4抑制剂 | 酮康唑、伊曲康唑 |
| 强CYP3A4诱导剂 | 利福平 |
| 经典DDI案例 | 氯吡格雷+奥美拉唑 |
| 预测工具 | SimCYP (PBPK), pkCSM |
| DDI 数据库 | DrugBank, DDInter |
| 转运体互作 | P-gp, OATP |
| FDA DDI指南 | 体外/临床DDI评估要求 |