药物结晶工艺多目标优化
用途
把一个结晶工艺优化需求,从"有一组参数 / 一个待优化工段"推进到"拿到一套满足多约束、可复现、有定量对比的最优工艺方案(完整帕累托前沿)"。
核心是一台可解释的确定性动力学模型(数字孪生),把 6 个工艺变量映射到 4 个质量指标(收率 / 纯度 / 粒径 D50 / 溶出相似因子 f2)。本 SKILL 负责编排:识别需求 → 调用计算核心 → 解读帕累托前沿 → 输出优化前后对照结论。
核心方法(可解释动力学内核)
| 模块 | 实现 | 文献锚定 |
|---|---|---|
| 溶解度曲线 | van't Hoff:C*(T)=4.48·exp[8.3/R·(1/293−1/T)] | A 级:Biowaiver Monograph 2017(20℃ 4.48 mg/mL) |
| 成核速率 | B = kb·max(σ−0.3,0)⁴ + kb2·G·μ2·f_mixing(搅拌) | 初级经典理论 + 二次生长耦合;分界 S=4.5(田宾宾 2015) |
| 生长速率 | G = kg·σ^m,m=1.9955(BCF 螺旋错位生长) | A 级:田宾宾等,化学工程 2015 实测 |
| 种群平衡方程(PBE) | 矩量法 μ0…μ4 递推,浓度-矩量全耦合物料衡算守恒 | B 级:Randolph & Larson 矩量法 |
优化方法(多目标 + 多智能体)
- 主输出:NSGA-II 4 目标完整帕累托前沿(80 个非支配解 + 膝点 + max-f₂/max-yield 极值),目标 = 收率↑ / 纯度↑ / f2↑ / 粒径贴合 30μm↑。
- 辅助:高斯过程(GP,RBF 核 + 白噪声,超参经对数边际似然 LML 学习)+ 贝叶斯优化(EGO 式 EI),作标量化参考点交叉验证。
- 五智能体流水线:Literature(文献锚定守门)→ Kinetics Modeler(PBE 求解 + 物料衡算自检)→ Optimizer(帕累托前沿)→ Risk/Regulatory(监管判据 + CQA)→ Reviewer(独立复核,PASS/FAIL 裁决)。
- 敏感性分析:温度 ±1℃ / pH ±0.1 / 降温速率 ±10% 扰动下的鲁棒性判定。
触发条件(何时加载本 SKILL)
满足以下任一场景即可触发:
- 用户给出结晶工艺参数,要求评估质量指标或是否达标
- 用户要求"优化 / 搜索 / 寻优"某结晶工段的工艺参数
- 用户提到收率 / 纯度 / 粒径 D50 / 溶出 f2 等质量目标并涉及结晶
- 用户要求仿制药与原研药溶出相似性(f2)评估
- 用户提供参比溶出曲线或文献基线,要求对比
触发词:结晶工艺优化、结晶参数寻优、工艺多目标优化、仿制药结晶、粒径窗口、溶出 f2、降温曲线、晶种策略、过饱和控制、阿莫西林结晶、帕累托前沿、种群平衡。
输入输出格式
输入
SKILL 由 AI 在会话中加载后,通过运行 scripts/crystallization.py(标准输入传 JSON)来驱动计算核心。CLI 输入协议:
{
"mode": "evaluate | optimize | sensitivity | agents | dissolution_plot | explain",
"params": { // evaluate 模式必填,6 个工艺变量
"T_cryst_C": 15, // 结晶温度 ℃,[5, 25]
"r_cool_C_per_min": 0.2, // 降温速率 ℃/min,[0.05, 1.0]
"S0": 1.8, // 初始过饱和度(无量纲),[1.2, 2.5]
"seed_wt_pct": 2, // 晶种量 质量%,[0, 5.0]
"stir_rpm": 300, // 搅拌转速 rpm,[100, 600]
"hold_t_min": 120 // 养晶时间 min,[30, 240]
},
"seed": 42 // optimize/agents 模式可选,随机种子(默认 42,确定可复现)
}
输出
计算核心 stdout 输出单行 JSON。以 mode=optimize 为例,核心字段:
{
"params": {"T_cryst_C": 5.9, "r_cool_C_per_min": 0.11, "S0": 1.9, "seed_wt_pct": 4.58, "stir_rpm": 586, "hold_t_min": 238},
"metrics": {"yield_pct": 67.75, "purity_pct": 99.44, "D50_um": 44.26, "D90_um": 116.0, "f2": 79.13},
"score": 174.88,
"pareto": {"n_pareto": 80, "knee_point": {...}, "extremes": {"max_f2": {...}, "max_yield": {...}}, "pareto_front": [...]},
"agents": {"literature": {...}, "kinetics": {...}, "optimizer": {...}, "risk_regulatory": {...}, "reviewer": {"verdict": "PASS", ...}},
"sensitivity": {"robustness": {"conclusion": "鲁棒:三因素 ± 扰动下 f2 保持 ≥50", ...}},
"surrogate_cv": {"r2_mean": 0.74, ...},
"bo_trace": [...],
"cqa_coverage": {...}
}
AI 将 JSON 结果解读为人类可读的对照结论,格式参考本文件"结果解读"小节。
执行步骤(标准工作流)
按顺序执行,前一步结果决定后一步动作:
- 识别需求:确认目标 API 与工段;判断用户是要「评估单组参数」还是「搜索最优参数」。
- 确定基准:读取文献经典工艺基线(或用户提供);默认阿莫西林基线见
references/tuning-guide.md。 - 多目标寻优(optimize):调用
mode=optimize,主输出为完整帕累托前沿(NSGA-II 80 非支配解)。 - 结果评估(evaluate):对候选方案调用
mode=evaluate,核对checks.all_satisfied与 PBE 过程量。 - 独立复核:Reviewer 智能体独立复核前沿非支配性与可行性,出具 PASS/FAIL。
- 输出结论:给出帕累托前沿 + 膝点/极值 + 四指标前后对比 + 敏感性分析结论 + 边界声明。
依赖
| 类型 | 依赖项 | 说明 |
|---|---|---|
| 运行时 | Python 3(python3 / python / py 任一可用) |
运行计算核心 |
| 数值库 | NumPy 2.5.4 | GP 高斯过程与 NSGA-II 向量化运算(pip install numpy==2.5.4) |
| 核心文件 | scripts/crystallization.py |
可解释动力学核心(PBE)+ 多目标优化 + 五智能体,本 SKILL 的唯一可执行逻辑 |
| 参考文档 | references/install-and-usage.md |
安装、注册、使用示例 |
| 参考文档 | references/tuning-guide.md |
全部可调参数的物理含义、取值范围与影响 |
| 外部资源 | 无 | 自包含,不联网、不调外部 API |
计算核心调用方式(CLI)
# evaluate:评估单组参数
echo '{"mode":"evaluate","params":{...}}' | python scripts/crystallization.py
# optimize:输出完整帕累托前沿(主)+ GP-BO 参考点
echo '{"mode":"optimize","seed":42}' | python scripts/crystallization.py
# sensitivity:敏感性分析(T±1℃/pH±0.1/降温±10%)
echo '{"mode":"sensitivity","params":{...}}' | python scripts/crystallization.py
# explain:完整说明 optimize 跑了什么(模型卡/搜索空间/权重/约束全透明)
echo '{"mode":"explain"}' | python scripts/crystallization.py
结果解读
pareto.n_pareto→ 帕累托前沿非支配解数量;knee_point为到理想点距离最小的权衡解。metrics.f2 >= 50→ 溶出曲线与原研参比"相似"(FDA/CDE 生物等效桥梁判据);f2 < 50视为不相似。agents.reviewer.verdict = PASS→ 前沿非支配性 + 可行性 + 基线对比全部通过独立复核。sensitivity.robustness.f2_stays_above_50→ 扰动下 f2 是否仍 ≥50(操作鲁棒性)。bo_trace→ 64 次评估逐条留痕(参数/分数/来源/GP超参/EI),优化过程完全可查。
边界声明
本 SKILL 输出为工艺搜索与预筛工具,基于可解释动力学内核(非 GMP 实验替代)。最终生物等效性结论须由真实实验与申报数据支撑。收率口径:本模型收率为物料衡算口径(析出固体/配液固体),与文献「总收率」口径不同,详见 references/tuning-guide.md。