TRAIN YOUR OWN CHEMISTRY AGENT
用开源小模型,
训练你自己的化学研究 Agent。
一个 2–9B 的小模型,学会调用 RDKit、PubChem 和计算平台这些工具,再用可验证的化学规则做强化学习,就能在一张消费级显卡甚至笔记本上运行,数据不出本机。这份指南给出选型、数据构造、LoRA 微调、GRPO 强化学习、评测和部署的完整步骤,代码可以直接复制。
00路线总览
先让大模型(老师)带着工具把任务做对,把做对的过程记下来,教给小模型;再用程序能自动判分的化学任务做强化学习;最后在本机部署,接入 MolAstria 的 AI 助手和 AI 实验室。
- 定任务与工具写清要回答的问题和要调用的工具:RDKit、PubChem、Rowan、文献检索
- 选底座模型按显存与许可证挑 2–9B 的小模型
- 造数据老师模型生成工具调用轨迹,RDKit 校验,只留做对的
- LoRA 微调单卡几小时,让小模型学会格式与工具
- 强化学习GRPO + 可验证奖励:结构合法、约束满足
- 评测与部署ChemBench 与自建测试集;vLLM / Ollama 本地服务
只想先体验:装好 Ollama 后运行 ollama run qwen3.5:4b,再按第 5 步把它接入本站的 AI 助手,不需要训练就能用本地模型问目录、提候选分子。
01按你的显存选模型
选择显存和要做的事,下方表格会标出放得下的模型。显存是按参数量粗略估算的(4-bit 推理约 0.6 GB/十亿参数 + 1.5 GB;QLoRA 微调约 1 GB/十亿参数 + 4 GB;GRPO 约为微调的 1.6 倍),实际还取决于序列长度和批大小。
| 显存 | 能做什么 | 推荐 |
|---|---|---|
| 无独显 / Mac 16 GB | 推理 ≤4B;用 MLX-LM 做 ≤2B 的 LoRA | LFM3-1.7B、Qwen3.5-2B、Gemma 4 E2B |
| 8 GB | 4-bit 推理 ≤9B;QLoRA ≤2B | 推理 Qwen3.5-9B;微调 LFM3-1.7B、MiniCPM5-2B |
| 12–16 GB | QLoRA 4–9B;GRPO ≤3B | Qwen3.5-4B(推荐起步)、Granite 4.2 8B、Gemma 4 E4B |
| 24 GB | QLoRA ≤14B;GRPO 4–8B;4-bit 跑 ether0 | Qwen3.5-9B、Gemma 4 12B、Intern-S1-mini、Ministral 3 14B |
| 48 GB+ / 多卡 | MoE 微调、多卡 RL(verl) | gpt-oss-20b、Qwen3.6-35B-A3B、Nemotron 3.5 Lightning |
02开源小模型(底座候选)
以下是 2026 年 10 月可下载的主要小模型。点任意一行或它的“介绍”按钮,可以展开这个模型的优势、在化学 Agent 里适合做什么、注意事项和启动命令。
| 模型 | 参数 | 许可证 | 发布 | 一句话 | 链接 |
|---|---|---|---|---|---|
| LFM3-1.7B 新Liquid AI | 1.7B | LFM Open License 1.0 | 2026-10-23 | 专为本地 Agent 和单卡微调设计,4-bit 约 1 GB | HF ↗ |
优势
在化学 Agent 里适合做“调度员”:把用户问题拆成 RDKit、PubChem、Rowan 调用,返回 JSON;成本最低的微调起点。 注意官方说明不适合复杂多步推理和写代码类 Agent,知识型问题要配检索。许可证是 LFM Open License 1.0,不是 Apache,商用前先读条款。 跑起来 | |||||
| LFM3-VL-2B 新Liquid AI | 1.9B | LFM Open License 1.0 | 2026-10-19 | 端侧看图看视频,回答前先思考 | HF ↗ |
优势
在化学 Agent 里适合读谱图截图、结构式照片、仪器屏幕和实验录像,把看到的内容转成文字或结构化记录再交给工具。 注意小模型看图会出错,识别出的结构必须再用 RDKit 校验。许可证同 LFM3。 跑起来在 Hugging Face 下载 | |||||
| Qwen3.5-0.8B / 2B阿里通义 | 0.9B / 2.3B | Apache-2.0 | 2026-02-28 | 最小的 Qwen,适合原型和教学 | 0.8B ↗ 2B ↗ |
优势
在化学 Agent 里适合快速验证数据格式和训练流程:先在 0.8B 上把整条流水线跑通,再换大模型。 注意化学知识有限,必须配工具和检索使用。 跑起来 | |||||
| Qwen3.5-4B 推荐起步阿里通义 | 4.7B | Apache-2.0 | 2026-02-27 | 同尺寸里工具调用最强的一档,16 GB 显卡可微调 | HF ↗ |
优势
在化学 Agent 里适合通用的化学 Agent 底座:读文献摘要、调用工具、生成 SMILES 候选并解释理由。第一次训练推荐从它开始。 注意它是多模态架构,用 TRL / Unsloth 微调时按模型卡选择加载方式;思考模式输出较长,Agent 循环里注意 token 预算。 跑起来 | |||||
| Qwen3.5-9B 推荐阿里通义 | 9.7B | Apache-2.0 | 2026-02-27 | 10B 以内综合最强档之一,官方给出 vLLM 工具调用参数 | HF ↗ |
优势
在化学 Agent 里适合正式使用的主力 Agent:多工具编排、读长篇 SI、规划计算流程。24 GB 显卡可做 QLoRA。 注意GRPO 需要更多显存(约 24 GB 以上);思考模式下回复很长。 跑起来 | |||||
| Gemma 4 E2B / E4BGoogle DeepMind | 有效 2B / 4B | Apache-2.0 | 2026-03-02 | 端侧多模态:文字、图片、视频、语音 | E2B ↗ E4B ↗ |
优势
在化学 Agent 里适合实验室里的语音 / 拍照助手:念出试剂名查性质,拍下谱图问峰的归属,再交给工具核对。 注意“有效 2B / 4B” 指计算量,下载的总参数约 5.1B / 8.0B,显存按总参数估算。 跑起来 | |||||
| Gemma 4 12BGoogle DeepMind | 12B | Apache-2.0 | 2026-05-23 | 15B 以内最强的一档,消费级显卡可跑 | HF ↗ |
优势
在化学 Agent 里适合需要较强推理又要本地运行的场景:读论文图表、比较方法、写计算输入文件。 注意QLoRA 约需 16–24 GB 显存。 跑起来 | |||||
| Nemotron 3.5 Bolt-E4B 新NVIDIA | 有效 4B | OpenMDW-1.1 | 2026-10-05 | NVIDIA 在 Gemma 4 E4B 上继续后训练,提供 4 GB 量化版 | BF16 ↗ 4GB ↗ |
优势
在化学 Agent 里适合NVIDIA 显卡上的本地助手和嵌入式设备(如 Jetson)上的实验室终端。 注意官方定位偏向语音和设备助手;许可证为 OpenMDW-1.1,使用前阅读条款。 跑起来按模型卡用 vLLM 部署(卡里附有完整命令和 DFlash 推测解码配置)。 | |||||
| Granite 4.2 3B / 8BIBM | 3.7B / 8.8B | Apache-2.0 | 2026-08-07 | 企业级工具调用与 Agent,测试过中文 | 3B ↗ 8B ↗ |
优势
在化学 Agent 里适合稳定的企业环境:内部电子实验记录本(ELN)问答、标准化报告、按模板调用计算平台。 注意不能看图;8B 的 KV 缓存较大,长上下文时要留足显存。 跑起来 | |||||
| MiniCPM5-2BOpenBMB / 面壁 | 2.5B | Apache-2.0 | 2026-09-06 | 2B 级综合最强之一,训练数据开放 | HF ↗ |
优势
在化学 Agent 里适合8 GB 显卡上的可微调底座;学习“Agent 训练数据长什么样”的好范本。 注意纯文本;知识量受 2B 体量限制。 跑起来Hugging Face 提供 GGUF、MLX 和 GPTQ 版本,可直接导入 Ollama 或 llama.cpp。 | |||||
| Ministral 3(3B / 8B / 14B)Mistral AI | 3.8B–14B | Apache-2.0 | 2025-12 | 原生函数调用与 JSON 输出,另有推理版 | 8B ↗ 14B 推理 ↗ |
优势
在化学 Agent 里适合需要严格 JSON 输出的流水线(例如把文献实验步骤抽成结构化反应记录)。 注意2025 年发布,比 Qwen3.5、Gemma 4 早一代。 跑起来Hugging Face 有官方 GGUF 版本( | |||||
| Phi-4-mini(instruct / reasoning)Microsoft | 3.8B | MIT | 2025 | MIT 许可最宽松,数学和逻辑推理强 | instruct ↗ reasoning ↗ |
优势
在化学 Agent 里适合计算题与单位换算、化学计量、热力学推导这类需要严谨推理的子任务。 注意2025 年发布,已不是同尺寸最强;中文能力弱于 Qwen。 跑起来Hugging Face 下载,或在 Ollama 搜索 | |||||
| SmolLM3-3BHugging Face | 3.1B | Apache-2.0 | 2025-07 | 训练数据和配方完全公开 | HF ↗ |
优势
在化学 Agent 里适合课程、复现实验,以及需要完全可审计训练来源的研究。 注意原生只支持 6 种欧洲语言,不含中文;中文场景请选 Qwen、MiniCPM 或 Granite。 跑起来Hugging Face 下载,Transformers / vLLM / llama.cpp 均支持。 | |||||
| Olmo 3 7B(Instruct / Think)Ai2 | 7.3B | Apache-2.0 | 2025-11 | 每个训练阶段的检查点都公开 | HF ↗ |
优势
在化学 Agent 里适合研究“强化学习到底改变了什么”:对比 SFT、DPO、RLVR 各阶段在化学任务上的差异。 注意Ai2 把预期用途定为研究和教育;中文能力一般。 跑起来Hugging Face 下载,vLLM 直接支持。 | |||||
03低显存 MoE:总参数大,每次只激活一小部分
混合专家(MoE)模型每个 token 只用到少量参数,推理快、能力强,但显存按总参数算。适合当本地“老师”来造数据,或者在 24–80 GB 上做更强的 Agent。
| 模型 | 总参数 / 激活 | 许可证 | 发布 | 一句话 | 链接 |
|---|---|---|---|---|---|
| gpt-oss-20bOpenAI | 21B / 3.6B | Apache-2.0 | 2025-08 | 16 GB 内存可跑,推理强度可调 | HF ↗ |
优势
在化学 Agent 里适合本地老师模型:在自己机器上批量生成工具调用轨迹,数据不出本机。 注意使用 harmony 对话格式,自己写推理代码时按官方说明处理。 跑起来 | |||||
| Qwen3.6-35B-A3B阿里通义 | 36B / 约 3B | Apache-2.0 | 2026-04-15 | Agent 编程能力强,长上下文 | HF ↗ |
优势
在化学 Agent 里适合写和改计算脚本(ORCA / Gaussian 输入、RDKit 流程)的编程型 Agent,或作为本地老师。 注意显存按 36B 总参数估算,4-bit 约需 24 GB。 跑起来 | |||||
| Gemma 4 26B-A4BGoogle DeepMind | 26B / 约 4B | Apache-2.0 | 2026-03-11 | Gemma 4 的 MoE 版本,速度接近 4B | HF ↗ |
优势
在化学 Agent 里适合24 GB 显卡上的主力 Agent。 注意不支持音频输入(音频只在 E2B、E4B、12B 上)。 跑起来 | |||||
| Nemotron 3.5 Lightning-30B-A3BNVIDIA | 31.6B / 约 3B | OpenMDW-1.1 | 2026-08-01 | 官方定位就是“拿来再训练” | HF ↗ |
优势
在化学 Agent 里适合有多卡资源的课题组做领域继续训练(把化学文献、内部数据灌进去)。 注意中文不在官方支持语言里;训练需要较大显存。 跑起来按模型卡用 vLLM 或 SGLang 部署,卡内有各硬件的验证配置。 | |||||
| LFM2.5-24B-A2BLiquid AI | 24B / 约 2B | LFM Open License 1.0 | 2026-10-12 | 激活参数极少,CPU 也能跑得动 | HF ↗ |
优势
在化学 Agent 里适合没有独显但内存大(32 GB+)的机器上运行较强的本地 Agent。 注意LFM 许可证;显存 / 内存按 24B 总参数估算。 跑起来下载官方 GGUF 用 llama.cpp 运行。 | |||||
04化学专用模型
已经在化学数据上继续训练或强化学习过的模型,可以直接用,也可以作为你继续微调的起点。
| 模型 | 参数 | 许可证 | 发布 | 一句话 | 链接 |
|---|---|---|---|---|---|
| ether0FutureHouse | 24B | Apache-2.0 | 2025-06 | 用强化学习训练的化学推理模型,输出 SMILES | HF ↗ 论文 ↗ |
优势
在化学 Agent 里适合分子设计子任务:给出约束,让它提出候选结构,再交给 RDKit 和计算平台验证。和本站 AI 实验室的思路一致。 注意只用英文提问;它的输出是分子而不是长篇对话,不适合当通用助手。4-bit 约需 16 GB。 跑起来 | |||||
| Intern-S1-mini 化学底座上海 AI 实验室 | 8.5B | Apache-2.0 | 2025-08 | 科学多模态,分词器原生认识分子式 | HF ↗ |
优势
在化学 Agent 里适合想要“懂化学的通用底座”时的首选:在它上面做 LoRA,比从通用模型开始需要的化学数据更少。 注意2025 年 8 月发布;多模态模型的微调按模型卡的处理器(processor)加载。 跑起来Hugging Face 有 GGUF 和 FP8 版本( | |||||
| ChemDFM-R-14BOpenDFM / 上海交大 | 14.8B | AGPL-3.0 | 2025-10 | 原子级化学知识增强的推理模型 | HF ↗ |
优势
在化学 Agent 里适合分子描述、反应解释、官能团层面的推理;也可以当老师模型生成化学推理数据。 注意AGPL-3.0:修改后通过网络对外提供服务,需要公开源代码。商用前务必评估。 跑起来Hugging Face 下载,用 Transformers 或 vLLM 加载(14B,4-bit 约 10 GB)。 | |||||
| TxGemma(2B / 9B / 27B)Google | 2.6B–27B | HAI-DEF 条款(需同意) | 2025-03 | 药物性质预测与治疗学对话 | 9B chat ↗ 2B predict ↗ |
优势
在化学 Agent 里适合药物化学方向:给候选分子快速打 ADMET 类预测分,作为 Agent 的一个工具。 注意需在 Hugging Face 上同意 Health AI Developer Foundations 条款后才能下载;基于上一代 Gemma 2。 跑起来同意条款后用 Transformers 加载。 | |||||
05检索、重排与分子表示
小模型记不住全部化学知识,要配检索(RAG):把论文、SI、组内笔记切块向量化,回答前先查。分子表示模型则把 SMILES 变成向量,用来做相似性搜索和性质预测。
| 模型 | 用途 | 许可证 | 说明 |
|---|---|---|---|
| Qwen3-Embedding 0.6B / 4B | 文本向量 | Apache-2.0 | 多语言,中文文献检索首选;0.6B 可在 CPU 上跑 |
| Nemotron-3.5-Embed-1B 新 | 文档页面向量 | OpenMDW-1.1 | 2026-10 发布,直接对 PDF 页面图像做检索,图表、谱图、表格不用先转文字 |
| Nemotron-3.5-Rerank-8B 新 | 重排 | OpenMDW-1.1 | 2026-10 发布,对初检结果重新排序,提高引用准确率 |
| bge-m3 + bge-reranker-v2-m3 | 文本向量 + 重排 | MIT / Apache-2.0 | 经典多语言组合,资料最多 |
| MoLFormer-XL | SMILES 向量 | Apache-2.0 | IBM 在大规模 PubChem / ZINC 分子上预训练,用作性质预测特征 |
| ChemBERTa-77M-MTR | SMILES 向量 | 见模型卡 | DeepChem 社区模型,多任务回归预训练,轻量 |
06老师模型:用来造训练数据
小模型的训练数据最好来自更强的模型带着工具把任务做对的过程。下面的老师可以通过 API 调用,部分也有开放权重。
| 老师 | 怎么用 | 说明 |
|---|---|---|
| DeepSeek V4.1 Flash / V4 Pro | API:deepseek-flash、deepseek-v4-pro;开放权重 HF ↗ | 价格低、支持工具调用和思考强度调节;本站 AI 助手已接入 |
| Meta Muse Spark / Wonder | Meta Model API:muse-spark-1.3、muse-wonder-1.0;开放权重 Muse Spark Open ↗ | Wonder 是本站 AI 实验室推荐的“化学家”;开放权重版 816B,需申请,适合有集群的团队 |
| Intern-S1-Pro | 开放权重 HF ↗ | 科学领域大模型(Apache-2.0),化学知识强,可做离线老师 |
| gpt-oss-20b、Qwen3.6-35B-A3B | 本机运行(见上表) | 数据完全不出本机的本地老师 |
用 API 输出训练模型前,先确认该服务的使用条款允许这样做;生成的数据一律用工具校验后再入库。
07第 1 步:造数据——老师带工具做题,只留做对的
写一份任务清单(tasks.txt,每行一个问题,例如“给出 3 个含两个 F、不超过 12 个重原子的碳酸酯溶剂并核对分子式”),让老师模型在真实工具环境里作答,把完整的对话和工具调用记下来。只保留能被程序验证为正确的轨迹(拒绝采样),这样小模型学到的是“正确地用工具”,而不是老师的幻觉。
# pip install openai rdkit
# Generate tool-use trajectories with a teacher model and keep only the ones RDKit can verify.
import json, os
from openai import OpenAI
from rdkit import Chem
from rdkit.Chem import Descriptors, rdMolDescriptors
teacher = OpenAI(base_url="https://api.deepseek.com", api_key=os.environ["DEEPSEEK_API_KEY"])
TOOLS = [{
"type": "function",
"function": {
"name": "describe_molecule",
"description": "Validate a SMILES string and return its canonical form, formula, weight and heavy-atom count.",
"parameters": {"type": "object", "properties": {"smiles": {"type": "string"}}, "required": ["smiles"]},
},
}]
def describe_molecule(smiles: str) -> dict:
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return {"valid": False}
return {"valid": True, "canonical": Chem.MolToSmiles(mol), "formula": rdMolDescriptors.CalcMolFormula(mol),
"mw": round(Descriptors.MolWt(mol), 2), "heavy_atoms": mol.GetNumHeavyAtoms()}
def run(task: str, max_steps: int = 6) -> list[dict]:
messages = [{"role": "system", "content": "You are a careful chemist. Check every structure with the tool before answering."},
{"role": "user", "content": task}]
for _ in range(max_steps):
msg = teacher.chat.completions.create(model="deepseek-flash", messages=messages, tools=TOOLS).choices[0].message
turn = msg.model_dump(exclude_none=True)
turn.pop("reasoning_content", None) # keep the visible answer and tool calls only
messages.append(turn)
if not msg.tool_calls:
return messages
for call in msg.tool_calls:
result = describe_molecule(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
return messages
def verified(messages: list[dict]) -> bool:
# Keep a trace only if the tool was used, every structure it saw was valid, and the run ended with an answer.
results = [json.loads(m["content"]) for m in messages if m["role"] == "tool"]
return bool(results) and all(r["valid"] for r in results) and messages[-1]["role"] == "assistant"
with open("traces.jsonl", "w", encoding="utf-8") as out:
for task in open("tasks.txt", encoding="utf-8"):
trace = run(task.strip())
if verified(trace):
out.write(json.dumps({"messages": trace, "tools": TOOLS}, ensure_ascii=False) + "\n")数据从哪来
- 自己组里的真实问题:组会记录、常被问的计算设置、合成路线讨论。
- 公开指令数据:SMolInstruct、Mol-Instructions(CC-BY-4.0)。
- 可自动判分的任务:ether0-benchmark 的题型很适合改写成强化学习任务。
- 本站 AI 实验室导出的候选与计算结果(CSV / JSON),可以直接变成“提出 → 校验 → 解释”的训练样本。
经验
- 500–2,000 条高质量轨迹就能让小模型学会工具格式;质量比数量重要。
- 按 InChIKey 给分子去重,并把同一分子只放进训练集或测试集之一,避免泄漏。
- 保留一部分“工具报错、模型改正”的轨迹,小模型才学得会纠错。
08第 2 步:LoRA 微调——让小模型学会格式与工具
用 TRL + PEFT 做 LoRA:只训练少量附加参数,单卡几小时完成。想更快、更省显存可以换成 Unsloth;不想写代码可以用 LlamaFactory 的网页界面。
# pip install "trl>=0.20" peft datasets accelerate
# LoRA fine-tuning on the verified traces. A 2–4B model fits on one 16–24 GB GPU.
from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer
BASE = "LiquidAI/LFM3-1.7B" # or ibm-granite/granite-4.2-3b; for multimodal bases (Qwen3.5, Gemma 4) follow their model card
data = load_dataset("json", data_files="traces.jsonl", split="train").train_test_split(test_size=0.05, seed=0)
trainer = SFTTrainer(
model=BASE,
train_dataset=data["train"],
eval_dataset=data["test"],
peft_config=LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05, target_modules="all-linear", task_type="CAUSAL_LM"),
args=SFTConfig(
output_dir="chem-agent-lora",
num_train_epochs=2,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=1e-4,
max_length=4096,
gradient_checkpointing=True,
bf16=True,
logging_steps=10,
eval_strategy="steps",
eval_steps=100,
),
)
trainer.train()
trainer.save_model("chem-agent-lora")# Merge the adapter into the base weights so vLLM / llama.cpp can load a single model.
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
model = AutoPeftModelForCausalLM.from_pretrained("chem-agent-lora")
model.merge_and_unload().save_pretrained("chem-agent-merged")
AutoTokenizer.from_pretrained("chem-agent-lora").save_pretrained("chem-agent-merged")Mac 用户:MLX-LM 的 LoRA 教程可以在 Apple 芯片上微调 ≤4B 的模型。
09第 3 步:强化学习——用化学规则当裁判
GRPO(DeepSeekMath 提出)让模型对同一题生成多个答案,按奖励比较优劣,不需要单独的奖励模型。化学特别适合这种“可验证奖励”:结构合不合法、元素和大小是否满足约束、性质是否落在目标范围,都能用 RDKit 或计算平台自动判断。ether0 就是这样训练出来的。
# pip install "trl>=0.20" rdkit datasets
# GRPO with a verifiable chemistry reward: RDKit grades every answer, no reward model needed.
import re
from datasets import Dataset
from rdkit import Chem, RDLogger
from trl import GRPOConfig, GRPOTrainer
RDLogger.DisableLog("rdApp.*")
ALLOWED = {"C", "H", "O", "F"}
TASK = ("Propose one lithium-battery electrolyte solvent containing only C, H, O and F, "
"with at most 12 heavy atoms and at least two fluorine atoms. Answer as ... .")
prompts = Dataset.from_list([{"prompt": [{"role": "user", "content": TASK}]}] * 256) # use many varied tasks in practice
def text_of(completion):
return completion[-1]["content"] if isinstance(completion, list) else completion
def chemistry_reward(completions, **kwargs):
rewards = []
for completion in completions:
found = re.search(r"(.*?) ", text_of(completion), re.S)
mol = Chem.MolFromSmiles(found.group(1).strip()) if found else None
if mol is None:
rewards.append(-1.0) # no answer or an invalid structure
continue
symbols = [a.GetSymbol() for a in mol.GetAtoms()]
score = 0.2 # a valid structure
score += 0.4 if set(symbols) <= ALLOWED else -0.4
score += 0.2 if mol.GetNumHeavyAtoms() <= 12 else -0.2
score += 0.2 if symbols.count("F") >= 2 else 0.0
rewards.append(score)
return rewards
trainer = GRPOTrainer(
model="chem-agent-merged", # start from the SFT model
reward_funcs=chemistry_reward,
train_dataset=prompts,
args=GRPOConfig(output_dir="chem-agent-grpo", num_generations=8, max_completion_length=512,
per_device_train_batch_size=8, gradient_accumulation_steps=4,
learning_rate=5e-6, bf16=True, logging_steps=5),
)
trainer.train()
trainer.save_model("chem-agent-grpo")好奖励的样子
- 能自动、确定地算出来:RDKit 解析、元素与原子数、官能团 SMARTS、分子量、相似度。
- 分层给分:先奖励“结构合法”,再奖励“满足约束”,最后奖励“性质达标”。
- 贵的打分(UMA、DFT)只用在少量样本上,或先离线算好再查表。
多卡与大规模
- verl:多卡、多节点的强化学习框架,支持多轮工具调用的 Agent RL。
- TRL GRPO 文档:奖励函数、vLLM 加速生成等参数说明。
- Unsloth:单卡 GRPO 更省显存。
10第 4 步:评测——训练前后都要量
11第 5 步:部署,并接入 MolAstria
把模型跑成 OpenAI 兼容的本地服务,然后在本站右上角 AI 助手 → 设置 → 其他兼容接口 里填上地址,AI 助手和 AI 实验室就会使用你自己的模型。请求只在你的浏览器和你的电脑之间往返。
# Serve the trained model with tool calling (pick the parser your base model's card recommends)
vllm serve ./chem-agent-grpo --served-model-name chem-agent --port 8000 \
--enable-auto-tool-choice --tool-call-parser hermes
# MolAstria settings: address http://localhost:8000/v1, model chem-agent, key: any text# 1) Convert to GGUF with llama.cpp, then register it with Ollama
python llama.cpp/convert_hf_to_gguf.py chem-agent-grpo --outfile chem-agent.gguf
echo "FROM ./chem-agent.gguf" > Modelfile
ollama create chem-agent -f Modelfile
# 2) Allow molastria.com to call your local Ollama, then start it
OLLAMA_ORIGINS=https://molastria.com ollama serve
# Windows PowerShell: $env:OLLAMA_ORIGINS="https://molastria.com"; ollama serve
# MolAstria settings: address http://localhost:11434/v1, model chem-agent, key: any text浏览器第一次从网页访问本机服务时,可能弹出“允许访问本地网络设备”的提示,选择允许即可。OLLAMA_ORIGINS 的说明见 Ollama 文档,OpenAI 兼容接口见 这里;vLLM 的工具调用参数见 vLLM 文档。
把化学工具做成 MCP 服务
用 MCP 把 RDKit 等工具包装一次,你的小模型、Claude、以及其他支持 MCP 的客户端都能直接调用。
# pip install mcp rdkit
from mcp.server.fastmcp import FastMCP
from rdkit import Chem
from rdkit.Chem import Descriptors, rdMolDescriptors
mcp = FastMCP("chem-tools")
@mcp.tool()
def describe_molecule(smiles: str) -> dict:
"""Validate a SMILES string and return canonical SMILES, formula, weight and heavy-atom count."""
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return {"valid": False}
return {"valid": True, "canonical": Chem.MolToSmiles(mol), "formula": rdMolDescriptors.CalcMolFormula(mol),
"mw": round(Descriptors.MolWt(mol), 2), "heavy_atoms": mol.GetNumHeavyAtoms()}
if __name__ == "__main__":
mcp.run()12工具、框架与数据集
| 类别 | 项目 | 用途 |
|---|---|---|
| 微调 | Unsloth · TRL · PEFT · LlamaFactory · Axolotl | LoRA / QLoRA、SFT、DPO、GRPO;LlamaFactory 有网页界面 |
| 强化学习 | verl · TRL GRPO | 多卡 Agent RL;单卡 GRPO |
| 推理服务 | vLLM · SGLang · Ollama · llama.cpp · MLX-LM | OpenAI 兼容接口、量化、Apple 芯片 |
| Agent 框架 | smolagents · LangGraph · OpenAI Agents SDK · MCP Python SDK | 多步工具调用、状态管理、工具标准化 |
| 化学工具 | RDKit · PubChem PUG REST · rowan-python · fairchem(UMA) · DeepChem | 结构校验、数据库查询、云端量化计算、机器学习势 |
| 参考工作 | ChemCrow(代码)· ether0(代码) | 化学工具 Agent 的早期代表;化学推理强化学习 |
| 数据与评测 | ChemBench · ether0-benchmark · SMolInstruct · Mol-Instructions · OMol25(需申请) | 评测、指令数据、可验证任务、分子量子化学数据 |
13常见坑
结果可信度
- 小模型会编造 SMILES、CAS 号和文献;所有结构一律过 RDKit,所有数据一律回到数据库核对。
- 不要让模型直接给数值性质(沸点、电位)当结论;数值来自计算或数据库,模型负责调度和解释。
- 训练集和测试集按分子去重,否则分数虚高。
许可证与安全
- 商用优先 Apache-2.0 / MIT;LFM(LFM Open License)、ChemDFM(AGPL-3.0)、TxGemma(HAI-DEF)、Nemotron(OpenMDW)都要先读条款。
- 微调可能削弱底座原有的安全行为;涉及危险物质合成的请求要在工具层拦截。
- API 老师的服务条款可能限制用输出训练模型,使用前确认。
模型名称、参数量、许可证与发布日期核对自各模型的 Hugging Face 官方页面(2026-10-28);工具仓库核对自 GitHub。显存数字为粗略估算。新模型发布很快,使用前请以模型卡为准。相关页面:AI 实验室 · Agent 工程 · 资源目录