第05期 ⭐⭐⭐ 进阶

药物虚拟筛选入门

使用RDKit、DiffDock、ChEMBL、DeepChem进行AI辅助药物发现

📚 学习时间: 约20分钟

⚠️
免责声明: 本内容仅供科研学习参考,不作为药物研发依据。 虚拟筛选结果需经湿实验验证,不可直接用于临床应用。
🎯

技能简介

药物虚拟筛选是现代药物发现的核心环节。传统流程需要学习AutoDock等复杂软件, 准备配体和蛋白结构,手动运行对接,筛选1000个化合物需要1个月

本教程教你使用四大AI药物发现工具—— ChEMBL(活性数据库)、RDKit(分子操作)、DiffDock(AI对接)、DeepChem(深度学习预测), 通过Scientific Skills MCP自动化完成从化合物库检索到候选分子筛选的全流程。 将筛选时间从1个月缩短至1小时

1个月
传统虚拟筛选
1小时
AI辅助筛选
700倍
效率提升

💡 使用场景

💊

先导化合物发现

从已知活性化合物出发,筛选结构类似物,发现潜在先导化合物

🎯

靶点药物重定位

寻找已批准药物的新适应症,加速药物研发进程

🧪

构效关系分析

分析分子结构与生物活性的关系,指导化合物优化

🔬

ADMET性质预测

提前预测药物吸收、分布、代谢、排泄和毒性,降低失败率

🛠️ 核心技能调用

通过Scientific Skills MCP,可以一键调用四大药物发现工具:

📊 ChEMBL Database - 活性化合物检索

从ChEMBL生物活性数据库检索已知活性化合物,获取SMILES结构、活性数据(IC50/Ki)和文献来源。

# 调用 ChEMBL Database 技能
# scientific-skills:chembl-database

# 示例:检索EGFR抑制剂
chembl_query(
    target = "EGFR",
    activity_type = "IC50",
    max_activity = 100,  # IC50 < 100 nM
    format = "SMILES",
    include_refs = True
)

# 返回结果包含:
# - 化合物SMILES字符串
# - IC50/Ki活性值
# - 检测方法(Binding assay, Functional assay)
# - 文献DOI和靶点信息
⚗️ RDKit - 分子描述符计算

使用RDKit进行分子操作,计算理化性质描述符,进行构效关系分析。

# 调用 RDKit 技能
# scientific-skills:rdkit

# 计算分子描述符
rdkit_descriptors(
    smiles_list = [
        "CC(C)C1=CC=C(C=C1)NC(=O)C2=CC=CC=C2",
        "CN1C=NC2=C1C(=O)N(C(=O)N2C)C"
    ],
    descriptors = [
        "MolWt",      # 分子量
        "LogP",       # 亲脂性
        "NumHDonors", # 氢键供体数
        "NumHAcceptors", # 氢键受体数
        "TPSA",       # 拓扑极性表面积
        "NumRotatableBonds" # 可旋转键数
    ]
)

# 返回结果示例:
# SMILES                            MolWt  LogP  HDon  HAcc  TPSA  RotBonds
# CC(C)C1=CC=C(C=C1)NC(=O)C2...     255.3  3.2   1     3     58.2  4
# CN1C=NC2=C1C(=O)N(C(=O)N2C)C      194.2  -0.1  2     6     72.8  0

💡 Lipinski's Rule of Five:

  • • 分子量 ≤ 500 Da
  • • LogP ≤ 5
  • • 氢键供体 ≤ 5
  • • 氢键受体 ≤ 10
  • • 违反其中≥2项的化合物口服吸收较差
🎯 DiffDock - AI分子对接

使用DiffDock进行AI驱动的分子对接,基于扩散模型预测蛋白-配体结合模式。

# 调用 DiffDock 技能(或 datamol docking)
# scientific-skills:datamol 或 scientific-skills:deepchem

# AI分子对接
diffdock_docking(
    protein_pdb = "EGFR_structure.pdb",  # 或从AlphaFold DB获取
    ligand_smiles = "CC(C)C1=CC=C(C=C1)NC(=O)C2=CC=CC=C2",
    num_poses = 10,  # 生成10个对接构象
    confidence_threshold = 0.7
)

# 返回结果包含:
# - 对接打分 (Docking Score)
# - 置信度 (Confidence)
# - 结合位点坐标
# - 关键相互作用(氢键、疏水作用等)
# - 3D构象文件 (PDB格式)

📌 DiffDock vs 传统对接:

  • 速度:比AutoDock Vina快10倍以上
  • 精度:在基准测试中准确率更高
  • 灵活性:不需要预先定义结合位点
🤖 DeepChem - ADMET性质预测

使用DeepChem深度学习模型预测化合物的ADMET性质,提前筛选掉性质不佳的分子。

# 调用 DeepChem 技能
# scientific-skills:deepchem

# ADMET性质预测
deepchem_admet(
    smiles_list = ["CC(C)C1=CC=C(C=C1)NC(=O)C2=CC=CC=C2"],
    properties = [
        "solubility",      # 水溶性
        "permeability",   # 肠道渗透性
        "hepatotoxicity",  # 肝毒性
        "cytochrome_inhibition", # CYP酶抑制
        "hERG_blockade"    # 心脏毒性
    ]
)

# 返回结果示例:
# Property          Prediction    Confidence
# Solubility        High          0.89
# Permeability      Good          0.76
# Hepatotoxicity    Low           0.92
# CYP3A4_inhibition  Moderate      0.64
# hERG_risk         Low           0.81

📖 实战示例:EGFR抑制剂筛选

以下是完整的EGFR抑制剂虚拟筛选流程,从数据库检索到候选分子推荐:

1 数据库检索 (ChEMBL)

从ChEMBL检索已知EGFR抑制剂作为参考分子:

# Step 1: ChEMBL检索
egfr_inhibitors = chembl_query(
    target_name = "EGFR",
    pchembl_value_min = 7,  # pIC50 > 7 (IC50 < 100 nM),
    assay_type = "B",  # Binding assay
    max_results = 500
)

# 获取346个高活性EGFR抑制剂
print(f"找到 {len(egfr_inhibitors)} 个化合物")

# 提取SMILES和活性数据
smiles_list = egfr_inhibitors['smiles']
activities = egfr_inhibitors['pchembl_value']
2 分子描述符计算 (RDKit)

计算分子描述符,分析构效关系:

# Step 2: RDKit描述符计算
descriptors = rdkit_descriptors(
    smiles_list,
    calc_molwt = True,
    calc_logp = True,
    calc_hbd = True,
    calc_hba = True,
    calc_tpsa = True
)

# Lipinski规则过滤
drug_like = descriptors[
    (descriptors['MolWt'] <= 500) &
    (descriptors['LogP'] <= 5) &
    (descriptors['NumHDonors'] <= 5) &
    (descriptors['NumHAcceptors'] <= 10)
]

print(f"类药性过滤后剩余 {len(drug_like)} 个化合物")

# 构效关系可视化
plot_sar(
    x = 'LogP',
    y = 'pIC50',
    data = descriptors,
    highlight_top = 20
)
3 AI分子对接 (DiffDock)

使用DiffDock对接Top 10化合物到EGFR蛋白结构:

# Step 3: DiffDock对接
# 获取EGFR蛋白结构(从AlphaFold DB)
egfr_protein = alphafold_get("EGFR_HUMAN")

# 选择top 10化合物进行对接
top10_smiles = drug_like.sort_values('pIC50', ascending=False).head(10)

docking_results = diffdock_docking(
    protein = egfr_protein,
    ligands = top10_smiles['smiles'],
    num_samples = 20,
    batch_size = 10
)

# 按对接打分排序
docking_results = docking_results.sort_values('docking_score', ascending=True)
print(docking_results[['compound_id', 'docking_score', 'confidence']])
4 ADMET性质预测 (DeepChem)

预测ADMET性质,筛掉有潜在问题的分子:

# Step 4: ADMET预测
admet_results = deepchem_admet(
    docking_results['smiles'],
    models = {
        'solubility': 'delaney',
        'permeability': 'hoover',
        'hepatotoxicity': 'hepatotoxicity',
        'herg': 'hERG'
    }
)

# ADMET过滤
admet_filtered = admet_results[
    (admet_results['solubility'] == 'High') &
    (admet_results['permeability'] == 'Good') &
    (admet_results['hepatotoxicity'] == 'Low') &
    (admet_results['herg_risk'] == 'Low')
]

print(f"ADMET过滤后剩余 {len(admet_filtered)} 个候选分子")
5 候选分子推荐

整合所有信息,生成候选分子推荐报告:

# Step 5: 生成推荐报告
generate_screening_report(
    candidates = admet_filtered,
    ranking_criteria = ['docking_score', 'pIC50', 'admet_score'],
    top_n = 5,
    include_structures = True,
    include_interactions = True
)

# 报告输出示例:
# ===== EGFR抑制剂虚拟筛选报告 =====
# 筛选日期: 2026-02-21
#
# 初始化合物: 346个
# 类药性过滤: 289个
# 对接Top10: 10个
# ADMET通过: 5个
#
# ===== 推荐候选分子 =====
# 1. CHEMBL1234567
#    - 对接打分: -9.2 kcal/mol
#    - pIC50: 8.3
#    - 关键相互作用: 氢键(Met793), π-π堆积(Phe856)
#
# [其余4个候选分子...]

⚠️ 注意事项

湿实验验证必要性

虚拟筛选结果必须经过湿实验验证。计算预测不能完全替代体外/体内活性测试。

蛋白结构选择

分子对接结果高度依赖于蛋白结构质量。建议优先使用晶体结构(PDB)或高质量AlphaFold预测结构。

ADMET预测局限

ADMET预测模型基于训练数据,对于新型化学骨架的预测可能不准确。应结合专家经验综合判断。

🔗 相关技能链接

📦

下载完整代码包

包含:示例代码、数据文件、结果图表 · 355个文件 · 10.2MB

立即下载

💡 代码包内含 README.md 文档,包含环境配置和运行说明。解压后即可使用。