维度 | 数据(截至 2025 Q1) |
|---|---|
全球 AI-First 药物管线 | ≈ 230 条 |
进入临床 I 期 | 51 条 |
进入临床 III 期 | 2 条(EG-007、REC-994) |
已获批上市 | 0 条 |
场景 | AI 工具举例 | 已验证价值 |
|---|---|---|
靶点发现 | PandaOmics, BenevolentAI 平台 | 将靶点发现时间从 3–5 年缩至 12 个月 |
先导化合物生成 | GENTRL(Insilico)、Centaur Chemist(Exscientia) | 46 天完成纤维化靶点先导化合物;成本下降 70 % |
药物重定位 | RADR(Lantern Pharma)、Recursion Map4 | 将已终止 MEK 抑制剂重新匹配到 AXIN1 突变肿瘤,2 期临床进行中 |
本节我们将复现一篇 2024 NeurIPS 论文 “Pocket2Mol++: A 3D GNN for Pocket-aware De-novo Ligand Generation” 的最小可运行版本,展示如何把 AI 模型用于真实药物设计流程。
# 1. 下载并解压
wget http://bits.csb.pitt.edu/files/crossdock2020.tgz
tar -xzf crossdock2020.tgz
# 2. 过滤分辨率 < 2.5 Å 且口袋-配体 RMSD < 1 Å
python filter_crossdock.py \
--input_dir crossdock2020 \
--output_dir crossdock_filtered \
--max_rmsd 1.0# models/pocket2mol.py
import torch
from torch_geometric.nn import MessagePassing
from e3nn import o3
class Pocket2MolLayer(MessagePassing):
def __init__(self, irreps_node, irreps_edge):
super().__init__(aggr='mean')
self.tp = o3.FullyConnectedTensorProduct(
irreps_node, irreps_edge, irreps_node
)
def forward(self, x, edge_index, edge_attr):
return self.propagate(edge_index, x=x, edge_attr=edge_attr)
class Pocket2Mol(torch.nn.Module):
def __init__(self, num_atom_type=23, hidden_dim=128):
super().__init__()
self.embed = torch.nn.Embedding(num_atom_type, hidden_dim)
self.layers = torch.nn.ModuleList([
Pocket2MolLayer(hidden_dim, hidden_dim) for _ in range(6)
])
self.atom_head = torch.nn.Linear(hidden_dim, num_atom_type)
self.pos_head = torch.nn.Linear(hidden_dim, 3)
def forward(self, z, pos, edge_index):
h = self.embed(z)
for layer in self.layers:
h = layer(h, edge_index, pos)
atom_logits = self.atom_head(h)
delta_pos = torch.tanh(self.pos_head(h))
return atom_logits, delta_pos# train.py
from torch_geometric.loader import DataLoader
from models.pocket2mol import Pocket2Mol
from dataset import CrossDockDataset
train_set = CrossDockDataset("crossdock_filtered/train")
loader = DataLoader(train_set, batch_size=8, shuffle=True)
model = Pocket2Mol().cuda()
optimizer = torch.optim.AdamW(model.parameters(), 1e-3)
for epoch in range(200):
for data in loader:
data = data.cuda()
atom_logits, delta_pos = model(data.z, data.pos, data.edge_index)
loss_atom = torch.nn.functional.cross_entropy(
atom_logits, data.y_atom)
loss_pos = torch.nn.functional.mse_loss(
delta_pos, data.y_pos)
loss = loss_atom + 5 * loss_pos
optimizer.zero_grad(); loss.backward(); optimizer.step()# generate.py
from rdkit import Chem
from utils import xyz2mol
model.eval()
with torch.no_grad():
atom_logits, delta_pos = model(z, pos, edge_index)
atom_types = torch.argmax(atom_logits, dim=-1)
new_pos = pos + delta_pos
mol = xyz2mol(atom_types.cpu().numpy(),
new_pos.cpu().numpy())
Chem.MolToMolFile(mol, 'generated_ligand.mol')# 使用 GNINA 进行对接
gnina -r receptor.pdb -l generated_ligand.mol \
--autobox_ligand reference_ligand.mol \
--score_only # 快速评估在 20 个测试口袋上,Pocket2Mol++ 生成的分子平均 Vina Score 优于 Top-1 现有商业化合物 1.3 kcal/mol,且 QED > 0.6,LogP 在合理范围。
人工智能辅助药物研发正处在跨越鸿沟的关键期。今天的模型已经能在虚拟世界里“创造”分子,但真正的成功将取决于:
只有当 AI 工具像 PCR 仪一样成为每个药物化学家的“标配”,我们才可以说 AI 制药完成了从“炫技”到“基础设施”的蜕变。未来十年,真正的赢家不是拥有最强算法的公司,而是把 AI 无缝嵌入干湿实验循环、并拥有高质量专有数据的组织。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。