公司动态

ChemCrow完整上手指南:用LangChain化学AI工作流让分子查询、安全验证与文献调研一次跑通

📅 2026/8/20 21:43:05
ChemCrow完整上手指南:用LangChain化学AI工作流让分子查询、安全验证与文献调研一次跑通
ChemCrow完整上手指南用LangChain化学AI工作流让分子查询、安全验证与文献调研一次跑通【免费下载链接】chemcrow-publicChemcrow项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public假设你手上有一个新分子需要回答三个问题它的分子量是多少它是不是受管控的化学物质最近有哪些论文研究过它手动去PubChem、查管控清单、再翻文献加起来至少一小时。而ChemCrow 化学AI工作流把这套流程压缩成了几句自然语言。这篇文章不打算给你堆功能清单而是带你以完成这趟查询任务为主线一步步把 ChemCrow 跑起来并看懂它在背后做了什么。上图是 ChemCrow 在 HuggingFace 上的交互演示界面。你可以直接用自然语言提问也能在侧边栏看到代理每一步调用了哪个化学工具。先弄明白ChemCrow 到底是什么东西一句话版ChemCrow 是一个把会聊天的 LLM和会计算的化学工具绑定在一起的智能代理。你平时用 ChatGPT 问化学问题它经常一本正经地胡说八道因为大模型是背出来的知识不会真的去查数据库、做计算。ChemCrow 的解决思路很朴素既然模型不会算就让它学会用工具——遇到分子量问题就调用 RDKit 去算遇到安全性问题就去查 PubChem遇到文献问题就调 paper-qa 检索论文。整个项目建立在 LangChain 的 Agent 机制上核心类就一个在 chemcrow/agents/chemcrow.py 里。它的运行循环大致是你提问LLM 决定下一步用哪个工具Action工具返回真实结果ObservationLLM 根据结果继续思考直到凑齐答案最后把整个推理过程整理成一段通顺的中文/英文回答。所以你会发现ChemCrow 的答案每一步都有据可查而不是模型凭空生成。这正是它和直接问大模型最大的区别。任务第一步5 分钟跑通最小可用版本上手成本其实比你想的低一个pip install一个 API key三行代码。pip install chemcrow export OPENAI_API_KEY你的-openai-api-key然后建一个 Python 文件写入from chemcrow.agents import ChemCrow chem_model ChemCrow(modelgpt-4-0613, temp0.1, streamingFalse) result chem_model.run(What is the molecular weight of tylenol?) print(result)这段代码在做的事新建一个 ChemCrow 代理指定 GPT-4 作为推理大脑temp0.1让回答更偏确定性然后问它泰诺的分子量是多少。运行后你会看到代理在终端里输出一串 Thought思考→ Action动作→ Observation观察结果最后给出答案。有几个值得留意的参数tools_model默认是gpt-3.5-turbo-0613用来决定调用哪个工具比主模型便宜是省钱的小设计max_iterations默认 40限制代理最多思考多少轮防止它陷入死循环api_keys字典参数可以把 SERP、RXN4CHEM 等第三方 key 一起传进去一次性配置完。安装时要注意项目在 setup.py 里声明了 Python 版本要求3.9, 3.12如果你在用 Python 3.12建议先用 conda 建一个 3.10 或 3.11 的虚拟环境再装。任务第二步让它自己选工具而不是你替它选回到开头的分子查询任务。你不需要告诉 ChemCrow先去 PubChem 查 SMILES再用 RDKit 算分子量——它自己会做这个规划。这是因为 ChemCrow 内置了一批化学工具注册在 chemcrow/agents/tools.py 的make_tools()函数里。你不需要记住全部但知道有哪些牌可以打很有用你想做的事对应的工具输入数据来源名字转 SMILESName2SMILES分子名PubChem / ChemSpace分子量计算SMILES2WeightSMILESRDKit 本地计算官能团识别FunctionalGroupsSMILESRDKit 本地计算分子相似度MolSimilarity两个 SMILESRDKit 本地计算是否已申请专利PatentCheckSMILESSureChEMBL是否受管控ControlChemCheckCAS 号或 SMILES内置管控清单是否易爆ExplosiveCheckCAS 号PubChem GHS 分类文献检索问答LiteratureSearch具体问题Semantic Scholar paper-qa反应预测ReactionPredict反应物 SMILESIBM RXN4Chemistry逆合成分析ReactionRetrosynthesis产物 SMILESIBM RXN4Chemistry查化合物报价GetMoleculePriceSMILESChemSpace有个细节能看出这套设计的用心一部分工具按 API key 动态加载。比如GetMoleculePrice、WebSearch、ReactionPredict都需要额外密钥你没配置对应 key它们就不会被注册代理也就不会想用但用不了。这既省 token 也避免报错。每个工具的实现本身也值得一看。以 chemcrow/tools/rdkit.py 为例所有工具都是 LangChain 的BaseTool子类核心就两个方法_run()同步执行和_arun()异步执行目前大多未实现。比如SMILES2Weight用rdMolDescriptors.CalcExactMolWt()算分子量输入不是合法 SMILES 就返回 Invalid SMILES string。简单、干净、可读。任务第三步让安全性检查成为默认动作继续开头的任务——如果你的分子碰巧是受管控化学品ChemCrow 会不会拦下来答案是会而且是强制流程。看 chemcrow/agents/prompts.py 里的QUESTION_PROMPT你会发现系统给代理定了四条铁律凡是涉及设计合成路线、找相似分子、改造分子的任务第一步必须检查分子是否为受管控化学品是就立刻停止并报错只要问题里出现分子就先查是否受管控是就在最终答案里加警告规划合成路线前检查反应物和产物是否易爆是就警告执行合成前同样查易爆是就需要先征求你的许可。翻译成大白话ChemCrow 默认把伦理与安全前置而不是后置。它不会等你问这玩意儿安全吗而是每次动手前自己先查一遍。支撑这个能力的有两个数据源内置管控化学品清单chemcrow/data/chem_wep_smi.csv包含物质对应的 SMILES 与 CAS 号。ControlChemCheck先做精确匹配查不到再算 Tanimoto 相似度相似度超过 0.35 就提示与已知管控化学品高度相似PubChem 公开数据ExplosiveCheck和SafetySummary会去拉 PubChem 的 GHS 分类、毒性摘要、NFPA 危险分级再由 LLM 汇总成一份面向操作者、环境和社会的安全简报。这也是我把 ChemCrow 推荐给新手的原因之一它把负责任地做化学写进了默认行为而不是靠使用者自觉。任务第四步把文献调研也交给它如果你的下一步是写论文或设计实验ChemCrow 还集成了文献检索能力对应 chemcrow/tools/search.py 里的LiteratureSearch。它的流程值得一提先让 LLM 把你的问题压缩成一个不超过 10 词的检索式再通过 Semantic Scholar 找论文、下载 PDF用 paper-qa 建立索引最后基于检索到的论文回答你的问题并标注引用来源。整个过程从搜到读到总结是自动衔接的你不用手动下载任何 PDF。不过要提醒一句这套流程依赖paper-qa和 OpenAI Embeddings属于重操作耗时和 token 消耗都比前面的查询类任务高适合真正需要读文献的场景日常闲聊别用它。任务延伸给自己加一个专属化学工具这是我认为 ChemCrow 最值得花时间的地方——扩展它。工具的通用模板非常简单from langchain.tools import BaseTool class MyTool(BaseTool): name MyTool description 一句话说明这个工具能做什么、输入什么、返回什么。 def _run(self, query: str) - str: # 在这里写你的化学计算或数据库查询逻辑 return 工具返回的字符串结果 async def _arun(self, query: str) - str: raise NotImplementedError(Async not implemented.)三点需要注意description是给 LLM 看的。代理完全靠这段描述决定什么时候该用你的工具所以描述要写清输入格式和适用场景越具体越好——参考MolSimilarity的写法Input two molecule SMILES (separated by .), returns Tanimoto similarity._run()必须返回字符串因为观察结果要回传给 LLM 继续推理把自定义工具传给ChemCrow(tools[MyTool(), ...])就会替换掉默认工具集你可以在make_tools()的基础上拼接出自己的组合。整个项目的模块划分也很适合新手按图索骥chemcrow/agents/ —— 代理本体、提示词、工具装配chemcrow/tools/ —— 所有化学工具按功能拆成 rdkit / search / safety / rxn4chem / chemspace / converters 六个文件chemcrow/data/ —— 内置数据集如管控化学品清单chemcrow/frontend/ —— Streamlit 交互界面的回调与工具函数。给你的下一步做一个三连问小实验读完这篇你不需要记住所有工具名。真正值得动手做的是一个小实验用ChemCrow连续问三个问题——What is the molecular weight of ibuprofen?看它调 SMILES 工具Is ibuprofen a controlled chemical?看它走安全前置流程Find recent papers about ibuprofen toxicity.看它跑文献检索观察终端里的 Thought/Action 序列你会直观感受到工具调用和模型背书的区别分子量是算出来的管控状态是查清单查出来的文献答案是读了论文总结出来的。这就是 ChemCrow 化学AI工作流和普通聊天 AI 的本质差别也是它值得你在自己项目里复用的原因。如果你装了 chemcrow/frontend/ 相关依赖还可以用 Streamlit 把这套流程包装成网页界面把它变成组里人人都能用的化学查询小工具。从一条命令行到一组可信的化学答案这就是 ChemCrow 给你的完整路径。【免费下载链接】chemcrow-publicChemcrow项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考