这是一个可独立部署的材料发现工作台示例仓库。
项目提供一套可运行的端到端链路:
- 前端只输入一段自然语言
prompt - 后端自动解析
formula / num_samples / relax - 历史任务默认直接进入结果页
- 新任务提交后自动切到结果视图并持续轮询
- 页面保留参考检索、候选生成、MatterSim 评估和产物下载能力
核心链路:
Frontend -> FastAPI -> LangGraph-style workflow -> LLM Router/Fallback Router -> MCP -> Materials Project / MatterGen / MatterSim
按下面步骤即可完成最小安装:
git clone https://github.com/Guichena/material-agent-demo.git
cd material-agent-demo
conda env create -f environment.yml
conda activate materials-demo-teaching
bash scripts/bootstrap.sh
cp .env.example .env然后修改 .env 里这几个核心字段:
MP_API_KEY=your_mp_api_key
DEMO_BACKEND_PYTHON=/abs/path/to/conda/envs/materials-demo-teaching/bin/python
MATERIAL_AGENT_REPO_ROOT=/abs/path/to/material-agent
MATTERGEN_GENERATE_BIN=/abs/path/to/mattergen/bin/mattergen-generate
MATTERSIM_PYTHON=/abs/path/to/mattersim/bin/python
MATTERSIM_LOAD_PATH=/abs/path/to/mattersim-v1.0.0-1M.pth启动全部服务:
bash scripts/start_all.sh打开:
http://127.0.0.1:3000
如果前端需要访问非默认后端地址,启动前端时显式指定:
cd frontend-next
NEXT_PUBLIC_API_BASE_URL=http://your-backend-host:18018 npm run dev -- --hostname 127.0.0.1 --port 3000运行本项目前,需要准备以下三类资源:
- 本项目自己的 conda 环境
- MatterGen 运行能力:
MATTERGEN_GENERATE_BIN - MatterSim 运行能力:
MATTERSIM_PYTHON + MATTERSIM_LOAD_PATH
此外还需要一个有效的 MP_API_KEY,用于 Materials Project 检索。
这个仓库主要用于两类场景:
- 作为材料发现工作台的参考实现。
- 作为讲解前端、工作流、MCP 和模型环境协作方式的教学仓库。
推荐使用方式是:克隆仓库、按文档配置环境、再根据需要继续二次开发。
需要特别说明的是:
- 仓库已经包含前端、后端、MCP server 封装和启动脚本
- 推荐维护
3套环境: - 本项目自己的 conda 环境,同时承载 FastAPI、
materials-projectMCP、material-agent-coreMCP - 外部
MatterGen环境 - 外部
MatterSim环境
当前交互设计有以下特点:
- 去掉“演示模式”入口
- 去掉显式
formula / num_samples / relax输入框 - 历史任务不再只是列表,而是默认承载结果回看入口
- 页面结构改为“左侧历史 + 右侧主工作区”的产品型布局
material-agent-demo/
├── app/ # FastAPI + workflow + task store
├── frontend-next/ # Next.js 工作台前端
├── mcp_servers/
│ ├── material_agent_core/ # MatterGen / MatterSim MCP server
│ └── materials_project/ # Materials Project MCP server
├── docs/
│ ├── 配置与模型准备.md
│ └── 产品架构与页面流转.md
├── scripts/ # 启动脚本
├── workdir/ # 运行后自动生成的结构缓存目录
├── .env.example
├── pyproject.toml
└── README.md
前端位于 frontend-next/,通过 /api/tasks 对接后端 FastAPI 服务。
默认规则:
- 如果前端运行在
3000,默认请求http://127.0.0.1:18018 - 如果前后端不在同一地址,显式设置
NEXT_PUBLIC_API_BASE_URL
主要界面分为三部分:
- 左侧历史任务时间线
- 按“今天 / 昨天 / 最近 7 天 / 更早”分组
- 已有任务默认可直接点开结果页
- 中间主工作区
- 无历史任务时,显示 prompt 输入页
- 有历史任务时,默认进入最近任务结果页
- 结果视图
- 显示工作流进度、消息流、路由决策、参考材料、候选结果、trace 与 CIF 下载
前端提交参数现在只有:
promptreuse_existing
后端会做一次规范化:
- 如果配置了
LLM_ROUTER_*,优先让 LLM 从 prompt 中解析formula / num_samples / relax - 如果 LLM 未配置、调用失败或返回不完整,再回退到本地规则兜底
formula:优先从显式字段取值,否则从 prompt 中推断num_samples:优先从显式字段取值,否则从 prompt 中推断;提取不到时默认3relax:优先从显式字段取值,否则根据 prompt 中是否出现“弛豫 / relax / 不做弛豫”等提示推断
任务系统行为:
- 新任务创建后立即返回任务卡片
- 页面自动切到结果视图
- 后端后台执行工作流
- 前端轮询
/api/tasks和/api/tasks/{id} - 历史任务会写入
data/tasks.json - 服务重启后历史任务会自动恢复
- 如果
reuse_existing=true且规范化后的输入一致,会复用已有running/completed任务
关键文件:
工作流主节点:
parse_inputdecide_next_steplookup_reference_materialsgenerate_structuresevaluate_structuresfinalize
路由层支持两种模式:
- 配置
LLM_ROUTER_*后使用 OpenAI 兼容模型做两件事:- prompt 参数解析
decide_next_step的 JSON 路由决策
- 未配置时回退到本地规则路由
建议先看这两份文档:
前者讲环境和模型,后者讲产品结构和代码职责。
推荐环境:
- Conda
- 一个可用的
MP_API_KEY - 本项目自己的 conda 环境
- 一个可运行的 MatterGen 环境
- 一个可运行的 MatterSim 环境
如果要跑通完整链路,还需要准备:
material-agent仓库或等价运行资源mattergen-generate可执行文件- MatterSim 的
.pthcheckpoint
git clone https://github.com/Guichena/material-agent-demo.git
cd material-agent-demo执行:
conda env create -f environment.yml
conda activate materials-demo-teaching这会创建名为 materials-demo-teaching 的 conda 环境,并安装:
- 后端依赖
materials-projectMCP servermaterial-agent-coreMCP server- Node.js / npm
创建完成后,主 Python 通常是:
$(conda info --base)/envs/materials-demo-teaching/bin/python激活 conda 环境后,执行:
bash scripts/bootstrap.sh该脚本会:
- 把后端依赖同步安装到当前已激活的 conda 环境
- 把两个 MCP server 同步安装到当前已激活的 conda 环境
- 安装
frontend-next的 npm 依赖 - 如果
.env不存在,就从.env.example自动复制一份
执行完成后,继续修改 .env 中的路径即可。
cd frontend-next
npm install
cd ..cp .env.example .env第一次配置时,优先修改这些字段:
MP_API_KEY=your_mp_api_key
DEMO_BACKEND_PYTHON=/abs/path/to/conda/envs/materials-demo-teaching/bin/python
MATERIAL_AGENT_REPO_ROOT=/abs/path/to/material-agent
MATTERGEN_GENERATE_BIN=/abs/path/to/mattergen/bin/mattergen-generate
MATTERSIM_PYTHON=/abs/path/to/mattersim/bin/python
MATTERSIM_LOAD_PATH=/abs/path/to/mattersim-v1.0.0-1M.pth完整链路需要 3 类外部资源:
MP_API_KEY- MatterGen 运行能力
- MatterSim 运行能力与 checkpoint
推荐按下面这张表配置:
| 资源 | 官方来源 | 建议本地路径 | .env 字段 |
|---|---|---|---|
| Materials Project API key | Materials Project 文档与用户主页 | 不落盘,直接填字符串 | MP_API_KEY |
material-agent 仓库 |
你的外部 material-agent 工作目录 |
/abs/path/to/material-agent |
MATERIAL_AGENT_REPO_ROOT |
| MatterGen 仓库/环境 | GitHub: microsoft/mattergen;HF: microsoft/mattergen |
/abs/path/to/material-agent/agent_models/mattergen 或你自己的 MatterGen 目录 |
MATTERGEN_GENERATE_BIN 指向其中环境里的 mattergen-generate |
| MatterSim 仓库/环境 | GitHub: microsoft/mattersim |
/abs/path/to/material-agent/agent_models/mattersim 或你自己的 MatterSim 目录 |
MATTERSIM_PYTHON 指向该环境的 python |
| MatterSim checkpoint | MatterSim 仓库 pretrained_models/ |
/abs/path/to/material-agent/agent_models/mattersim/pretrained_models/mattersim-v1.0.0-1M.pth |
MATTERSIM_LOAD_PATH |
常见填写示例:
MP_API_KEY=your_real_mp_api_key
DEMO_BACKEND_PYTHON=/abs/path/to/conda/envs/materials-demo-teaching/bin/python
MATERIAL_AGENT_REPO_ROOT=/abs/path/to/material-agent
MATTERGEN_GENERATE_BIN=/abs/path/to/mattergen-env/bin/mattergen-generate
MATTERSIM_PYTHON=/abs/path/to/mattersim-env/bin/python
MATTERSIM_LOAD_PATH=/abs/path/to/material-agent/agent_models/mattersim/pretrained_models/mattersim-v1.0.0-1M.pth准备好 .env 后,启动全部服务:
bash scripts/start_all.sh或分别启动:
bash scripts/start_materials_project.sh
bash scripts/start_material_agent_core.sh
bash scripts/start_demo_backend.sh
bash scripts/start_next_frontend.sh如果前端需要连到非默认后端地址,改用:
cd frontend-next
NEXT_PUBLIC_API_BASE_URL=http://your-backend-host:18018 npm run dev -- --hostname 127.0.0.1 --port 3000访问地址:
http://127.0.0.1:3000
如果你访问了 http://127.0.0.1:18018/,后端会自动跳转到 3000。
核心原则:
- 全部使用绝对路径
- 不要直接照抄示例路径
- 先用命令找到实际路径,再填入
.env
常用查找方法:
pwd如果当前位于仓库根目录,输出结果通常类似于:
/abs/path/to/material-agent-demo那么 .env 里可以写:
DEMO_BACKEND_PYTHON=/abs/path/to/conda/envs/materials-demo-teaching/bin/python
MATERIALS_PROJECT_WORKDIR=/abs/path/to/material-agent-demo/workdir/materials-project先激活对应环境,然后执行:
which python例如:
conda activate mattersim
which python把输出填到:
MATTERSIM_PYTHON=/that/path/python默认情况下,materials-project 和 material-agent-core 会自动继承:
DEMO_BACKEND_PYTHON=/abs/path/to/conda/envs/materials-demo-teaching/bin/python只有你确实要把 MCP 单独拆到别的 Python,才需要额外配置:
conda activate your-custom-mcp-env
which python把输出填到:
MATERIALS_PROJECT_MCP_PYTHON=/that/path/python
MATERIAL_AGENT_CORE_MCP_PYTHON=/that/path/python一般情况下无需填写这两个变量。
激活 MatterGen 环境后执行:
which mattergen-generate把输出填到:
MATTERGEN_GENERATE_BIN=/that/path/mattergen-generate先在你的模型目录里搜索:
find /your/model/root -name 'mattersim-v1.0.0-1M.pth'把输出填到:
MATTERSIM_LOAD_PATH=/that/path/mattersim-v1.0.0-1M.pth如果已经准备好了 material-agent 仓库,进入其根目录执行:
pwd把结果填到:
MATERIAL_AGENT_REPO_ROOT=/that/path/material-agent至少应满足:
GET /api/health正常- 页面可创建 prompt-only 任务
- 历史任务刷新后仍可恢复
- 结果页能展示参考材料 / 候选结果 / trace
常用检查:
curl http://127.0.0.1:18018/api/health
python -m compileall material-agent-demo/app
cd frontend-next && npm run typecheck说明:
materials-project和material-agent-core的真正验收不是直接GET /mcp- 真正调用需要走 MCP
initialize+tools/call
优先检查代理变量。默认配置通过 MATERIALS_PROJECT_CLEAR_PROXY=true 尽量规避这类问题,但如果你自己手动启动服务,仍要确认 HTTP_PROXY / HTTPS_PROXY 没有污染到调用链路。
先核对:
MATERIAL_AGENT_REPO_ROOTMATTERGEN_GENERATE_BINMATTERSIM_PYTHONMATTERSIM_LOAD_PATH
建议直接先在 shell 里验证:
ls -l "$MATERIAL_AGENT_REPO_ROOT"
ls -l "$MATTERGEN_GENERATE_BIN"
ls -l "$MATTERSIM_PYTHON"
ls -l "$MATTERSIM_LOAD_PATH"这通常意味着:
- prompt 被路由成“仅检索”
- MatterGen 生成失败
- 评估节点因前置结果为空被跳过
优先看结果页里的:
- 路由决策
- 系统消息
- Trace
- 增加更强的 prompt 解析策略
- 增加结构化报告导出
- 接入与
material-agent更接近的完整结果页 - 继续完善
frontend-next/的工作台能力

