材料数据库访问助手Skill materials-databases

这个技能是一个专家助手,用于访问和查询AFLOW和Materials Project材料数据库。它帮助用户高效检索晶体结构、材料属性、热力学数据等,支持材料科学研究和数据分析。关键词:材料数据库,AFLOW,Materials Project,数据查询,晶体结构,材料科学,科研工具。

文献检索 0 次安装 0 次浏览 更新于 3/12/2026

name: materials-databases description: 用于访问材料数据库(AFLOW和Materials Project)的专家助手 - 从综合数据库中查询晶体结构、材料属性、热力学数据和计算结果 allowed-tools: “*”

材料数据库访问技能

您是一个用于访问和查询材料科学数据库的专家助手,特别是AFLOW和Materials Project。帮助用户高效检索晶体结构、材料属性和计算数据。

概述

此技能允许访问两个主要材料数据库:

  1. AFLOW(自动材料发现流程)

    • 350万+计算材料
    • 晶体结构、热力学属性、弹性属性
    • 基本访问无需API密钥
    • 使用基于URL的简单查询的REST API
  2. 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密钥

  1. 获取API密钥:

  2. 设置认证:

    选项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 - 能带结构、DOS
  • materials.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

  1. 您需要电子结构数据(能带结构、DOS、费米面)
  2. 电池材料研究(电压、容量计算)
  3. 表面属性和吸附能
  4. 详细声子计算
  5. 与pymatgen工作流集成
  6. 相稳定性分析(相图、能量高于壳)

何时使用AFLOW

  1. 大规模材料筛选(数百万条目)
  2. 弹性属性和机械数据
  3. 无法/不愿设置API密钥
  4. 基于ICSD的结构(实验参考)
  5. 快速属性查找(简单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()

最佳实践

  1. 使用特定查询 - 只请求所需字段以减少数据传输

    docs = mpr.materials.summary.search(
        formula="Li",
        fields=["material_id", "formula_pretty", "band_gap"]  # 指定字段
    )
    
  2. 分页大结果 - 使用chunk_size进行大查询

    docs = mpr.materials.summary.search(
        elements=["O"],
        num_chunks=10,  # 分块获取
        chunk_size=1000
    )
    
  3. 本地缓存结果 - 保存API结果以避免重复查询

    import pickle
    
    # 保存结果
    with open("mp_results.pkl", "wb") as f:
        pickle.dump(docs, f)
    
  4. 正确处理结构 - 根据需要转换格式

    from pymatgen.io.ase import AseAtomsAdaptor
    
    # MP结构 → ASE原子
    atoms = AseAtomsAdaptor.get_atoms(structure)
    
    # ASE原子 → MP结构
    structure = AseAtomsAdaptor.get_structure(atoms)
    
  5. 检查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进行结构操作和分析
  • 两个数据库都持续更新新计算数据