在 PROTAC 开发中,连接子往往是决定成败的变量。同样的两端配体,换一个连接子长度或连接位点,降解活性可能相差一到两个数量级。理解连接子影响的机制,才能有效地优化它。
连接子影响什么
- 三元复合物的几何:决定两个蛋白能以什么相对取向被拉近,直接影响界面互补性与协同性(见 359《三元复合物 Ternary Complex》);
- 构象熵代价:柔性连接子在形成复合物时损失大量构象自由度,这是要付出的自由能代价;
- 分子性质:贡献大量分子量、可旋转键、极性表面积,直接影响通透性;
- 代谢稳定性:连接子中的某些基团是代谢软点;
- 溶解度与聚集:过长的疏水链会导致溶解度问题。
三个设计维度
| 维度 | 选项 | 影响 |
|---|---|---|
| 长度 | 通常 5~20 个原子 | 决定跨距;太短无法同时结合,太长熵损失大 |
| 刚性 | 烷基链(柔)↔ 芳环、饱和环(刚) | 刚性减少熵损失但降低适应性 |
| 连接位点 | 配体上的不同出口向量 | 常被低估但影响极大 |
连接位点:最容易被忽略的维度
很多团队只优化连接子的长度和组成,却忽略了「从配体的哪个位置伸出连接子」。而这个选择决定了:
- 连接子伸出的方向(出口向量);
- 两个蛋白被拉近时的相对取向;
- 是否会干扰配体本身的结合。
选择连接位点的原则:从配体上朝向溶剂、不参与关键相互作用的位置伸出。用共晶结构分析哪些原子暴露在溶剂中(见 338《用 ProLIF 提取相互作用指纹》、339《用 PLIP 生成蛋白-配体相互作用报告》)。
# 从共晶结构中找合适的出口位点
import MDAnalysis as mda
from MDAnalysis.analysis import distances
import numpy as np
def find_solvent_exposed_atoms(complex_pdb, ligand_resname, cutoff=5.0):
"""找出配体上远离蛋白的原子(候选连接位点)"""
u = mda.Universe(complex_pdb)
lig = u.select_atoms(f"resname {ligand_resname} and not name H*")
prot = u.select_atoms("protein and not name H*")
d = distances.distance_array(lig.positions, prot.positions)
min_dist = d.min(axis=1)
exposed = []
for atom, md in zip(lig, min_dist):
if md > cutoff: # 距离蛋白较远 = 朝向溶剂
exposed.append({"name": atom.name, "index": atom.index,
"min_dist_to_protein": float(md)})
return sorted(exposed, key=lambda x: -x["min_dist_to_protein"])
# 这些位点是安装连接子的候选
# 但仍需实验验证 —— 结构分析只能排除明显不行的位点
连接子类型的经验规律
| 类型 | 特点 | 适用 |
|---|---|---|
| 烷基链 | 最柔,合成简单,疏水 | 初筛探索长度 |
| PEG 链 | 柔性,改善溶解度 | 最常用的起点 |
| 芳环 | 刚性,减少熵损失 | 已知合适取向后固定 |
| 哌嗪 / 哌啶 | 半刚性,可成盐改善溶解度 | 很常用 |
| 饱和环(环丁烷、双环) | 刚性,降低 logP | 优化性质时 |
| 三氮唑 | 点击化学产物,合成极方便 | 快速构建库 |
| 酰胺 | 常用连接化学 | 普遍 |
常见的优化路径:先用不同长度的 PEG 或烷基链粗扫,找出有效的长度范围;再在该长度上引入刚性元素(芳环、饱和环),减少熵损失并改善性质。
系统优化策略
# 第一轮:长度扫描(最重要)
# 用同一类连接子(如 PEG),系统改变长度
linker_lengths = [
"CCOCC", # 短
"CCOCCOCC",
"CCOCCOCCOCC",
"CCOCCOCCOCCOCC", # 长
]
# 测降解活性,找出「活性窗口」
# 典型结果:存在一个最优长度,两侧都下降
# 第二轮:在最优长度上改变刚性
# 同样跨距,但用不同刚性的连接子
# 第三轮:改变连接位点
# 在两端配体的不同位置安装连接子
# 第四轮:优化性质
# 在保持活性的前提下改善溶解度、通透性、代谢稳定性
# 注意:每轮只改一个维度,否则 SAR 无法解读
计算辅助
from rdkit import Chem
from rdkit.Chem import AllChem
import numpy as np
def linker_span_distribution(smiles, idx1, idx2, n_confs=200, seed=0xf00d):
"""统计连接子两端可达的距离分布"""
mol = Chem.AddHs(Chem.MolFromSmiles(smiles))
p = AllChem.ETKDGv3(); p.randomSeed = seed; p.pruneRmsThresh = 0.5
cids = AllChem.EmbedMultipleConfs(mol, numConfs=n_confs, params=p)
if not cids:
return None
AllChem.MMFFOptimizeMoleculeConfs(mol, maxIters=500)
dists = []
for cid in cids:
c = mol.GetConformer(cid)
d = np.linalg.norm(np.array(c.GetAtomPosition(idx1))
- np.array(c.GetAtomPosition(idx2)))
dists.append(d)
dists = np.array(dists)
return {"min": float(dists.min()), "max": float(dists.max()),
"mean": float(dists.mean()), "std": float(dists.std())}
# 用途:
# 1) 确认连接子能达到所需跨距
# 2) std 小 = 构象受限(刚性),熵代价小
# std 大 = 柔性大,适应性好但熵代价大
性质代价的现实
- 连接子通常贡献 150~400 Da 的分子量与 5~15 个可旋转键;
- 这直接推高整个分子的 MW(常达 700~1100)与柔性,严重损害被动通透性;
- 缩短连接子能改善性质,但可能损失降解活性——这是 PROTAC 优化中最核心的权衡;
- 刚性连接子在同样跨距下可旋转键更少,是缓解这个矛盾的常用手段。
关键要点
- 连接子的长度、刚性、连接位点三个维度都要优化,连接位点最常被忽略;
- 从共晶结构中找朝向溶剂的原子作为连接位点候选;
- 常规路径:先用 PEG/烷基链扫长度找活性窗口,再引入刚性优化性质;
- 每轮只改一个维度,否则 SAR 无法解读。
延伸资源
- 机制:356《PROTAC 是什么》、359《三元复合物 Ternary Complex》;实战:354《Linker Design 实战》;
- 成药性:362《降解剂成药性》;AI 预测:361《AI 预测降解活性》。