多年前我在做药物化学项目时就深有体会:先导化合物发现这一步,往往不是"灵感"问题,而是"搜索空间"问题。化学空间理论上具有10^60量级的类药分子,可手里的计算资源和时间常常只允许你试探几百个、几千个候选。传统高通量筛选要建库、要合成、要测活,一轮下来小半年过去了,运气不好的话,得到的还全是活性在微摩尔级别徘徊的骨架。这几年生成模型确实火,但真正从"能生成分子"走到"能生成有活性的分子",中间隔着很长的距离,尤其在带口袋信息做条件生成这种相对细分的方向上,能做对、做稳、做出生物活性验证闭环的团队并不多。
最近我仔细读了中国药科大学余文颖、来茂德、邓昭团队发表的工作——他们用一种口袋条件自回归分子生成算法,从无到有设计出了强效STAT3抑制剂。这个工作很有意思的地方在于:它不是在现有抑制剂基础上做片段拼接或骨架跃迁,而是让模型"看着"STAT3蛋白的口袋结构直接"写"出分子,然后化学合成、细胞测试、机制验证一路做下来,拿到了一个活性相当不错的先导物。整个过程设计得相当干净,从算法到湿实验的衔接也很有参考价值。
这篇文章我想就着他们的工作,把口袋条件自回归分子生成这件事从头到尾拆开讲清楚:它到底是怎么工作的、为什么用自回归、口袋信息是怎么"喂"给模型的、湿实验怎么闭环验证、以及如果你也想在自己的靶点上复现这套流程,哪些细节是真正决定成败的。内容不全是论文复述,更多是我结合自己实际做分子生成和药物设计项目时的经验,补一些论文里不会明说但非常重要的细节。
1. STAT3这个靶点为什么让生成模型有了用武之地
先说靶点背景。STAT3是JAK-STAT信号通路里的核心转录因子,在多种肿瘤里持续异常激活,促进增殖、侵袭、免疫逃逸,是公认的肿瘤治疗候选靶点。但STAT3这么多年下来,真正进入临床的药物却非常少,原因在于它的成药性比较"别扭":它是个胞内蛋白,不是经典的细胞膜受体或酶活性中心那种"明确的空腔+明确的底物结合位点";作为转录因子,它的功能依赖蛋白-蛋白相互作用(与SH2结构域结合、二聚化、DNA结合),这类界面通常平坦、亲水残基多、对化合物分子量要求高,用传统高通量方式很难找到细胞内有活性的抑制剂。
所以你会发现,STAT3抑制剂的文献里,很多化合物要么是共价修饰型(比如针对Cys残基的迈克尔受体类),要么是模拟肽/多肽类,真正符合口服类药化学空间的小分子并不多。这就形成了一个典型矛盾:目标非常明确(抑制STAT3活性),但传统方法在这个靶点上性价比极低。
正是这种靶点特性,给了分子生成算法很好的发挥空间。传统虚拟筛选依赖现有化合物库,库越大、多样性越高,越有可能找到新骨架,但库的构建本身受限于已知化学反应和存量分子。生成模型则不受"库里有什么"约束,它可以在给定约束条件下"创造"新分子,尤其是当约束条件不是抽象的药效团描写,而是真实的蛋白口袋几何与残基特征时,生成结果往往会更加有的放矢。
余文颖团队选STAT3的另一个聪明之处在于:虽然STAT3有多个可成药界面,但SH2结构域上的pY肽段结合口袋相对清晰,有大量晶体结构和共晶配体信息可供参考,便于定义口袋格点,也便于事后用分子对接验证生成分子的结合姿态。这比起一口吃个大的去做"全靶点无水头"的无约束生成,要稳得多。
2. 口袋条件生成的核心思路:模型看到了什么
2.1 所谓"口袋条件",条件到底长什么样
在大多数分子生成工作里,"条件"通常是性质标签,比如活性范围(IC50 < 100 nM)、LogP区间、是否透过血脑屏障。这种条件本质上是对分子的整体描述,不涉及靶标三维结构。而口袋条件生成,则是把蛋白结合口袋的几何结构、氨基酸侧链相互作用潜力、空间拓扑约束变成一个模型可以"看得见"的条件向量或条件表达,让模型在逐步生成原子的过程中,每一步都知道自己应该往哪个方向生长片段、选择什么样的原子类型。
具体到本文,他们用网格化的方法将STAT3 SH2口袋的残基和空间特征转化为条件输入。常见做法包括:把口袋内的原子划分到三维格点上,对每个格点编码其所在位置的残基类型、原子电荷、疏水性、氢键供受体情况等。这就相当于在每个可能的原子位置边上放了一张"说明书",模型每生成一个新的重原子,都会参考这个位置附近的口袋环境是否合适。
这里有个很多人容易忽略的细节:条件不是全局的,而是局部可变的。如果只把整个口袋编码成一个固定向量,生成时不管分子在哪个区域生长,都用同一份条件,那和没有条件区别不大,模型学到的永远只是"这个口袋大致长什么样"这种粗糙分布。真正有效的做法,是在自回归生成过程的每一步,动态地根据当前已经生成的部分分子所处的位置,去提取局部口袋特征,把"位置相关的条件"注入生成步骤。这样生成的分子才会出现"在这里适合放一个芳环、那里适合放一个氢键供体"的结构特征。
2.2 自回归分子生成:从零开始逐原子"写"分子
自回归模型的本质很简单:把分子的生成看做一个序列生成问题。分子被表示成SMILES字符串或者原子逐个加入的轨迹,模型每一步生成一个token,生成下一个token时能看到此前所有token。这就像写文章,每写一个字都要看前面已经写的句子,保证语法和语义连贯。
在分子生成领域,自回归的优点是:生成逻辑与分子结构的生长方式是天然契合的。分子不是一堆原子随机拼起来的,而是通过化学键逐步连接形成的。自回归恰好可以按照这个顺序,每次决定"下一个原子是什么类型""和哪个原子相连""键级是多少",这样生成出来的分子在化学价态、环状结构、连接性上天然更合理,不太容易出现无约束生成里那种"看似合理但没法合成"的怪结构。
比起VAE和GAN这类一次性生成整分子的模型,自回归还有一个隐藏优势,就是条件注入非常自然。既然生成是分布式的多步决策,那么在每一步做选择时,都可以把当前位置的口袋条件、已经生成的片段的空间坐标、甚至分子-口袋相互作用预测结果作为额外的上下文输入。余文颖团队采用的就是这种思路——模型不是在一开始决定整个分子轮廓,而是在每一步"边看口袋边生长",最终从无到有得到一个与口袋形状互补的分子。
要注意的是,自回归生成也不是没有代价。它对计算资源的消耗比较大,生成一条SMILES可能需要几百步推理;而且因为每一步都依赖上一轮输出,难以并行加速。但放在药物设计的场景下,我们需要的不是生成一亿个分子,而是高质量、结构多样、活性可期望的小批量候选集合,这个代价完全值得。
2.3 从条件到分子:图到序列的转换
分子本身是图结构(原子为节点,键为边),而自回归模型天生处理序列(如SMILES)。所以需要设计一个"分子图如何转为有序生成步骤"的机制。常见的策略是把分子生成视为一个在特定原子节点上不断添加新原子的过程:模型首先选择一个起始原子,然后逐步添加与其相连的新原子和化学键,每一步都被描述为一个序列事件。在这个过程中,模型不仅要知道当前生成的局部图中每个原子的符号、杂化状态、环标记,还要知道它们对应的三维坐标或相对位置,以便和口袋格点比对。
余文颖团队在这一点上处理得比较工程化:他们把每一步新原子的三维坐标与口袋格点空间的坐标统一,于是模型可以直接通过网格化口袋特征计算"当前局部结构在这个位置上的空间位阻是否合理"、"下一原子是否处于可接受范围内"。效果上近似于让模型在一个三维约束场中做原子的逐点填充,而不是盲写。
这种做法有个很实际的好处:生成结果不需要再费劲做姿态对齐,就能直接进入对接打分。因为生成过程中自带坐标,分子就已经"放在"口袋里了,后续只需要做局部优化和打分排序,省去从SMILES重新构建三维构象再对接的麻烦。从我们自己做项目的经验看,这一套省掉的不只是几个小时的计算时间,更重要是避免了"生成分子与口袋构象天然不匹配"这一最常见的废设计来源。
3. 模型的训练与验证策略:好分子不是凭空蹦出来的
3.1 训练数据怎么来:复合物结构是金矿
任何有条件的生成模型,训练数据里必须要有配体-口袋的匹配对,才能学到"什么样的分子放在什么样的口袋里是合适的"。过去这类数据稀缺,但现在得益于PDB里大量的共晶结构,特别是激酶、转录因子等热门靶点,可以挖出相当多的高质量复合物结构。
他们的训练策略应该分为两个层次:一是从已知STAT3相关共晶结构提取正样本,让模型熟悉STAT3口袋的配体特征;二是在更大范围的蛋白-配体复合物库(比如PDBbind收录的复合物)上做预训练,让模型学到通用的口袋-配体匹配规律。这其实很像自然语言处理里的预训练+微调范式:先在通用语料上学会语法,再在领域语料上学会专业表达。
这里我想补充一个很容易被忽视的问题:训练样本的"去冗余"和"负样本构造"决定了模型的上限。如果库里有很多同靶点、同配体、只是分辨率不同的相似结构,模型会过度学习某些骨架,导致生成的分子多样性极差。更麻烦的是,如果不构造"错位样本"(比如把配体放在错误口袋里或者随机蛋白表面上)作为负样本,模型学到的条件几乎等于无效——因为没有对比,它无法理解"条件A"和"条件B"的差异到底体现在哪里。所以我在做类似工作时,一定会同时准备"正样本(正确口袋-配体对)"和"负样本(随机口袋-配体对)",并控制两者比例在大概10:1左右,让模型能够有足够压力去真正理解口袋条件。
3.2 验证时不能只看"生成分子能不能对接上"
很多做分子生成的文章,验证环节就是拿对接软件跑一下,统计一下生成分子里对接分数好的比例,然后写进结论里说"我们发现了一批潜在活性分子"。这种流程其实有些"自欺欺人"——因为如果模型是用分子对接打分作为训练奖励或筛选标准的,那么生成结果和打分函数共享同一个偏差,对接分数高几乎是可以预见的,但对接分数高的分子并不等于细胞里有活性。
余文颖团队比较扎实的地方在于,他们把验证推进到了合成和生物学检测层面。这也拉高了整个工作的可信度:模型生成的分子,经有机合成拿到真品,然后在STAT3依赖的细胞模型里测了活性,又通过Western Blot看磷酸化STAT3水平的变化,还验证了在细胞内的选择性。这就是完整的"计算-合成-生测"闭环。缺少任何一个环节,分子的价值都要打折扣。
以我的经验,如果团队条件有限,至少也应做到在纯化蛋白层面测一下SPR或TSA(热稳定实验),用结合实验来验证"模型生成分子确实结合STAT3蛋白",而不仅仅是靠dock分数推测。这个实验本身成本并不高,但能极大增加工作可信度。如果连纯化蛋白实验都做不了,那也应该在验证部分让多个打分函数交叉验证,或者做短时间的分子动力学模拟来评估结合稳定性,而不能只给一个对接分数就当成功。
3.3 活性数据的解读:强效的标准是什么
论文题目里的"强效"需要具体数据支撑。在STAT3这类转录因子抑制剂领域,细胞水平上IC50能到个位数微摩尔已经算不错,如果能做到亚微摩尔甚至纳摩尔级别,那确实配得上"强效"二字。很多早期论文所谓的抑制剂,其实只是生化实验里抑制蛋白-蛋白相互作用的活性很好,一到细胞层面活性就消失殆尽。核心原因有两个:一是细胞膜穿透性差,分子太大或极性太强;二是细胞内STAT3受到上下游复杂调控,单纯结合STAT3并不足以阻断其功能。
所以当我看到一篇文献宣称发现了新的STAT3抑制剂时,我会特别关注它的细胞活性数据、细胞渗透性相关参数(如分子量、TPSA、cLogP)、以及是否展示了磷酸化STAT3的抑制证据。在余文颖团队这个工作里,这几个维度都有体现,这也是为什么SH2口袋生成的分子虽然分子量普遍偏大(因为口袋本身较大),他们仍然能得到细胞内有效的先导物的原因——因为模型在生成时不仅优化了口袋匹配,也通过训练数据隐式学习到了类药性质的约束。
4. 从分子生成到先导物发现:全套流程的实操拆解
4.1 流程总览:六个环节一个都不能少
如果你看过他们论文中的方法部分,会发现流程大致是:收集蛋白结构、定义口袋格点、训练条件生成模型、采样候选分子、合成与表征、细胞与生化验证。我给你按实操口径重新整理成六个环节,并标注每个环节的输入输出:
| 环节 | 输入 | 核心操作 | 输出 |
|---|---|---|---|
| 口袋准备 | STAT3晶体结构(PDB) | 清理蛋白、确定结合位点、生成格点描述 | 口袋特征网格 |
| 数据准备 | PDBbind等复合物库 | 提取配体/口袋坐标对、构造正负样本、去冗余 | 训练数据集 |
| 模型训练 | 口袋特征+分子图+生成序列 | 训练自回归生成模型(条件编码器+生成器) | 已收敛的模型权重 |
| 分子采样 | 模型权重、目标口袋 | 温度控制、多样性约束、条件生成 | 数百到数千候选SMILES |
| 过滤排序 | 候选分子 | 合成可及性、类药性质、对接打分、聚类 | 几十个高优先分子 |
| 实验验证 | 合成化合物 | 有机合成、细胞活性测试、机制验证 | 有明确活性的先导物 |
这六个环节里,每个都有它独特的坑。我见过很多团队在"分子采样"和"过滤排序"之间处理得太草率,结果就是模型生成了一堆好看但实际没法合成的分子,或者过滤参数设得太松,导致最后进合成环节的分子活性全在预期之外。
4.2 口袋格点参数:分辨率是关键
口袋格点的生成方式直接影响条件质量。常见做法是以口袋几何中心为原点,在一定范围(比如20×20×20埃的盒子)内以固定分辨率(如0.5埃)划分三维格点,对每个格点统计邻近残基属性。分辨率不能太高(计算量爆炸),也不能太低(丢空间精度)。实际操作中,0.5-1.0埃是一个平衡区间,具体取决于模型输入的规模。
另一个容易被忽视的参数是格点属性通道的选择。有些实现会用原子密度、残基类型、局部电荷、疏水性等特征,但通道数太多会导致训练困难、模型过拟合;通道数太少则模型无法区分不同口袋的化学环境。比较合理的做法是选择4-6个物理意义明确的属性,比如:口袋内原子占据情况、残基疏水性、氢键供体密度、氢键受体密度、芳香残基距离。这样既保留了足够的化学语义,又不至于让条件输入占据过多模型容量。
4.3 关于温度(采样多样性与质量的权衡)
自回归模型采样时,temperature参数控制随机性。temperature过高,生成分子会变得"异想天开",频繁出现无意义片段,甚至环结构错乱;temperature太低,模型就走老路,生成一堆训练集里见过的分子,探索性暴跌。我们做STAT3这类难靶点时会采用"先宽后窄"策略:初始用较高的temperature(如1.0-1.2)生成一批结构差异大的骨架,再用较低的temperature(0.6-0.8)在优势骨架附近细化。这样既保证了初筛的多样性,又保证终筛分子质量稳定。
更讲究一点的做法是引入"生成轨迹约束":在采样过程中,对每个生成分子实时计算官能团稳定性、SMILES可解析性、是否包含明显毒性骨架,一旦出问题就提前终止该轮生成。这可以节省不少不必要的计算时间,因为自回归生成到一半时如果分子已经开始出环戊二烯并结构,后面很难救回来。
4.4 合成可及性:模型不懂合成,你必须替它把关
这可能是整个流程里最容易被低估的一环。模型的目标函数只有"分子与口袋匹配"和"训练集经验",它没有有机化学常识,不知道哪些反应产率低、哪些中间体不稳定、哪些官能团组合本身就是死路。所以你必须对模型输出做合成可及性评估。
实操中有两种方法:一是用计算合成可及性工具(如SAscore)做快速打分,凡是SAscore高于某阈值(如4.5)的分子直接排除;二是建立自己的"不可合成特征黑名单",比如浓度高的羧酸直连四元环、连续多个sp3中心的拥挤片段、不稳定的亚胺醚链等。这两者结合使用比较稳。有余力的团队还可以引入逆合成模板匹配,对生成的分子做快速逆合成分析,看看能否找到可用的化学反应模板。这一步在STAT3类偏大的分子上尤其重要,因为大分子骨架往往涉及多步反应,每一步的收率都很考验合成团队。
5. 从我的经验看:要复现这套流程,你最该盯住的技术细节
5.1 坐标对齐是"鬼故事"重灾区
无论是训练还是生成,只要涉及三维坐标和格点,坐标对齐就是最大的潜在雷区。PDB结构里不同的结构可能有不同编号体系、不同的蛋白二聚体方向、甚至配体镜像构型。如果不仔细做蛋白结构预处理(补全缺失残基、去水、加氢、确定配体占据位置),生成模型学到的东西就是错位的坐标噪声。
我自己的教训是:任何训练样本里的配体坐标系一定要和口袋格点坐标严格一致,不能一个来自晶体学的原始坐标,另一个来自对接重排后的坐标,除非你有充分的理由和统一化处理。建议在数据准备阶段写一个严格的坐标流水线,对所有复合物执行同一种标准化操作(如按口袋中心平移、按主链原子叠合),再做质控可视化和数值检查。
5.2 不饱和打分:采样阶段的多样性控制
很多团队在滤波排序阶段习惯用top-K截断,只保留打分最高的分子。但打分函数的误差往往是结构依赖的,同一打分函数可能偏爱某种类型骨架而系统性低估另一类。如果你只保留top-K,实际上是在放大打分函数的偏好,导致最终进合成的分子全是"同一类"的,化学多样性极差。
更好的办法是:先把候选分子按骨架聚类(如Tanimoto相似性聚类,阈值0.4-0.6),再从每个簇里选打分最高的1-2个分子进入候选列表。这样做可以保证合成预算花在不同骨架类型上,即使某一个打分函数在某种骨架上失灵,也不至于全军覆没。余文颖团队最终能拿到一个活性较好的分子,除了模型本身设计合理,我相信他们后期人工干预的"挑分子"环节也下了不少功夫,因为临床上可用的先导物从来不可能是完全自动化的产物。
5.3 膜穿透性的隐性约束
STAT3这个靶点对分子量上限比较宽容,SAscore和对接分数都能通过,但膜穿透性绝不会轻易放过你。分子量超过500、TPSA超过100、可旋转键数量超过10的分子,无论口袋里结合得多完美,细胞内活性大概率都会让人失望。
因此我强烈建议在所有过滤条件里加入细胞渗透性相关的经验阈值。大家可以根据目标选择不同标准:如果做口服药物导向,可参考Lipinski五规则,但要允许STAT3靶点的少量"出格";如果只是想验证机制刚需,那么可以放宽到分子量600、TPSA 140以内,但必须验证通透性,否则后续细胞活性无法解释。小小福利:网格化生成的分子天然倾向于"填入"口袋形状,而由于活性位点往往位于蛋白内部,生成的很多分子会在疏水/氢键混合环境里获得较合理的亲脂性,这算是条件生成的一个隐藏优点。
5.4 合成路线的尽早介入
很多计算团队的做法是把合成可及性计算放在"候选列表确定之后",但现实是:合成化学家越早介入,项目浪费越少。我建议在与模型团队或合成团队协作时,先让合成人员草拟出前20个候选分子的可行路线,然后再根据反馈调整打分排序,或者向模型中加入"路线的可及性"这一隐式约束。好的团队不是等分子出来才看能不能做,而是先把合成能力范围告诉模型。
余文颖团队能迭代出有活性的STAT3抑制剂,背后化学合成功底是肉眼可见的。STAT3 SH2抑制剂常见的苯磺酰胺、吲哚、喹唑啉等骨架的合成路线相对成熟,给分子生成提供了"发挥空间"。试想如果一开始就让模型生成一个含9个手性中心的长链多肽,那就算预测活性再好,合成难度也足以让整个项目陷于泥潭。所以在设置生成约束前,你不妨先写下来你自己的"可接受合成复杂度上限"。
6. 这类工作的未来扩展:口袋条件生成不是一次性的玩具
6.1 不止STAT3:从难成药走向可成药
口袋条件生成的一大价值是它在难成药靶点上的适用性。你不需要一个完美的小分子库,你只需要靶点的一个晶体结构或高置信度同源模型,就可以开始做条件生成。这对过去被视为"孤儿靶点"的蛋白-蛋白相互作用界面、转录因子、泛素连接酶等领域,是个非常值得尝试的替代路径。
我自己设想过这样的流程:对某个新蛋白,先用AlphaFold做结构预测,然后通过分子模拟或已知复合物比对锁定可成药的"热点口袋",再用口袋条件生成模型产生候选分子。这套流程如果在更多团队走通,会极大加速"从基因组到先导物"的周期。当然AlphaFold预测的构象不确定性依然存在,生成分子对构象微小变化是否敏感,是个后续值得做鲁棒性研究的问题。
6.2 与FEP和MD的结合
当前口袋条件生成更多是一个"粗定位"工具,生成分子与口袋的精确结合亲和力评估,大多数团队还是靠对接打分。但对接打分的物理化学保真度有限,对氢键方向性、去溶剂化惩罚、熵贡献等细节处理常失置信。下一步很自然的融合方向是:对生成的高排名分子快速做FEP或长时间MD模拟,用更严格的物理模型筛选。这样虽然计算成本上升,但可以大幅减少进入合成环节的"表面打分高、实际结合差"的假阳性。
余文颖团队目前的工作还没有完全走到FEP这步,但他们的体系提供了很好的基准:STAT3 SH2口袋结构明确、共晶数据众多,适合做严格的自由能微扰计算。我期待看到后续工作在这方向上的延展。
6.3 主动学习闭环才是真正的大杀器
目前这套流程的局限是"一次性采样-过滤-验证",没有把实验的负结果反馈回模型。如果能把合成与活性数据作为新的训练样本,让模型知道"这类分子即使在结合模拟中不错,但细胞实验没活性",那么模型就会逐步学会避开这些陷阱,最终形成高度靶点特异的生成策略。这种主动学习闭环,我认为才是口袋条件分子生成在药物设计中最有想象力、最有实际潜力的未来。
当然,实现主动学习需要大量工程支撑:实验数据标准化存储、自动重训练流水线、模型版本管理,缺一不可。但这恰恰是从科研工具走向赋能平台的关键一步。在STAT3这个案例里,如果能把他们已合成分子的活性数据继续喂回模型,理论上下一代生成的分子会明显更"听话"。
从我个人实践经验看,余文颖、来茂德、邓昭团队的这项工作最值得称道的点,不在于用了多新潮的模型结构,而在于他们把一个生成算法完整地嵌进了一个新药发现链条里,每一个环节都没有掉链子。口袋条件生成在这类靶点上,不只是"能跑",而是已经证明"能出活"。这种计算-合成-生物学的闭环配合,最终会推动生成模型在药物设计领域的信任度再上一个台阶。