技能简介
药物虚拟筛选是现代药物发现的核心环节。传统流程需要学习AutoDock等复杂软件,
准备配体和蛋白结构,手动运行对接,筛选1000个化合物需要1个月。
本教程教你使用四大AI药物发现工具——
ChEMBL(活性数据库)、RDKit(分子操作)、DiffDock(AI对接)、DeepChem(深度学习预测),
通过Scientific Skills MCP自动化完成从化合物库检索到候选分子筛选的全流程。
将筛选时间从1个月缩短至1小时!
💡 使用场景
先导化合物发现
从已知活性化合物出发,筛选结构类似物,发现潜在先导化合物
靶点药物重定位
寻找已批准药物的新适应症,加速药物研发进程
构效关系分析
分析分子结构与生物活性的关系,指导化合物优化
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预测模型基于训练数据,对于新型化学骨架的预测可能不准确。应结合专家经验综合判断。
🔗 相关技能链接
💡 代码包内含 README.md 文档,包含环境配置和运行说明。解压后即可使用。