4. 逆合成分析基础与工程工具

逆合成分析(Retrosynthetic Analysis)的核心思想是:从目标分子出发,沿着“切断化学键、替换官能团、简化骨架”的方向反向推导,直到抵达可采购或已知可得的起始原料。它与正向合成共享同一套反应知识,但推理方向相反。工程上,逆合成分析被拆成三个可计算的部分:目标表示(SMILES/InChI)、单步反应枚举(模板匹配或神经网络预测)、多步搜索(在反应网络上做路径规划)。理解这三层,才能正确配置和使用 AiZynthFinder、ASKCOS 等工具。

单步与多步:从一次切断到一棵搜索树

单步逆合成回答“这个分子可以由哪些反应物一步得到”。以目标分子对乙酰氨基酚(SMILES:CC(=O)Nc1ccc(O)cc1)为例,单步工具会给出若干候选:酰胺键切断得到对氨基酚与乙酸酐/乙酰氯;也可先做酚羟基保护再构建酰胺。每个候选都带有反应模板编号、置信度或模板匹配得分。

多步逆合成则把单步结果作为新目标递归展开,形成一棵搜索树。工程实现通常采用与或树(AND-OR Tree):OR 节点表示“该分子有多种切断方式”,AND 节点表示“该反应需要全部反应物同时可得”。搜索算法(如蒙特卡洛树搜索 MCTS、A*、深度优先+打分剪枝)在树上寻找一条从目标到可采购原料的路径。判断一条路径是否可用,关键看三个量:每步反应可行性得分、原料是否在采购库中、路径总步数与收敛成本。

逆合成多步搜索:与或树与路径判定 目标分子 CC(=O)Nc1ccc(O)cc1 OR:多种切断方式 切断酰胺键 对氨基酚 + 乙酰氯 先保护酚羟基 保护 → 酰胺化 → 脱保护 硝基还原路线 对硝基酚 → 还原 → 酰化 AND:两原料均需可得 AND:三步串联 AND:还原+酰化 采购库命中 对氨基酚 ✓ 乙酰氯 ✓ 采购库命中 对氨基酚 ✓ 乙酸酐 ✓ 采购库未命中 对硝基酚 ✗ 需继续展开 可行路径:得分高 + 原料可得 + 步数少 优先选择左侧酰胺键切断路线(1 步,原料均可得)

常用开源工具:AiZynthFinder 与 ASKCOS

AiZynthFinder 是 AstraZeneca 开源的逆合成规划工具,基于“扩展策略 + 过滤策略 + 搜索算法”的插件式架构。扩展策略负责单步切断,常用 template-based(反应模板)或 neural(神经网络);过滤策略负责剔除不合理分子(如分子量过大、反应性基团冲突);搜索算法默认 MCTS。它的配置集中在 config.yml,关键字段包括 search.time_limit、search.max_iterations、expansion.max_transforms、stock.file(采购库路径)。

ASKCOS 是 MIT 开发的合成规划平台,提供 Web 界面与 REST API,模块覆盖逆合成、正向反应预测、条件推荐。工程批量调用通常走 API:提交目标 SMILES,返回 JSON 格式的路径列表,每条路径含反应物、反应模板、置信度。ASKCOS 的优势在于反应条件与产率预测的集成,适合需要“路径 + 条件”一起评估的场景。

安装与配置要点

AiZynthFinder 推荐用 conda 创建独立环境,避免 RDKit 版本冲突:

conda create -n aizynth python=3.10
conda activate aizynth
pip install aizynthfinder
# 下载预训练模型与采购库(示例路径)
aizynthcli --config config.yml --smiles "CC(=O)Nc1ccc(O)cc1"

配置文件中必须显式指定采购库文件(如 zinc_stock.hdf5)和模板文件(templates.hdf5)。若使用神经网络扩展策略,还需指定模型权重路径。常见坑:采购库未加载会导致所有路径在 AND 节点处失败;模板文件与 RDKit 版本不匹配会报 Invalid template。

ASKCOS 的本地部署通常用 Docker Compose,启动后 API 默认监听 9100 端口。批量调用时建议控制并发数(如 4~8),避免服务端排队超时。

批量调用与结果判读

批量调用适合对一批目标分子做可行性初筛。以 AiZynthFinder 为例,可写一个 Python 脚本读取 CSV 中的 SMILES 列表,逐个调用并汇总结果:

from aizynthfinder.aizynthfinder import AiZynthFinder
import pandas as pd

finder = AiZynthFinder(configfile="config.yml")
finder.stock.select("zinc")
finder.expansion_policy.select("uspto")
finder.filter_policy.select("uspto")

df = pd.read_csv("targets.csv")
results = []
for smi in df["smiles"]:
    finder.target_smiles = smi
    finder.tree_search()
    finder.build_routes()
    top = finder.routes[0] if finder.routes else None
    results.append({
        "smiles": smi,
        "solved": top is not None,
        "steps": len(top.actions) if top else None,
        "score": round(top.score, 3) if top else None
    })
pd.DataFrame(results).to_csv("retro_results.csv", index=False)

结果判读关注四点:是否求解成功(solved)、步数(steps,通常 1~5 步为佳)、得分(score,综合单步可行性与原料可得性)、原料是否在采购库。若某目标分子全部路径都未命中采购库,说明需要补充原料库或放宽搜索时间。批量结果建议按 score 降序排列,优先人工复核高分路径。

工程建议:先用小批量(10~20 个分子)验证配置与采购库是否正确,再扩大到全量。采购库的覆盖度直接决定多步搜索能否收敛,建议定期更新 ZINC 或内部库存文件。
注意:逆合成工具给出的是“候选路径”,不是实验可行性的最终结论。反应条件、保护基策略、选择性等问题仍需化学家判断。工具的价值在于快速缩小搜索空间,而非替代实验决策。