单位 2 / 11

分子表示和化学结构:使用 SMILES、InChI 和 RDKit 进行验证

收益:

  • 能够不通过名称而是通过结构表示来识别分子(SMILES 与人类,InChI/InChIKey 与数据库)
  • 能够通过 RDKit 解析、验证和规范化人工智能给出的每个 SMILES 来检测无效或不正确的结构
  • 能够理解分子量和分子式等确定性量应该从基于规则的工具获得,而不是从语言模型获得。

在化学中安全使用人工智能的首要条件是用机器和人类都能理解的语言编写分子。你说“苯酚”,AI答对了;但当你说“酸”时,就有成千上万种可能性。名字含糊不清;结构表示是精确的。在本单元中,我们将学习将分子转换为文本的两种基本符号(SMILES 和 InChI)以及确定性验证它们的工具(RDKit)。我们的目标:以一种永远不会误解的方式将分子交给AI,并用工具确认AI产生的结构。

什么是微笑?

SMILES(简化分子输入行输入系统)是一种在单行文本中写入分子的格式。原子用字母表示,键用符号表示,环用数字表示。示例:

  • 乙醇:CCO(碳-碳-氧;隐含氢)。
  • 苯:c1ccccc1(小写“c”表示芳香碳;1 关闭环)。
  • 阿司匹林:CC(=O)Oc1ccccc1C(=O)O。
  • 咖啡因:Cn1cnc2c1c(=O)n(C)c(=O)n2C。

SMILES 的强大之处在于它在一行中承载了整个链接结构;它的弱点是同一个分子可以有多个有效的 SMILES(这称为非规范性)。我们稍后将使用 RDKit 解决这个问题。

提示:分子的“规范 SMILES”是该分子的单一标准拼写。要查看两个 SMILES 是否是同一分子,请将它们规范化并进行比较;它们在文本上不应该相等,但它们应该是相等的分子。

InChI是什么?

InChI(国际化学标识符)是由IUPAC制定的标准标识符。与 SMILES 的不同之处在于,相同的分子总是给出相同的 InChI;也就是说,它本质上是规范的。它又长又难读,但非常适合数据库匹配。缩写的“InChIKey”(27 个字符摘要)用于搜索。

  • 阿司匹林 InChIKey:BSYNRYMUTXBXSQ-UHFFFAOYSA-N。

规则:人们说 SMILES(读),机器和数据库匹配 InChI/InChIKey(精确)。给人工智能微笑;使用 InChIKey 在数据库中确认。

RDKit:确定性验证引擎

RDKit 是一个开源化学信息学库。与语言模型不同,它是基于规则的:解析 SMILES,计算分子量,生成规范 SMILES,返回 InChI/InChIKey,绘制分子。所以RDKit“计算”AI“预测”什么。这是工作流程的核心:AI 生成,RDKit 验证。

基本验证流程:

from rdkit import Chemfrom rdkit.Chem import Descriptors, Drawsmiles = "CC(=O)Oc1ccccc1C(=O)O" Chem.MolToSmiles(mol)) print("分子式:", Chem.rdMolDescriptors.CalcMolFormula(mol)) print("分子量:", round(Descriptors.MolWt(mol), 2), "g/mol") print("InChIKey:", Chem.MolToInchiKey(mol))

如果 MolFromSmiles 返回 None,则 AI 给了你一个无效的分子;仅此一点就是一个非常有价值的警告。如果有效,则不再需要向语言模型询问分子量;它决定性地掌握在你的手中。

一步步:AI+RDKit互操作

  1. 识别分子:给人工智能起名字,要求微笑。例如,“验证扑热息痛的规范 SMILES”。
  2. 验证:使用 MolFromSmiles 解析传入的 SMILES。如果没有,则拒绝。
  3. Canonicalize:使用 MolToSmiles 检索规范拼写;从现在开始一直使用这个。
  4. 计算数字:从 RDKit(而不是从 AI)获取分子量、分子式、环数、氢键供体/受体数量等。
  5. 修复ID:生成InChIKey,在数据库(PubChem)中搜索,确认该分子确实是您想要的化合物。

四个可复制模板

1)请求SMILES(从名词到结构):

任务:给出以下化合物的标准 SMILES。化合物:扑热息痛(对乙酰氨基酚)。规则:仅给出 SMILES 字符串和 InChIKey,不添加任何进一步的解释。如果不确定,请写“UNSURE”,请勿弥补。

2)SMILES验证请求(从结构到控制):

检查下面的 SMILES:CC(=O)Nc1ccc(O)cc1 问题:1) 这是一个有效的 SMILES吗?2) 它对应于什么化合物(通用名称)?3) 分子式是什么?注意:我将使用 RDKit 计算准确的分子量;你只需给出你的结构解释。

3)比较两种表示:

我有两个微笑:A) OCCB) CCO 任务:这些是相同的分子还是不同的?写下你的推理。注意:我将通过在 RDKit 中规范化你的答案来交叉检查你的答案。

4)结构解释(用于学习目的):

SMILES:Cn1cnc2c1c(=O)n(C)c(=O)n2CT任务:逐段阅读此 SMILES,并用简单的土耳其语解释每个符号的含义(原子、键、环、芳香性)。还要告诉它是哪种化合物。

弱提示/强提示

弱:

给出对乙酰氨基酚的性质。

“特征”含糊不清;人工智能生成从分子量到熔点的随机数,其中一些可能是错误的。

强:

化合物:对乙酰氨基酚。1) Canonical SMILES 和 InChIKey ver.2) 给出分子式。规则:不要给出数值,例如分子量、熔点等;我将通过 RDKit/PubChem 获取它们。只需提供构建 ID 即可。

区别:我们将人工智能引导到它的强项(结构同一性),远离它的弱项(实验数字)。

印象比较

特征

微笑

英奇/英奇Key

可读性

高(对人友好)

低(机器友好)

规范性

如有变更(需要封圣)

天生单身

用途

人类交流、绘图、输入

数据库匹配、身份

立体化学

支持(@符号)

支撑(分层)

给予人工智能

理想的

非常适合确认

迷你箱

情况 1 — 两个名字,一个分子。一名学生认为“N-乙酰基对氨基苯酚”和“对乙酰氨基酚”是不同的化合物,并计划进行两个单独的实验。当在 RDKit 中规范化他们的 SMILES 时,他们都是 CC(=O)Nc1ccc(O)cc1;这是同一个分子。失去:半天的计划;增益:可以通过 2 分钟的规范化检查来避免。

案例 2 — 无效的 SMILES 捕获。 AI 返回 CC(=O)Nc1ccc(O)cc1C( 为变体(括号未关闭)。学生运行 MolFromSmiles,它返回 None,立即看到错误并要求更正 SMILES。如果没有验证,错误的结构将传播到所有帐户。

情况 3 — 分子量不正确。 YZ表示布洛芬(C13H18O2)的“分子量214.3g/mol”。 RDKit 计算结果为 206.28 g/mol。 0.1 mol 的差异:与 YZ 21.43 g,实际为 20.63 g。 3.9% 的差异会扰乱化学计量和产率计算。它带来了确定性微积分。

常见错误

  • 给出分子的名称。同义词/商品名很混乱。始终包含 SMILES 或 InChI。
  • 比较 SMILES 而不对其进行规范化。 OCC和CCO在文字上不同,但分子上是相同的。
  • 向舌模型询问分子量。这是确定性计算;它是通过 RDKit 完成的或通过公式手动完成的。
  • 没有注意到无效的微笑。不检查 MolFromSmiles None 的返回并继续使用错误的结构。
  • 忽略立体化学。两种对映体(镜像异构体)可能表现出不同的生物效应;跳过 SMILES 中的 @/@@ 符号。
注意:相同的分子式并不代表不同的分子。 C2H6O既是乙醇(CCO)又是二甲醚(COC)。公式的平等不是同一性的平等;使用 InChIKey 进行识别。

综上所述

  • 通过结构符号而不是名称来识别分子:SMILES 与人类,InChI/InChIKey 与数据库。
  • RDKit 是确定性的; AI预测,RDKit计算验证。
  • 使用 MolFromSmiles 解析每个 AI SMILES 并检查 None,然后规范化。
  • 从 RDKit(而不是从语言模型)获取分子量和分子式等数字。
  • 分子式相同并不意味着分子相同;使用 InChIKey 进行识别。

应用任务

选择三种化合物(例如咖啡因、布洛芬、甘氨酸)。向人工智能询问每个人的标准微笑。然后编写一个RDKit脚本(使用上面的模板)并生成:canonical SMILES、分子式、分子量、InChIKey。 AI给出的SMILES中有多少是有效的?如果 YZ 也给出了分子量,则计算与 RDKit 值的百分比差异。将你的发现绘制在一张小表格中。

清单

  • [ ] 我知道 SMILES 和 InChI/InChIKey 是什么以及何时使用它们。
  • [ ] 我用 MolFromSmiles 验证 AI 给出的每一个 SMILES。
  • [ ] 在比较 SMILES 之前,我将它们规范化。
  • [ ] 我从 RDKit 获取分子量和分子式,而不是从语言模型获取。
  • [ ] 我使用 InChIKey 确认数据库中的分子身份。
  • [ ] 我知道立体化学很重要的情况。