# 科学 Skill 集成评估(scientific-agent-skills → zcbot)

来源:https://github.com/K-Dense-AI/scientific-agent-skills(MIT,K-Dense AI,138 个 skill)

适用对象:zcbot,服务于中国建筑材料科学研究总院 —— 无机非金属材料 R&D(水泥/混凝土/玻璃/陶瓷/耐火/新型建材)。

## 1. 总体结论

- **不整包装**(`npx skills add`),138 个 description 全进 prompt → 上下文噪声爆炸 + 误触发(用户说"分析一下"模型可能跳去 Scanpy)。
- **挑 4 个核心新能力 fork 进来**,适配 zcbot 现有 skill 格式(`SKILL.md` + Python helper + `run_python` 调用)。
- **现有 6 个 skill 不替换,抽对方的 best practice 增强**。

## 2. 现状与目标格式

zcbot 已有 skill(`D:/projects/zcbot/skills/`):
`coding / documents / imagegen / patent / ppt / proposal / research / review / videogen`

每个 skill = `SKILL.md`(frontmatter + 何时用 + 反模式 + 工作流)+ 配套 Python(走 `run_python` 注入的 PYTHONPATH 直接 import)。

scientific-agent-skills 的 skill 格式语义基本一致 —— **可以单个 fork,不要批量装**。

## 3. 推荐移植的 4 个新能力

### 3.1 Pymatgen ★★★

无机材料计算核心库。

**对你们的价值面**
- 晶体结构 I/O(CIF/POSCAR)—— 水泥熟料相(C3S/C2S/C3A/C4AF)、玻璃晶化产物、陶瓷相、耐火砖矿物相
- `XRDCalculator` —— 给定结构正向算 XRD pattern,跟实测对比
- `PhaseDiagram` —— 凝胶/水化产物的热力学稳定性
- `SpacegroupAnalyzer` —— 物相对称性
- `MPRester` —— Materials Project 直连查无机化合物
- 转换工具:VASP / Gaussian / Quantum ESPRESSO 输入输出文件

**落地动作**
```bash
.venv/Scripts/pip install pymatgen mp-api
```
新建 `skills/materials_pymatgen/SKILL.md`,在仓库原版基础上加两段:
- **中文相名 → 标准化学式映射表**(给 LLM 看):
  - C3S → Ca3SiO5,C2S → Ca2SiO4,C3A → Ca3Al2O6,C4AF → Ca4Al2Fe2O10
  - 钙矾石 → Ca6Al2(SO4)3(OH)12·26H2O
  - 莫来石 → Al6Si2O13,堇青石 → Mg2Al4Si5O18
- **Materials Project API key 配置走 zcbot env** —— 用户得去 https://materialsproject.org/api 申请,写进 `RUN.md` 一次性初始化段

**坑**
- `MPRester` 必须 context manager(`with MPRester() as mpr:`),否则连接泄漏 —— 抄进反模式段
- `from_file()` 优先,不要自己 parse CIF

### 3.2 stats_ml(scikit-learn + statsmodels + PyMC) ★★★

合并成一个 skill,按场景导航。

**对你们的价值面**
- 配方-性能建模:掺合料比例 → 28 天抗压强度回归
- DoE 响应面拟合
- 配方聚类 / 异常实验检测
- 工艺参数 → 性能的特征重要性

**落地动作**

`skills/stats_ml/SKILL.md` 入口先做场景导航:
| 你要做 | 用 |
|---|---|
| 要 p-value、置信区间、假设检验 | statsmodels(OLS / ANOVA) |
| 要预测精度高、不在乎模型可解释性 | sklearn(RF / GBDT) |
| 样本小(< 30)且要不确定度估计 | PyMC(贝叶斯) |
| 要可解释的线性关系 | statsmodels OLS / sklearn LinearRegression |

**抄仓库的反模式段**(高频踩坑):
1. 别在 pipeline 外预处理 → 交叉验证会数据泄漏
2. scaler 别 fit 在 test 上
3. 分类任务记得 `StratifiedKFold`
4. 树模型不用 scale 特征
5. 收敛 warning 别忽略,要么加 `max_iter` 要么 scale

依赖:你们 requirements.txt 多半已有 sklearn,确认下 statsmodels + pymc 装没装。

### 3.3 matplotlib(出版级) ★★★

**对你们的价值面**
- XRD pattern(底图 + 标峰)
- TG-DSC 双 Y 轴曲线
- 应力-应变曲线多组样本对比
- 多 panel 出版图(Cement and Concrete Research、JACerS 风格)

**落地动作**

新建 `skills/plot_pub/SKILL.md`,关键内容(原仓库的反模式 + 你们的中文场景补丁):

```python
# zcbot 出版级绘图规范

# 1. OO 接口(必须),不用 plt.xxx 隐式
fig, ax = plt.subplots(figsize=(6, 4), dpi=150)
ax.plot(...)

# 2. 中文字体(Windows 必配,否则方块)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 3. colormap 用 viridis / cividis,不用 jet(色觉障碍不友好,审稿人会喷)

# 4. 画完必须 close,run_python 多任务跑容易堆积
fig.savefig(out_path, bbox_inches='tight')
plt.close(fig)

# 5. 矢量优先:SVG / PDF 给论文,PNG 给 PPT(dpi >= 300)
```

仓库还提到一个 `scientific-visualization` skill 专门做期刊样式多面板,这个可以一并扒进来作为 `plot_pub` 的进阶段。

### 3.4 materials_db(COD + NIST + USPTO 三合一) ★★

**原仓库 `database-lookup` 78 个库,只 5 个对你们直接有用,不要整体抄,做精简子集**:

| DB | 用途 |
|---|---|
| **Materials Project** | 已被 Pymatgen 的 MPRester 覆盖,不重复 |
| **COD**(Crystallography Open Database) | 免费晶体结构库,补充 MP 没收的实验结构 |
| **NIST** | 标准参考数据,材料热物性、相平衡 |
| **USPTO** | 美国专利全文检索 → 并入 `skills/patent` |
| **PubChem / ChEMBL** | 只在做外加剂(减水剂、缓凝剂)这类有机分子时用 → 不常用,可后置 |

**落地动作**
- `skills/patent` 加一个 `query_uspto(keyword, ...)` helper(USPTO Open Data Portal API)
- 新建 `skills/materials_db/SKILL.md`,封 COD + NIST 两个查询函数
- Materials Project 让 Pymatgen 走,本 skill 不重复

**坑**
- USPTO 要 API key(免费),申请走 https://developer.uspto.gov/
- COD 是 RESTful,免 key,但限速,加 sleep
- NIST 各子库 API 不统一(WebBook / Materials Data Repository / ICSD 镜像),要分别封装

## 4. 现有 6 个 skill 的增强参考(不替换)

把仓库对应 skill 的 SKILL.md 拿来读,把"何时用 / 反模式 / 标准工作流"段落里你们没写的合理项抽进现有 SKILL.md。**不要整体替换**,你们的 paper_server / proposal 模板 / patent 流程都是定制化的。

| 仓库 skill | 对应你们 | 可抄的部分 |
|---|---|---|
| Literature Review / Paper Lookup | `skills/research` | 多库 fallback 策略、引文格式标准化 |
| Scientific Writing | `skills/proposal` | 章节结构、claim-evidence 写作规范 |
| Scientific Slides / LaTeX Posters | `skills/ppt` | 多 panel 布局、color palette 规范 |
| Document Skills(PDF/DOCX/XLSX/PPTX) | `skills/documents` | 表格读取、复杂 PDF 抽取 |
| Peer Review | `skills/review` | 审稿 checklist |
| Scientific Schematics | (新加) | 工艺流程图、装置示意图自动生成 |

## 5. 不推荐(直接跳过)

| 领域 | 仓库代表 skill | 跳过原因 |
|---|---|---|
| 生物信息 / 基因组 | BioPython / Scanpy / scVelo / Arboreto / anndata / esm | 跟无机材料无交集 |
| 药物发现 | DiffDock / DeepChem / Datamol / adaptyv | 同上,RDKit 偶尔有边但太窄 |
| 临床研究 | ClinicalTrials.gov / ClinVar / COSMIC / Open Targets | 同上 |
| 医学影像 | pydicom / histolab / PathML | 同上 |
| 量子计算 | Cirq / Qiskit / PennyLane / QuTiP | 除非真做第一性原理(成本极高) |
| 代谢建模 | COBRApy | 同上 |
| 地理空间 | GeoPandas | 同上 |
| 天文 | astropy | 同上 |

## 6. 中间档(暂不动,记下来,有场景再说)

| skill | 触发场景 |
|---|---|
| **OpenMM + MDAnalysis** | 水泥水化分子模拟、玻璃网络结构 MD —— 门槛高,看院里有没有人真做计算 |
| **NetworkX** | 知识图谱、合作网络分析 |
| **SymPy** | 推传热扩散、强度模型公式 |
| **scikit-image** | SEM 图像分析(粒径分布、形貌识别) —— 仓库没单列,如要做自己装 |

## 7. 落地排期建议

| 顺序 | skill | 工作量估计 | 收益 |
|---|---|---|---|
| 1 | `plot_pub`(matplotlib)SKILL.md | 0.5 day | 立刻见效,所有出图任务受益,中文字体坑也一次扫掉 |
| 2 | `materials_pymatgen` 装包 + SKILL.md + 化学式映射 | 1 day | 打开无机材料计算能力(XRD/相图/对称性) |
| 3 | `stats_ml` SKILL.md(sklearn + statsmodels + PyMC) | 1 day | 配方-性能建模常态化 |
| 4 | `materials_db`(COD + NIST + USPTO) | 2 day(每个 API 都要踩坑) | 中等,可后置;USPTO 部分先并入 `patent` |
| 5 | 现有 6 个 skill 抽 best practice 增强 | 各 0.5 day | 渐进改善,不阻塞 |

## 8. 三个决策点(写代码前需要你确认)

1. **新 skill 命名风格**:用 `materials_pymatgen` / `stats_ml` / `plot_pub` / `materials_db` 这种业务前缀,还是直接 `pymatgen` / `sklearn` 这种工具名?
   - 业务前缀:更贴你们院的场景导航
   - 工具名:跟开源生态对齐,容易回查官方文档
2. **Materials Project API key** 走 `.env` 还是单独配置文件?
3. **USPTO 并入 `skills/patent` 还是单独建 `skills/uspto`**?(我倾向并入,因为 patent skill 已经有中国专利逻辑)

定下这三点我就开始动 #1(matplotlib)。
