OPEN DATA API · v1
开放数据接口
MolAstria 整理的数据可以直接被程序读取:每个数据集是一个静态 JSON 文件,用任何语言发一个 GET 请求就能拿到。网页可以跨域读取,AI 智能体也可以直接用。想让程序提交计算,看最后的 计算接口
搜一下
下面这个搜索台只用了开放接口和一个不到 200 行的 JS 库,没有服务器。中英文同义词互通:搜“密度泛函”也会找到只写了 DFT 的条目。
这次搜索的代码
跟着上面的搜索变,复制就能跑。
数据集
正在读取数据集列表…
总入口列出全部数据集、条数和核对日期: https://molastria.com/api/v1/index.json
嵌到你的网页里
一行代码,把一组资源放到课程主页、课题组 wiki 或博客上。卡片自带样式,不受所在页面影响;数据更新后卡片跟着更新。
给 AI 和程序
llms.txt- 给大模型看的站点说明,告诉它数据在哪、怎么署名。
openapi.json- OpenAPI 3.1 描述,数据接口和计算接口都在里面。数据的字段结构是从数据本身推出来的,可以直接导入支持 OpenAPI 的智能体平台和代码生成器。
molastria.mjs- 零依赖的 JS 库,浏览器、Deno、Node 18 以上都能用,带中英互通的搜索。
molastria.py- Python 客户端,一个文件,不用安装别的包。读数据集,也能一行提交计算并等结果,用法见下面的计算接口。
chemdb-agent- MolAstria 的 MCP 服务器,装在自己电脑上,让 Claude 等客户端直接检索晶体、分子和量子化学数据,配上 API key 还能直接提交计算。它随包带着同一份资源目录,离线也能查。
约定
- 格式: 每个文件开头有三个字段:
schema(现在是 1.0)、updated(这份数据的核对日期)和count(条数)。条目放在数组items里,双语文字写成{ "zh": …, "en": … } - 版本: v1 只会加字段,不会删字段或改含义;要改就出 v2,v1 继续保留。
- 更新: 数据随网站一起发布,核对过才改日期。文件会被浏览器和 CDN 缓存约 10 分钟。
- 用量: 没有次数限制。文件不大,建议在自己这边缓存一天,不要每次请求都来取。
- 不保证: 这是个人运营的免费服务,尽力保持可用,但没有可用性承诺。链接和价格会过时,每个数据集都带核对日期,重要的事请到原始出处再核一次。
许可与署名
CC BY 4.0 许可:可以免费使用、转载和改编,包括商业用途,只要注明来源。署名写法: MolAstria (https://molastria.com)
这个许可适用于 MolAstria 自己整理和撰写的内容:条目的选取与分类、中英文说明、核对记录。第三方的名称、标题、链接和价格属于各自的权利人,这里只作事实引用。网站代码另按 MIT 许可开源。
计算接口
上面读的是整理好的数据,这一段让程序提交计算:用机器学习势(UMA、eSEN、AllScAIP、ANI-2x)做单点能、几何优化、振动频率、构象搜索、二面角扫描、分子动力学、反应能、电离能这些计算。任务排的队就是 在线模型页的队
要一个免费账号的 API key。带 key 的请求不限来源网站:脚本、笔记本、别人的网页都能调。
先把算力说清楚: 算力是站长电脑上的 RTX 2080,尽力而为,可能离线。没有可用性承诺:人多要排队,电脑关机就算不了。不要把有时限的事情压在它上面。
正在看这台电脑在不在线……
- 拿一个 key 用任何邮箱登录 账号页,在“API key”一栏生成。原文只显示一次,我们的数据库里只存它的哈希。
- 提交计算 发一个 POST 到
https://api.molastria.com/v1/jobs,请求头带Authorization: Bearer mola_…,马上拿到任务编号。 - 轮询结果 每隔两三秒 GET 一次
/v1/jobs/{id},直到status变成done(算完)或error(出错)
带上 key 试一次
key 只留在这个页面的内存里,只发给 api.molastria.com,刷新页面就没了。这次计算会算进你今天的次数。
下面的代码跟着上面的选择变,key 从环境变量里读,不会写进代码。
接口
| 请求 | 作用 |
|---|---|
GET /v1 | 这套接口的说明和文档地址,不用 key |
GET /v1/status | 电脑最近一次探测在不在线,最近 7 天每天的在线率。不用 key |
GET /v1/me | 这个 key 的档位,今天用了几次、还剩几次 |
GET /v1/models | 能用的模型、每个模型做哪些计算、每种计算花几次,以及电脑现在在不在线 |
POST /v1/jobs | 提交一个计算,返回任务编号、花了几次和今天的余量 |
GET /v1/jobs/{id} | 进度和结果;算完的任务保留一小时 |
结果和在线模型页拿到的是同一份,能量单位是 eV。提交时的字段: model (模型代号)、 job (计算代号)、 smiles / xyz (分子,二选一)、 charge (电荷,-2 到 2)、 spin (自旋多重度,1 到 4)、 params (这种计算自己的参数,都可以不给,标了“必填”的除外)
| 计算代号 | 算什么 | 花费(次) | 参数(params) |
|---|
反应能、键解离能和质子亲和能加上热校正时花 5 次,参数写 thermo: true
电离能、自旋态能隙、键解离能和质子亲和能只有能处理电荷和自旋的模型做。每个模型做哪些计算,看 GET /v1/models
规则
- 次数: 和网站上用的是同一份。不带 key 只能在网站上用,每天 40 次;免费账号的 key 每天 100 次;Pro 支持者 200 次。按上表的花费扣,从当天第一次计算起 24 小时后重置;被拒绝的和电脑离线时的计算不扣。所有 key 合起来每天还有一个总量,免得脚本把网站访客挤出队列,到了会返回 api_busy。每次提交的回答里有
usage,响应头里有X-RateLimit-Remaining - 一次一个: 同一个账号同时只能有一个任务在排队或计算,网站上提交的也算在内。等它算完再交下一个。
- 缓存: 算过的同一个任务会直接返回结果,同样计次。这时
status直接是done,没有任务编号。 - 模型许可: UMA、eSEN 和 AllScAIP 采用 FAIR Chemistry License,ANI-2x 是 MIT 许可,用它们算出的结果请遵守各自的许可并引用原论文。MACE 系列(MACE-OFF23、MACE-OMOL-0、MACE-MDP)采用学术软件许可(ASL),只限学术、非商业研究,所以不通过 API 提供,要用请到在线模型页。
- 请求头 User-Agent: 接口前面的 Cloudflare 会拒绝 Python urllib 默认的 User-Agent,返回 403,而且不是 JSON。像上面的示例那样给请求设一个自己的 User-Agent 就可以。
- 地区: 按照模型许可要求遵守的出口管制规定,部分地区不能使用。
- 保管好 key: 一个账号最多 3 个。不要把 key 写进公开的网页或公开的代码仓库;泄露了就到账号页撤销,撤销立刻生效。
- 报错: 出错时返回
{ "error": { "code", "message", "message_zh" } },英文和中文各一句。常见的 code 值:unauthorized(key 不对或已撤销)、quota_exceeded(今天的次数不够)、job_in_progress(上一个任务还没算完)、offline(电脑离线)、licence(这个模型不通过 API 提供)、invalid_request(请求里有不合法的值) - 结果的分量: 这些是机器学习势的预测,不是 DFT 计算。用来筛选和找方向很合适,写进论文前请用你信得过的方法复核。
还没有开放的
网状查询的实体与关系还没有放进接口。想用它,或者接口缺了什么字段、计算接口缺了哪种计算,请告诉我们: GitHub Issues