Install
openclaw skills install rxn-imRxnIM 化学反应图像解析技能。当用户需要:(1) 从化学反应图像提取 SMILES 结构, (2) 识别反应条件(试剂/溶剂/温度/产率),(3) 将反应图转化学结构数据时触发。 基于 Chem. Sci. 2025 论文 "Towards Large-scale Chemical Reaction Imag...
openclaw skills install rxn-imRxnIM 是一个多模态大语言模型,专门从化学反应图像中提取结构化数据,无需人工标注。支持三种核心任务:
| 任务 | 描述 |
|---|---|
| 反应提取 | 从图像中提取反应物→产物的 SMILES 结构 |
| 条件 OCR | 识别试剂、溶剂、温度、产率等反应条件 |
| 角色识别 | 判断各化学物种在反应中的角色(reactant/product/reagent/solvent) |
模型性能: 在 Pistachio(合成)和 ACS(真实)数据集上,soft-match F1 达到 84%–92%,显著优于先前方法。
当用户表达以下意图时,激活本技能:
POST https://CYF200127-RxnIM.hf.space/run/predict
Headers: Content-Type: application/json
Body: { "data": ["data:image/png;base64,<base64_image>"] }
Python 调用示例:
import base64, requests, json
def parse_reaction_image(image_path: str, hf_space: str = "https://CYF200127-RxnIM.hf.space") -> dict:
with open(image_path, "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = requests.post(
f"{hf_space}/run/predict",
json={"data": [f"data:image/png;base64,{b64}"]},
timeout=120
)
return resp.json()
# 使用
result = parse_reaction_image("reaction.png")
print(result["data"]) # 完整文本输出
输出字段说明:
{
"data": "Reaction: 1\nReactants: CC(C)(C)OC(=O)N[C@@H]1C[C@H]2C(=O)O[C@H]2[C@@H]1Br\nConditions: Br2, Pyridine[reagent], DME/H2O[solvent], 0-5°C[temperature], 68%[yield]\nProducts: CC(C)(C)OC(=O)N[C@@H]1C[C@@H](CO)[C@@H](O)[C@@H]1Br\nFull Reaction: ... | ..."
}
# 1. 克隆仓库
git clone https://github.com/CYF2000127/RxnIM
cd RxnIM
# 2. 创建环境
conda create -n rxnim python=3.10
conda activate rxnim
# 3. 安装依赖
pip install -r requirements.txt
# 4. 下载模型权重(~14GB)
# https://huggingface.co/datasets/CYF200127/RxnIM → RxnIM-7b.zip
# 解压到本地路径,修改 config/_base_/dataset/DEFAULT_TRAIN_DATASET.py 中的路径
# 5. 推理
sh eval.sh
⚠️ 本地部署需要约 16GB GPU 显存,推荐 Linux + CUDA 环境。
用户上传/提供图像 → base64 编码 → 调用 HF API → 解析 JSON 输出 → 格式化呈现
data:image/png;base64,... 格式response["data"] 提取文本,手动分割各字段pharmaclaw-chemistry-query 技能验证有效性解析后,按以下格式组织结果:
✅ 反应解析成功
**Reaction: 1**
| 角色 | 内容 |
|------|------|
| Reactants(反应物) | `CC(C)(C)OC(=O)N[C@@H]1C[C@H]2C(=O)O[C@H]2[C@@H]1Br` |
| Conditions(条件) | Br2, Pyridine[reagent], DME/H2O[solvent], 0-5°C[temperature], 68%[yield] |
| Products(产物) | `CC(C)(C)OC(=O)N[C@@H]1C[C@@H](CO)[C@@H](O)[C@@H]1Br` |
| Full Reaction | `>>` 格式完整反应式 |
📝 完整输出:
{radio_output}
输入图像: 含一个化学反应的 PNG/JPG
API 输出(原始):
Reaction: 1
Reactants: CC(C)(C)OC(=O)N[C@H]1C=C[C@H](C(=O)O)C1
Conditions: Br2, Pyridine[reagent], DME/H2O[solvent], 0-5°C[temperature], 68%[yield]
Products: CC(C)(C)OC(=O)N[C@@H]1C[C@H]2C(=O)O[C@H]2[C@@H]1Br
Full Reaction: CC(C)(C)OC(=O)N[C@H]1C=C[C@H](C(=O)O)C1>>CC(C)(C)OC(=O)N[C@@H]1C[C@H]2C(=O)O[C@H]2[C@@H]1Br | Br2[reagent], Pyridine[reagent], DME/H2O[solvent], 0-5°C[temperature], 68%[yield]
RxnIM 支持从一张图中解析多步反应:
Reaction: 2
Reactants: CC(C)(C)OC(=O)N[C@@H]1C[C@H]2C(=O)O[C@H]2[C@@H]1Br
Conditions: LiBH4[reagent], THF/H2O[solvent], -5°C[temperature], 90%[yield]
Products: CC(C)(C)OC(=O)N[C@@H]1C[C@@H](CO)[C@@H](O)[C@@H]1Br
Reaction: 3
Reactants: CC(C)(C)OC(=O)N[C@@H]1C[C@@H](CO)[C@@H](O)[C@@H]1Br
Conditions: 48% aq. HBr[reagent], IPA[solvent], 55°C[temperature]
Products: Br.N[C@@H]1C[C@@H](CO)[C@@H](O)[C@@H]1Br
提取的 SMILES 可直接传给 pharmaclaw-chemistry-query 技能进行二次分析:
用户: 分析这个反应图像 → RxnIM 提取 SMILES → 传入 pharmaclaw-chemistry-query →
→ 分子性质查询 + 2D 可视化 + 逆合成分析
触发词:"分析产物性质"、"可视化这个反应"、"做逆合成规划"
将结构化结果写入企业微信文档或腾讯文档存档。
| 限制 | 说明 | 缓解方案 |
|---|---|---|
| 图像质量依赖 | 低分辨率/模糊图像解析效果下降 | 建议上传 300 DPI 以上的清晰图 |
| SMILES 有效性 | 极少数情况下可能输出无效 SMILES | 使用 RDKit 验证,失败时提示用户 |
| API 延迟 | HuggingFace 免费版推理较慢 | 设置 timeout=120s,用户等待时显示进度 |
| 手写/扫描图像 | 效果弱于印刷版化学图像 | 建议使用印刷版或高清截图 |
| 显存要求 | 本地部署需要 ~16GB GPU | 优先推荐 HF 在线 API |
| 资源 | 链接 |
|---|---|
| HuggingFace 在线 Demo | https://huggingface.co/spaces/CYF200127/RxnIM |
| 模型权重下载 | https://huggingface.co/datasets/CYF200127/RxnIM(RxnIM-7b.zip) |
| 合成数据集 | Pistachio(HuggingFace 同上) |
| 真实数据集 | ACS Publications(HuggingFace 同上) |
| 源代码 | https://github.com/CYF2000127/RxnIM |
| 相关工作 ChemEAGLE | https://github.com/CYF2000127/ChemEAGLE |
@article{D5SC04173B,
author = {Chen, Yufan and Leung, Ching Ting and Sun, Jianwei and
Huang, Yong and Li, Linyan and Chen, Hao and Gao, Hanyu},
title = {Towards large-scale chemical reaction image parsing via a
multimodal large language model},
journal = {Chem. Sci.},
year = {2025},
volume = {16},
issue = {45},
pages = {21464--21474},
publisher = {The Royal Society of Chemistry},
doi = {10.1039/D5SC04173B},
url = {http://dx.doi.org/10.1039/D5SC04173B}
}
| 类别 | 依赖 |
|---|---|
| 在线 API | requests, base64(标准库) |
| 本地部署 | torch, transformers, datasets, pillow, numpy, nltk, pandas, mmengine, tensorboard, einops, tqdm, matplotlib, accelerate, SentencePiece, gradio, fastapi, uvicorn, bitsandbytes |
| 验证(可选) | RDKit(通过 chaining 调用 pharmaclaw-chemistry-query) |
| 环境 | Python 3.10+, CUDA 11.8+(本地部署) |