第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倍
效率提升

🧪 筛选前最少准备这 4 类输入

靶点定义

至少明确基因/蛋白名称、物种、推荐结构来源,以及是否有已知结合位点或共晶配体。

化合物库来源

先说明是 ChEMBL 类似物、已批准药物库,还是自建分子库,并完成去重、标准化和盐型处理。

筛选阈值

提前写清楚保留规则:相似度阈值、对接分数、Lipinski/Veber、PAINS 或反应性警报是否纳入。

后续验证路径

最好在开始前就想好文献复核、ADMET 复筛、体外活性实验或购买可得性,否则 Top hits 很难落地。

📦 虚拟筛选至少应交付这 4 样

候选化合物短名单

至少给出 Top hits 的编号、SMILES/名称、来源数据库和入选原因,避免只留截图没有可复用数据。

筛选依据表

把 docking score、相似度、预测活性、ADMET、结构警报放进同一张表,后续才能解释为什么保留或淘汰。

结合模式证据

至少输出 1-2 张关键相互作用图,标明氢键、疏水作用或与已知配体共享的核心锚点位点。

下一步验证建议

写清楚哪些候选适合优先购买、复筛、做 MD 或做细胞实验,这比单纯“排名第一”更接近真实研发流程。

💡 使用场景

💊

先导化合物发现

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

🎯

靶点药物重定位

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

🧪

构效关系分析

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

🔬

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个候选分子...]

🧯 最容易误判的 4 类候选问题

只看 docking score

对接分数只是排序线索,不是亲和力真值;构象采样、打分函数和蛋白状态都会影响结果。

忽略分子标准化

盐型、互变异构体、质子化状态和重复分子不处理,往往会把同一个化合物算成多个“优胜者”。

命中但不可开发

高分候选可能带有 PAINS、反应性基团、极差溶解度或明显毒性风险,不能直接当先导化合物。

脱离文献与靶点背景

如果没有结合已知活性位点、已报道 SAR、靶点构象或突变信息,排序结果很容易变成“好看但没法验证”。

⚠️ 注意事项

湿实验验证必要性

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

蛋白结构选择

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

ADMET预测局限

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

🔗 相关技能链接

📦

下载完整代码包

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

立即下载

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