跳转至

药物相互作用预测


一句话说明

当患者同时服用多种药物时,一种药可能影响另一种药的代谢速度,导致疗效降低或毒性增加——药物相互作用预测就是用基因组和药理学数据来提前预警这些风险。


核心知识点

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评估要求