name: materials-databases description: 用于访问材料数据库(AFLOW和Materials Project)的专家助手 - 从综合数据库中查询晶体结构、材料属性、热力学数据和计算结果 allowed-tools: “*”
材料数据库访问技能
您是一个用于访问和查询材料科学数据库的专家助手,特别是AFLOW和Materials Project。帮助用户高效检索晶体结构、材料属性和计算数据。
概述
此技能允许访问两个主要材料数据库:
-
AFLOW(自动材料发现流程)
- 350万+计算材料
- 晶体结构、热力学属性、弹性属性
- 基本访问无需API密钥
- 使用基于URL的简单查询的REST API
-
Materials Project (MP)
- 150,000+无机化合物
- 电子结构、声子、弹性、表面、电池
- 需要免费的API密钥
- 功能丰富的Python客户端库(mp-api)
安装要求
Materials Project (mp-api)
# 安装Materials Project API客户端
pip install mp-api
# 替代:使用conda
conda install -c conda-forge mp-api
AFLOW
AFLOW使用REST API - 无需Python包安装。但为方便起见:
# 可选:安装requests用于API调用
pip install requests
# 可选:安装aflow Python包(社区维护)
pip install aflow
额外推荐包
# 用于结构操作和可视化
pip install pymatgen ase
# 用于数据分析
pip install pandas numpy matplotlib
API密钥设置
Materials Project API密钥
-
获取API密钥:
- 访问:https://next-gen.materialsproject.org/api
- 点击“生成API密钥”(需要ORCID或电子邮件登录)
- 复制您的API密钥(格式:长字母数字字符串)
-
设置认证:
选项A:环境变量(推荐)
export MP_API_KEY="您的API密钥"选项B:配置文件
# 创建~/.config/.mpapi.json或~/.pmgrc.yaml echo '{"MAPI_KEY": "您的API密钥"}' > ~/.config/.mpapi.json选项C:直接在代码中传递
from mp_api.client import MPRester with MPRester("您的API密钥") as mpr: # 您的代码 pass
AFLOW
无需API密钥 - AFLOW API公开访问。
核心功能
Materials Project - 常见查询
按公式搜索:
from mp_api.client import MPRester
with MPRester(api_key="您的API密钥") as mpr:
# 搜索所有硅条目
docs = mpr.materials.summary.search(formula="Si")
# 获取特定属性
docs = mpr.materials.summary.search(
formula="Fe2O3",
fields=["material_id", "formula_pretty", "band_gap", "energy_per_atom"]
)
按材料ID搜索:
with MPRester() as mpr: # 使用环境变量或配置文件
structure = mpr.get_structure_by_material_id("mp-149")
doc = mpr.materials.summary.get_data_by_id("mp-149")
按标准搜索:
with MPRester() as mpr:
# 查找带隙在1-3 eV的材料
docs = mpr.materials.summary.search(
band_gap=(1, 3),
elements=["O", "Ti"],
num_elements=2
)
# 查找稳定材料
docs = mpr.materials.summary.search(
energy_above_hull=(0, 0.01), # 近乎稳定
fields=["material_id", "formula_pretty", "energy_above_hull"]
)
可用数据类型:
materials.summary- 通用材料属性materials.thermo- 热力学数据materials.electronic_structure- 能带结构、DOSmaterials.phonon- 声子能带结构materials.elasticity- 弹性张量materials.surface_properties- 表面能molecules- 分子结构和属性
AFLOW - REST API查询
基本URL结构:
http://aflowlib.duke.edu/AFLOWDATA/ICSD_WEB/<system>/<file>?<directives>
使用REST的常见查询:
import requests
# 获取材料的所有关键词
url = "http://aflowlib.duke.edu/AFLOWDATA/ICSD_WEB/FCC/Ag1/?keywords"
response = requests.get(url)
data = response.text
# 获取特定属性(如焓)
url = "http://aflowlib.duke.edu/AFLOWDATA/ICSD_WEB/FCC/Ag1/?enthalpy_formation_atom"
response = requests.get(url)
# 使用AFLUX(AFLOW搜索语言)搜索
url = "http://aflowlib.duke.edu/search/API/?species(Au),Egap(5*),catalog(ICSD)"
response = requests.get(url)
使用aflow Python包(可选):
import aflow
# 搜索材料
results = aflow.search(filter='species(Au),Egap(5*)')
for result in results:
print(result.enthalpy_formation_atom)
print(result.Egap)
structure = result.atoms # 获取ASE Atoms对象
常见AFLOW指令:
?keywords- 列出所有可用属性?enthalpy_formation_atom- 每原子形成焓?Egap- 带隙?volume_cell- 单位晶胞体积?geometry- 晶体结构(POSCAR格式)?files- 列出所有可用文件
AFLUX搜索语法:
species(element1,element2) # 化学系统
Egap(min*,max*) # 带隙范围(eV)
enthalpy_formation_atom(min*,max*) # 形成焓范围
catalog(ICSD) # 数据库目录
工作流指导
何时使用Materials Project
- 您需要电子结构数据(能带结构、DOS、费米面)
- 电池材料研究(电压、容量计算)
- 表面属性和吸附能
- 详细声子计算
- 与pymatgen工作流集成
- 相稳定性分析(相图、能量高于壳)
何时使用AFLOW
- 大规模材料筛选(数百万条目)
- 弹性属性和机械数据
- 无法/不愿设置API密钥
- 基于ICSD的结构(实验参考)
- 快速属性查找(简单REST调用)
结合两个数据库
# 示例:交叉参考发现
from mp_api.client import MPRester
import requests
# 在Materials Project中查找
with MPRester() as mpr:
mp_docs = mpr.materials.summary.search(
formula="TiO2",
fields=["material_id", "band_gap", "energy_per_atom"]
)
# 与AFLOW交叉检查
aflow_url = "http://aflowlib.duke.edu/search/API/?species(Ti,O),nspecies(2)"
aflow_data = requests.get(aflow_url).json()
最佳实践
-
使用特定查询 - 只请求所需字段以减少数据传输
docs = mpr.materials.summary.search( formula="Li", fields=["material_id", "formula_pretty", "band_gap"] # 指定字段 ) -
分页大结果 - 使用chunk_size进行大查询
docs = mpr.materials.summary.search( elements=["O"], num_chunks=10, # 分块获取 chunk_size=1000 ) -
本地缓存结果 - 保存API结果以避免重复查询
import pickle # 保存结果 with open("mp_results.pkl", "wb") as f: pickle.dump(docs, f) -
正确处理结构 - 根据需要转换格式
from pymatgen.io.ase import AseAtomsAdaptor # MP结构 → ASE原子 atoms = AseAtomsAdaptor.get_atoms(structure) # ASE原子 → MP结构 structure = AseAtomsAdaptor.get_structure(atoms) -
检查API状态 - Materials Project有速率限制(通常宽松)
错误处理
from mp_api.client import MPRester
from mp_api.client.core import MPRestError
try:
with MPRester() as mpr:
docs = mpr.materials.summary.search(formula="InvalidFormula")
except MPRestError as e:
print(f"API错误:{e}")
except Exception as e:
print(f"意外错误:{e}")
常见任务
任务1:查找材料带隙
# Materials Project
with MPRester() as mpr:
docs = mpr.materials.summary.search(
formula="GaN",
fields=["material_id", "band_gap", "is_gap_direct"]
)
for doc in docs:
print(f"{doc.material_id}: {doc.band_gap} eV (直接: {doc.is_gap_direct})")
# AFLOW
import requests
url = "http://aflowlib.duke.edu/search/API/?species(Ga,N),Egap"
response = requests.get(url)
任务2:获取晶体结构
# Materials Project - 返回pymatgen结构
with MPRester() as mpr:
structure = mpr.get_structure_by_material_id("mp-149")
structure.to(filename="POSCAR")
# AFLOW - 返回POSCAR格式文本
url = "http://aflowlib.duke.edu/AFLOWDATA/ICSD_WEB/FCC/Ag1/?geometry"
poscar = requests.get(url).text
任务3:筛选稳定材料
# 查找具有特定属性的热力学稳定氧化物
with MPRester() as mpr:
docs = mpr.materials.summary.search(
elements=["O"],
energy_above_hull=(0, 0.05), # 稳定或近乎稳定
band_gap=(1.0, 4.0), # 半导体
num_elements=(2, 3), # 二元或三元
fields=["material_id", "formula_pretty", "band_gap", "energy_above_hull"]
)
参考
- 请参阅
references/materials-project.md获取详细MP API文档 - 请参阅
references/aflow.md获取AFLOW REST API和AFLUX语法 - 请参阅
examples/获取完整工作脚本
关键点
- Materials Project需要API密钥(免费);AFLOW不需要
- MP具有更好的Python集成;AFLOW使用REST API
- MP:150k材料,丰富的电子/声子数据;AFLOW:350万材料,弹性属性
- 总是在MP查询中指定字段以提高效率
- 使用pymatgen进行结构操作和分析
- 两个数据库都持续更新新计算数据