diff --git a/PROGRESS.md b/PROGRESS.md index cfa8ec6..5c29194 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -2,7 +2,7 @@ > 配合 `DESIGN.md`。本文件只记 phase 状态、决策偏差、文件量、下一步。每条 1-2 句:做了啥 + 关键判断;细节查 `git log` / `git diff` / `DESIGN §7.9`。 -最后更新:2026-05-28(Python 3.10→3.12 升级 + Docker backend PYTHONPATH 修 + 3 个科学计算 skill smoke 通过) +最后更新:2026-05-28(新增 analyze skill 引导式问题拆解 + Python 3.10→3.12 升级 + Docker backend PYTHONPATH 修 + 3 个科学计算 skill smoke 通过) --- @@ -23,6 +23,7 @@ ### 2026-05-28 +- **新增 `analyze` skill(科学问题分析 / 拆解 / 引导),服务建材院 R&D 早期问题翻译场景**:用户拿"模糊的高层科研问题"(典型句式"想搞清楚 X 原因 / 怎么提升 Y / 该不该做 Z")过来时,既不是写本子(proposal)/也不是查文献(research)/也不是建模(stats_ml),而是**问题还在概念阶段需要先想清楚**——之前 10 个 skill 没人接这个场景,模型只能凭直觉糊弄。本 skill 定位为"协调器 / 问题翻译器",**不执行任务**,只把模糊命题拆成可操作子问题 + 实施路线图,最终接力给下游 skill。**四段式工作流**:① PICO/PECO 规范化(P 对象 / I 干预 / C 对照 / O 量化输出 + FINER 五维自检)—— 卡 BLOCKING;② Issue Tree 拆解(MECE 原则,默认"机理-现象-工艺"三层,叶子节点标 `[类型 / 优先级 / 能力描述]`)—— 卡 BLOCKING;③ 按叶子类型分支深化:根因型走 Fishbone(六大支:材料/工艺/设备/检测/环境/人员)+ 5Whys、创新型走 First-principles 拆假设 + TRIZ 矛盾矩阵(摘 10 对建材常见冲突),优化型走 DoE 选型导航(PB/全因子/CCD/Box-Behnken/混料/序贯);④ 实施路线图 + TODO + 接力建议(`analysis.md` §6 每步四件事:干什么 / 能力描述 / 产物 / 判停条件)。**文件结构**:`skills/analyze/SKILL.md`(121 行)+ 5 份 references(78-95 行,按需 always read 或分支 read)+ 1 份 `templates/analysis_report.md`(87 行 = 最终 `analysis.md` 骨架),共 7 文件 657 行。**关键决策**:(a) **不硬编码"叶子能力 → skill 名"映射表** —— runtime 的 skill discovery 已经把所有 skill description 注入 prompt(DESIGN §3.5),硬编码等于重复 + 改名要回来改;改用"能力描述"(动词短语)让 LLM 按当时看到的 skill 清单自匹配;(b) **触发 description 双重防护** —— A 写死"还在想方向 / 不知道从哪入手"触发条件 + 显式列出何时不用(proposal/research/stats_ml/review 走对应 skill),B 在 §输出末尾推荐"下一步用 X 能力推进",前者拦"路由进"后者拦"路由出"卡死;(c) **不需要 Python helper** —— 全引导式对话 + markdown 输出,跟 review skill 同范式,无代码;(d) **TRIZ 不抄全 40 原理矩阵** —— 摘 10 对建材常见矛盾(强度↑韧性↑ / 早强↑后期↓ / 致密↑透气↑ 等),够 80% 场景 + 不污染上下文;(e) **DoE 选型表不生成实验点位** —— analyze 只规划设计类型 + 因素表,具体随机化 / 点位生成由下游 stats_ml 跑 pyDOE2,职责清晰;(f) **产物文件简单命名 `analysis.md`** —— 不学 proposal 的 `--.spec.md` 多版本机制(spec 是"宪法"需要定调一次,analysis 是工作文档迭代覆盖即可);(g) **examples 全打建材域**(P42.5 早强偏低 / 熔铸 AZS 砖热震 / 低碳水泥探索 / 矿粉粉煤灰配方 DoE),触发 description 保持领域无关(框架本身通用),只在 references 里塞建材 case 让 LLM 学场景适配。否决:(a) `proposal` 直接覆盖问题分析功能 —— proposal 已包含"先写要点再写正文"两段式,但那是"已定调要立项"之后的拆解,跟"还没决定要不要立项"的探索阶段语义不同;(b) 合并到 `research` —— research 是查文献执行能力,问题拆解不查文献也能做;(c) 写成 Python framework(自动拆解 + 自动 PICO 填空)—— 强行结构化反而压死开放探索,引导式对话更贴 R&D 实际节奏。`DESIGN.md` 不动(新加 skill 无架构变化);`RUN.md` 不动(无 CLI / env / 文件布局变化);`SCIENTIFIC_SKILLS.md` 不动(该文件是 K-Dense 仓库引进评估笔记,analyze 是自主设计不在其列)。 - **Python 3.10→3.12 升级(host + Dockerfile)+ DockerExecutor PYTHONPATH 加 `/sandbox` 修历史 import bug + 3 个科学 skill smoke 通过**:上一条加完 3 个科学 skill 后跑 smoke 发现 step D mp_rester 联网炸 `ImportError: cannot import name 'NotRequired' from 'typing'` —— Materials Project 官方依赖 `emmet-core 0.86.0rc1` 的 `outcar_adapter.py` 直接 `from typing import NotRequired`(3.11+ 才有,没走 `typing_extensions` 兜底),原 host .venv 是 Python 3.10.9 → mp-api 整链路 import 不进。**选 3.12 而非 3.11/3.13**:3.12 是当下 ML/AI 生态默认推荐版本(稳一年半 + 所有主流包预编译 wheel 覆盖完整),3.11 跟容器对齐但少一年优化,3.13 释放才半年冷门 wheel 偶尔退源码编译 Windows 上易踩坑(没新特性需求,激进升只是踩雷概率)。**实施**:① host py -3.12 -m venv 重建 .venv,pip install -r requirements.txt 装齐(pymatgen 2026.5.4 / mp-api 0.46.1 / emmet-core 0.86.4 / sklearn 1.8.0 / statsmodels 0.14.6 / numpy 2.4 / scipy 1.17 / matplotlib 3.10.9 / litellm / fastapi / sqlalchemy / 全套传递依赖);② Dockerfile FROM `python:3.11-slim` → `python:3.12-slim`(host / 容器同步升,部署机 rebuild image 时生效);③ **顺手修 `core/executor_docker.py:172` PYTHONPATH** `/workspace` → `/sandbox:/workspace`:历史 bug —— 多个 skill(`research/paper`、新加 `pymatgen/materials`、`plot_pub/style`)SKILL.md 都教 LLM `from skills.xxx.yyy import zzz`,host backend 因 base_dir=Path.cwd()(zcbot repo 根)注入 PYTHONPATH 能 work;docker backend 下容器只有 `PYTHONPATH=/workspace` + skills/ bind mount 到 `/sandbox/skills:ro`,`import skills.xxx` 找不到。本次加 `/sandbox` 前缀(在 /workspace 前,让 skills 优先级高于用户 task 目录的同名 shadow),`tests/test_executor_docker.py:243-245` regression test 改 `assertIn("PYTHONPATH=/sandbox:/workspace", ...)`,**全套 15/15 PASS**。**smoke 实跑**:step A pymatgen helper + XRDCalculator MgO 11 个峰 ✅ / step B sklearn R²=0.575 + statsmodels R²=0.911 p≪0.05 ✅ / step C plot_pub SimHei + PNG+PDF 出图 ✅ / step D mp_rester 联网 ⚠️ 返 403 "Your IP/ASN blocked"(Materials Project 服务侧 IP 临时封禁,跟代码无关,LBNL 服务对中国大陆 IP 段或同 ASN abusive traffic 触发 → 等几小时自动解 / 邮件 support@materialsproject.org 报公网 IP 申请解封 / VPS 走代理 fallback)。**非阻塞**:pymatgen 本地功能(CIF I/O / XRDCalculator / SpacegroupAnalyzer / PhaseDiagram / VASP 输入)100% 能用,只是 `mp_rester` 在线查询暂不能用。否决:(a) 升 3.11(只跟容器对齐,少一年优化,3.12 同样兼容容器);(b) 升 3.13(释放半年,冷门 wheel 偶尔退源码编译 Windows 踩坑,激进升无收益);(c) pin `emmet-core<0.86` + `mp-api<0.45`(临时,下次 pip install 不 pin 又炸,且丢 emmet 新功能);(d) monkey patch `typing.NotRequired = typing_extensions.NotRequired`(hacky 且挡不住 mp_api 下游其他 3.11+ 假设);(e) executor PYTHONPATH 改 `/workspace:/sandbox`(/workspace 优先 → 用户 task 目录如果手贱建 `skills/` 同名子目录会 shadow 真 skills,/sandbox 在前更稳)。`DESIGN.md` 不动(纯实施层 Python 版本 + 容器 PYTHONPATH 修);`RUN.md` 不动(env 段 MP_API_KEY 已在上一条 skill commit 加入,Python 版本要求记 `requirements.txt` + Dockerfile 自表)。 - **新增 3 个科学计算 skill(pymatgen / stats_ml / plot_pub),服务建材院无机非金属材料 R&D**:`SCIENTIFIC_SKILLS.md` 评估完 K-Dense/scientific-agent-skills 仓库后落地选 4 个 ★★★ 中前 3 个动手(materials_db 后置,USPTO 部分留并入 `skills/patent`)。命名取**工具名直接**(`pymatgen` / `plot_pub`)+ **业务前缀**(`stats_ml` 因合三库需要场景导航),贴合现有 skill 命名风格(coding/ppt/research/...)。① **`skills/pymatgen/`**:`SKILL.md`(无机相中文→化学式映射表说明 / XRD 比对 / 对称性 / 相图 / VASP 输入文件,八条反模式)+ `materials.py`(`CEMENT_PHASES` dict 覆盖水泥熟料 / 水化产物 / 石膏 / 碳酸盐 / 陶瓷耐火 / 玻璃晶相 / 常见矿物共 50+ 条目,中英文 / 简写多 key 指同一化学式;`lookup_phase()` 大小写不敏感查找;`mp_rester()` context manager 自动从 env 拿 `MP_API_KEY`,缺则 RuntimeError 带申请链接;mp_api 局部 import 避免装包前 import 即崩)。② **`skills/stats_ml/`**:`SKILL.md` 纯指南(场景导航表选 sklearn / statsmodels / PyMC、5 个工作流示例 A-E 含配方-性能回归 / DoE 二阶响应面 / 显著性分析 / 贝叶斯小样本 / DBSCAN 异常配方、16 条反模式分库列示)+ 无 helper(三库 API 直接用)。③ **`skills/plot_pub/`**:`SKILL.md`(XRD 多相叠图 / TG-DSC 双 Y 轴 / 强度发展曲线 / 多 panel 论文 figure 4 个工作流 + 中文字体说明 + 10 条反模式)+ `style.py`(`apply_pub_style()` 一键设置:中文字体跨平台 fallback SimHei→YaHei→WenQuanYi→DejaVu / dpi 150 屏幕 300 保存 / viridis 默 cmap / 刻度朝内 / legend 无框 / PDF Type 42 字体合规期刊 / `font.size` `linewidth` 等可参数化;`_find_chinese_font()` 在 `font_manager.fontManager.ttflist` 查实装字体而非靠 try-load)。**关键决策**:(a) **不一键装 138 个 skill** —— 上下文噪声 + 误触发(用户"分析一下"模型可能跳 Scanpy),挑 4 个 ★★★ fork 单装;(b) **PyMC 装包延后** —— 带 pytensor 装 5min+ 体积大,真要做贝叶斯再装;requirements.txt 注释掉以 `# pymc>=5.10.0` 形式留接口;(c) **MP_API_KEY 走 .env** —— 跟 DEEPSEEK_API_KEY / ARK_API_KEY 同范式,litellm 不读但 `os.environ.get` 拿到;(d) **化学式映射表对中文 / 简写 / 英文学名同等待遇** —— 用户报相名习惯混杂(C3S / 硅酸三钙 / alite 都常见),多 key 同 value 比强迫归一化体验好;(e) **不写示例数据/单元测试**:开发期 LLM 工作流场景多变,跑了 SKILL.md 工作流验证而非脚本测试 —— skill 是 prompt 不是代码模块。requirements.txt 加 pymatgen / mp-api / scikit-learn / statsmodels(PyMC 注释)。`RUN.md` env 段加 MP_API_KEY 说明(可选 + 申请链接 + 未设抛 RuntimeError)。`DESIGN.md` 不动(纯 skill 加,无架构变化);`SCIENTIFIC_SKILLS.md`(根目录调研笔记)已沉淀整体评估,后续 materials_db 落地参考。装包未执行 —— 等用户跑 `.venv/Scripts/pip install pymatgen mp-api scikit-learn statsmodels` 装上才能验证 import 路径生效。否决:(a) 三个 skill 合并成一个 `science` skill —— 触发语义糊,LLM 难判,各做各的更清;(b) `materials_pymatgen` 这种业务前缀全打 —— pymatgen 本身就是材料库,前缀冗余;(c) helper 过度封装(写 `simulate_xrd(formula)` 全自动)—— 隐藏 pymatgen 真实 API,LLM 学不到本来好用的上游能力,反模式段在 SKILL.md 里讲清更轻;(d) plot_pub 内 `apply_pub_style()` 失败抛错 —— 中文字体没装也应该继续画(图能看就行,只是中文方块),warn 比 raise 友好。 - **DESIGN §7.5 增"image 体积 / 多 user 资源 / 后续加包策略"决策段**:dogfood 推进到加 npm + chromium + mermaid-cli 后,sandbox image 1.5G+,后续 domain 包(rdkit / pymatgen / ASE / pandoc-tex 等)还会进一步推大,把"image 大 = 资源占用大 = 多 user 容器爆炸"这条直觉关联的事实链拆开沉淀,免得未来花减肥功夫减错地方。三条认知校准:① **image 大 ≠ 运行时吃更多 RAM**(空载 `tini → sleep infinity` RSS 个位数 MB,layer 共享让磁盘乘数 = 1,真吃 RAM 的是 active exec 行为而非 image 字节);② **多 user 同时在线瓶颈在并发 exec 不在 idle 容器数**(杠杆全在 `docker run --memory --cpus --pids-limit` + 同 user 并发 semaphore + 整机 active user cap + idle 回收,减 image 体积对这条曲线无效);③ **新增依赖采用"base 收敛 + per-user 持久化 venv + 使用频次沉淀"**:base 只放高频共用轻量包(`requirements.txt` 当前形状),长尾 domain 包模型用 `pip install --target=/workspace/.venv/site-packages` 装到 per-user 持久化路径(随 user_root bind mount,idle 回收不丢);加 audit 统计哪些包累计被 >30% user 装过 ≥ 3 次 → 下次 build 合并进 `requirements.txt`,base 跟着真实使用模式收敛而非拍脑袋。否决:(a) 全塞 base —— 重包(torch / texlive)+ 长尾包打死磁盘 + 强迫所有 user 陪绑;(b) 运行时临时装(不持久化)—— 容器 idle 回收即丢冷启重装,高频复用差;(c) 多 image 按场景分 —— per-user 容器模型下 user 不知道选哪个,切 skill 还得换 image 心智不通;(d) per-user venv 用 named volume / 共享 image cache —— 包 install 脚本是任意代码,跨 user 共享 venv 破坏跨 user 隔离边界;(e) 依赖 pip cache 解决问题 —— pip cache 只省网络不省落盘,容器回收照样丢。落地点排进 Stage C Step 6 Executor 实施:cgroup limits / 并发 semaphore / idle 回收 / per-user venv mount 一并进 `DockerExecutor`(audit 沉淀机制延后,需要 dogfood 安装日志积累再开)。`RUN.md` 不动(当前无 CLI / env 变化,真做 venv mount 时再加);`DESIGN.md` §7.5 升级触发信号表后新增该段。 diff --git a/skills/analyze/SKILL.md b/skills/analyze/SKILL.md new file mode 100644 index 0000000..28040ef --- /dev/null +++ b/skills/analyze/SKILL.md @@ -0,0 +1,121 @@ +--- +name: analyze +description: 科学问题分析 / 拆解 / 引导。用户提出模糊的高层科研问题(如"想搞清楚 X 是什么原因 / 怎么提升 Y / 该不该做 Z")、还没决定要不要立项、还在想方向、不知道从哪入手时使用。本 skill 不执行任务,而是把模糊命题翻译成可操作子问题 + 实施路线图,最后导向其他 skill。已经明确要写本子 / 查文献 / 跑实验时不用,直接走 proposal / research 等。 +--- + +# Analyze - 科学问题分析 + +服务建材院无机非金属材料 R&D 场景。用户抛过来一个**模糊的高层科研问题**,本 skill 引导用户把它**翻译成可操作的子问题 + 实施路线图**,然后把每个子问题接力给合适的下游 skill。 + +**本 skill 不直接产出最终交付物**(不查文献 / 不写本子 / 不跑模型),只产出 `analysis.md` —— 一个共识性的"问题理解 + 路线图"文件。 + +## 何时用 + +- 用户说"我想搞清楚 / 想研究 / 不知道从哪入手 / 这个问题怎么拆 / 我们能做什么" +- 用户问题宽泛,只到效应层("早强偏低"、"耐久性差"、"性能不稳定"),没到具体变量 / 指标 / 假设 +- 用户在评估要不要立项,问"这个方向值不值得做" +- 用户想在不熟悉的领域结合本院能力做点事,要先理一下问题 + +## 何时不用 + +- 用户已经写明白要做什么(配方对比 / 标准检测 / 文献综述 / 写本子)→ 直接走对应 skill +- 用户问通识知识 / 名词定义 → 直接答 +- 用户要审稿 / 改文 → 走 review +- 用户要做异常排查但已经定位到具体环节(只差查文献验证) → 走 research + +## 资源 + +所有路径相对 ``(`load_skill` 返回头里给的绝对路径): + +- `/references/pico_template.md` — PICO/PECO 问题规范化模板 + FINER 自检(阶段一前 always read) +- `/references/issue_tree_patterns.md` — MECE 拆分模板(机理-现象-工艺三层)(阶段二前 always read) +- `/references/root_cause.md` — 5Whys + Fishbone(根因型分支用) +- `/references/innovation.md` — First-principles + TRIZ 矛盾矩阵(创新型分支用) +- `/references/doe_planning.md` — DoE 选型(优化型分支用,衔接 stats_ml) +- `/templates/analysis_report.md` — 最终产物 `analysis.md` 的格式模板 + +## 工作流(四段式,关键阶段卡) + +### 阶段一: 问题规范化(PICO 化)— BLOCKING + +读 `/references/pico_template.md`,把用户原话填进 PICO 表。 + +1. 复制 `/templates/analysis_report.md` → `/analysis.md` +2. 填 §1 原始问题(用户原话照抄) +3. 填 §2 PICO 草稿: + - **P** 对象(研究材料 / 体系 / 工艺环节) + - **I** 干预(自变量 / 被你改变的量) + - **C** 对照(参照基准:基准配方 / 国标 / 国外同类型材料) + - **O** 输出(**必须量化**:具体指标 + 单位 + 期望数值) +4. 跑 §3 FINER 自检(Feasible / Interesting / Novel / Ethical / Relevant)五维评级 + 一句话说明 +5. 把表格呈现给用户,问:"PICO 这样填对吗?O 这一栏需要更具体的指标吗?" +6. **BLOCKING:用户确认后才进阶段二** + +字段填不出 / 用户说"不知道"是常态 —— 别强逼,在表里写 ``,但**至少 P 和 O 要落地**,否则没法拆。 + +### 阶段二: Issue Tree 拆解(MECE)— BLOCKING + +读 `/references/issue_tree_patterns.md`,选一个拆分模板搭树。 + +1. 选拆分维度:**机理-现象-工艺**(建材最常用,默认选)/ **输入-过程-输出** / **材料-工艺-装备-检测** +2. 拆 2-3 层(别过深,叶子节点 5-10 个最舒服) +3. 在 `analysis.md` §4 写 issue tree(用缩进列表或 mermaid 块,LLM 自选) +4. 每个叶子节点标注三个 tag: + - **类型**:根因 / 创新 / 优化(决定阶段三用哪个分支) + - **优先级**:高 / 中 / 低(凭"是否瓶颈 + 解决后收益") + - **能力描述**:一句话动词短语(查文献 / 算结构 / 实验测样 / 数据建模 / 出图 / 写本子...) —— **不写 skill 名**,让 LLM 后续按当时看到的 skill 清单自匹配 +5. 预览给用户,问:"叶子节点是否漏了?优先级判断对吗?" +6. **BLOCKING:用户确认后才进阶段三** + +### 阶段三: 分支深化(按叶子类型选 framework) + +对**高优先级**叶子节点,按类型走对应分支: + +| 叶子类型 | 读哪份 reference | 做什么 | +|---|---|---| +| **根因型**(为什么 X 异常 / 不达标) | `root_cause.md` | Fishbone 列广 → 5Whys 深挖优先支 | +| **创新型**(怎么突破常规 / 找新路径) | `innovation.md` | First-principles 拆假设 → TRIZ 矛盾矩阵找发明原理 | +| **优化型**(多因素调参找最优) | `doe_planning.md` | 选 DoE 类型(正交 / Plackett-Burman / 响应面)→ 输出实验设计表 | + +把分支结果写到 `analysis.md` §5(每个高优先叶子一小节)。这一步**不每个叶子都卡** —— 一次性写完高优先叶子的深化分析,最后整体给用户看。 + +### 阶段四: 实施路线图 + 接力 + +在 `analysis.md` 写 §6 实施步骤、§7 风险与备选、§8 TODO。 + +**§6 每一步要标四件事**: +- **干什么**(动词开头) +- **用什么能力**(一句话能力描述,**不写 skill 名**,让用户 / LLM 自路由) +- **产物**(交付物名 + 格式) +- **判停条件**(什么时候算这步做完) + +最后给用户: +- `analysis.md` 路径 +- 建议"下一步用 X 能力推进"(X 是能力描述,LLM 按当下 skill 清单匹配 skill 名,不在 SKILL.md 写死) +- TODO 待补项清单 + +## 工作目录 + +`` = system prompt 给的绝对路径。本 skill 只写 **`/analysis.md`** 一个文件,不需要 `figures/` / `sections/` / `source/` 子目录 —— analyze 是引导式分析,无大型多文件产物。 + +需要参考素材时:让用户提供材料路径,不要自己 fetch / search(那是下游 skill 的事)。 + +## 反模式 + +- 阶段一不让用户确认 PICO 就开拆解(O 没量化的 issue tree 拆出来全是空话) +- Issue tree 拆到 4 层以上(LLM 容易堆细节,3 层足够 R&D 决策用) +- 叶子节点写"用 research skill"/"用 stats_ml skill"(skill 名硬编码,将来 skill 改名要回来改;用能力描述代替) +- 用户已经知道要做什么时强行让填 PICO(走对应 skill 即可,不要浪费时间) +- 真去执行子问题(查文献 / 算 XRD / 跑回归) —— analyze 只做"想清楚",执行交棒下游 +- 编造文献 / 数据支撑某个分支的可行性(不知道就标 `` + 建议接 research 验证) +- TRIZ / DoE 全套强推 —— 只在叶子节点性质匹配时用对应分支,不为了用框架而用 +- 报告写成学术综述(分支只是工具,产物是路线图不是 paper) + +## 输出 + +完成后给用户: +- `/analysis.md` 路径 +- PICO 表(回顾用) +- 高优先级叶子节点清单(3-5 个) +- 推荐下一步:"先用 <能力描述> 推进 <某叶子>" —— 由 LLM 按看到的 skill 清单匹配 +- `` 待补项 diff --git a/skills/analyze/references/doe_planning.md b/skills/analyze/references/doe_planning.md new file mode 100644 index 0000000..70029c0 --- /dev/null +++ b/skills/analyze/references/doe_planning.md @@ -0,0 +1,91 @@ +# DoE(实验设计)选型 + +何时启动:**叶子节点类型 = 优化型**。典型场景:多个工艺 / 配方变量同时影响输出,要找主效应、二阶交互、或最优组合。 + +## 选型导航 + +| 你想要 | 因素数 | 推荐设计 | 实验次数 | 后续分析 | +|---|---|---|---|---| +| 看哪些因素是主效应(筛选) | 6-15 | Plackett-Burman | k+4 ~ 4(k+1)/4 | t 检验主效应,接 statsmodels OLS | +| 看主效应 + 二阶交互 | 3-7 | 部分因子 2^(k-p) / 全因子 2^k | 8-32 | ANOVA + 交互项 | +| 找最优响应面 | 2-5 | 中心复合(CCD)/ Box-Behnken | 15-30 | 二阶响应面 + 等高线 | +| 配方约束(组分和 = 1) | 2-5 | 混料设计(Simplex / Extreme-Vertices) | 视约束而定 | Scheffé 多项式 | +| 实验昂贵 / 序贯优化 | 不固定 | 序贯单纯形 / 贝叶斯优化 | 视收敛而定 | scipy.optimize / scikit-optimize / optuna | + +## 各设计速查 + +### Plackett-Burman(筛选) + +- 用法:把"可能有影响的"6-15 个因素一起测,8-12 次实验筛出主效应 +- 假设:**只看主效应,忽略交互**(因素 > 7 时全因子代价爆炸,先筛主效应再深入) +- 输出:每个因素的效应大小 + p value,p < 0.05 的进下一轮 +- 工具:`pyDOE2.pbdesign` / `statsmodels` OLS + +### 全因子 / 部分因子(2^k) + +- 用法:每个因素 2 水平(高 / 低),全组合(全因子)或挑一部分(部分因子,牺牲高阶交互的分辨率) +- 适合 k ≤ 5 全因子(32 次),k ≤ 8 部分因子 +- 输出:主效应 + 所有二阶交互 + ANOVA p value +- 工具:`pyDOE2.fullfact` / `pyDOE2.fracfact` + +### 中心复合 / Box-Behnken(响应面) + +- 用法:每因素 3-5 水平(含中心点 + 轴点),拟合二阶多项式响应面 +- 假设:输出对自变量光滑可微,二阶展开够用(强非线性场景不适用,要看残差图) +- 输出:`y = β0 + Σβi·xi + Σβii·xi² + Σβij·xi·xj` 拟合系数 + R² + 等高线最优点 +- 工具:`pyDOE2.ccdesign` / `pyDOE2.bbdesign` → sklearn / statsmodels 拟合 → matplotlib 等高线 + +### 混料设计(Mixture) + +- 用法:配方比例之和 = 1(水泥 + 矿粉 + 粉煤灰 = 100%),自变量受约束 +- 不适用全因子(违反约束) +- 输出:Scheffé 多项式 `y = a·x1 + b·x2 + c·x3 + d·x1·x2 + ...` +- 工具:`pyDOE2` 不直接支持混料,用 R `mixexp` 或自己生成单纯形格点 / Extreme-Vertices 算法 + +### 序贯优化(贝叶斯 / 单纯形) + +- 用法:实验昂贵 / 不能并行 / 不知道因素范围时,边做边学 +- 输出:每轮推荐下一个实验点(EI / UCB 等准则) +- 工具:`scikit-optimize` / `optuna` / `Ax`(Meta) + +## 工作流(analyze 阶段产出什么) + +在 `analysis.md` §5 对应叶子小节里写: + +``` +## 叶子 X: 配方因素对 28d 抗压强度的影响 — 优化型 + +### 实验设计 + +- 设计类型: Plackett-Burman 筛选(候选因素 7 个) +- 因素表: + | 编号 | 因素 | 低水平 | 高水平 | 单位 | + |---|---|---|---|---| + | A | 矿粉掺量 | 10 | 30 | % | + | B | 粉煤灰掺量 | 5 | 25 | % | + | C | 水灰比 | 0.30 | 0.40 | - | + | D | 减水剂掺量 | 0.5 | 1.5 | % | + | E | 养护温度 | 20 | 35 | °C | + | F | 比表面积 | 350 | 420 | m²/kg | + | G | 石膏掺量 | 3 | 6 | % | +- 实验次数: 12(11 因素 PB,空跑 4 个虚拟列控制 II 类错误) +- 中心点: 3 次重复测组内方差 +- 总计: 15 次实验,GB/T 17671 标准养护测 28d 抗压 + +### 后续分析 + +- 接续能力: 跑 OLS 回归 + ANOVA + 主效应 Pareto 图(由 LLM 按 skill 清单匹配,stats_ml 合适) +- 判停: 找到 2-3 个 p < 0.05 的主效应,进入下一轮响应面 DoE(CCD) +``` + +**不要直接生成具体随机表 / 实验点位** —— analyze 只规划设计类型 + 因素表,具体生成实验点位由下游(stats_ml 用 pyDOE2)跑。 + +## 反模式 + +- 因素全选 + 全因子(k=10 → 1024 次实验,做不完) —— 用 PB 筛选先 +- 不留中心点(无法估实验误差,p value 全不可靠) —— 至少 3 个中心点重复 +- 设计选错:配方混料用全因子 —— 比例约束破坏全因子假设 +- 直接在 analyze 跑设计代码 —— analyze 只规划设计类型 + 因素 + 范围,生成实验表交下游 +- 输出范围超出物理可行(配方比例为负 / 温度超过设备能力)—— 因素范围写在表里时要 sanity check +- 没标"判停条件"(跑完不知道接下来干啥) —— 每个 DoE 都要标"如果结果 X 接下一步 Y,如果 Z 回上一步" +- 假设二阶响应面就够(强非线性体系如玻璃形成区) —— 响应面失配时要看残差,可能需要分段建模或机理模型 diff --git a/skills/analyze/references/innovation.md b/skills/analyze/references/innovation.md new file mode 100644 index 0000000..5a8d691 --- /dev/null +++ b/skills/analyze/references/innovation.md @@ -0,0 +1,92 @@ +# 创新分支(First-principles + TRIZ) + +何时启动:**叶子节点类型 = 创新型**。典型场景:常规路线已经走到尽头 / 想找替代方案 / 跨学科借鉴 / 立项书要写"创新点"但还没想清楚。 + +## First-principles(第一性原理拆解) + +剥掉"行业惯例 / 类比 / 经验",拆到**不可再拆的物理化学约束**,在约束之上重新构造方案空间。 + +步骤: +1. **写下当前方案的所有"假设"**(看似理所当然的事) +2. **每条假设问**:这是物理化学定律,还是历史惯例 / 类比? +3. 把"惯例 / 类比"那一类全划掉 +4. 在剩余的"硬约束"上,重新构造方案空间 + +例:低碳水泥 + +``` +当前方案: 普通硅酸盐水泥(OPC),煅烧石灰石生成 CaO,CO2 排放 ~800 kg/t + +假设清单: +1. 必须用 CaO 提供 Ca 源 ← 类比(也可用富钙的尾矿 / 钢渣 / 工业副产物) +2. 必须高温煅烧 ← 类比(常温合成的地聚物已商用) +3. 必须有 C-S-H 凝胶提供强度 ← 类比(C-A-S-H / N-A-S-H 也能提供) +4. 水化必须放热 ← 硬约束(热力学,无法改) +5. 28d 必须达到 42.5 MPa ← 标准要求,不是物理约束(可改国标 / 申请新标) +6. 必须用水拌和 ← 类比(亚硫酸钠激发的化学结合水方案) + +划掉惯例后剩硬约束: +- 热力学允许的 Ca-Si-Al-O 体系凝胶 +- 水化放热 + 体积稳定 +- 凝结时间窗口 ≤ 数小时(工程性需求) + +方案空间(在硬约束上构造): +- 碱激发胶凝(粉煤灰 / 矿渣 / 偏高岭土 + NaOH/水玻璃) +- 石灰石煅烧粘土(LC3,煅烧温度 800°C,CO2 降 40%) +- 贝利特水泥(高 C2S 低 C3S,煅烧温度低 100°C) +- 硫铝酸盐水泥(CSA,煅烧温度更低,28d 强度高) +``` + +## TRIZ 矛盾矩阵(建材子集) + +TRIZ 把工程问题归结为"两个想要的指标矛盾",查矩阵给出**发明原理建议**。完整矩阵 40×40 太大,本文摘录建材常遇到的 10 对冲突 + 对应原理: + +| 矛盾 | 经典建材场景 | 候选发明原理(TRIZ #) | +|---|---|---| +| 强度 ↑ vs 韧性 ↑ | 陶瓷 / 玻璃 / 高强混凝土脆性 | #1 分割(纤维分散)/ #15 动态化(预应力)/ #40 复合材料 | +| 早强 ↑ vs 后期强度 ↓ | 早强水泥后期强度倒挂 | #19 周期性作用(分阶段水化)/ #10 预先作用(预水化晶种)/ #35 物理状态改变 | +| 致密 ↑ vs 透气 ↑ | 多孔陶瓷 / 透水砖 / 自防水墙体 | #1 分割(分级孔结构)/ #17 多维度(梯度密度) | +| 重量 ↓ vs 强度 ↑ | 轻质高强混凝土 | #40 复合材料(轻骨料 + 高性能浆体)/ #14 球面化(空心微珠) | +| 耐高温 ↑ vs 抗热震 ↑ | 耐火材料经典矛盾 | #35 物性改变(玻璃相塑化)/ #17 多维度(梯度)/ #36 相变 | +| 防水 ↑ vs 透气 ↑ | 建筑外墙呼吸性 | #31 多孔材料 / #25 自服务(疏水自组装) | +| 流动性 ↑ vs 强度 ↑ | 自密实混凝土水灰比矛盾 | #28 替代力学手段(化学减水剂)/ #35 物理改变(粒径优化) | +| 反应速率 ↑ vs 工作时间 ↑ | 速凝混凝土施工窗口 | #19 周期性 / #36 相变(温度触发)/ #10 预先作用 | +| 耐久性 ↑ vs 成本 ↓ | 沿海建筑混凝土 | #25 自服务(自修复)/ #40 复合材料(掺合料替代) | +| 隔热 ↑ vs 承重 ↑ | 保温承重一体化外墙 | #17 多维度(夹芯)/ #31 多孔 / #1 分割 | + +## 工作流(First-principles + TRIZ 串行) + +1. **First-principles 拆假设**:列方案空间(2-5 个候选路径) +2. **每条候选路径找冲突**:能不能用 TRIZ 表查到对应矛盾? +3. **TRIZ 给原理**:挑 1-2 条最有意思的发明原理,看能不能用到方案上 +4. **输出 2-3 个具体新方案**:每个标"借鉴的原理 / 与现有方案的关键差异 / 风险点" + +输出格式(放进 `analysis.md` §5 对应叶子): + +``` +## 叶子 X: <问题描述> — 创新型 + +### First-principles 拆假设 +| 假设 | 类型(硬约束 / 类比) | +|---|---| +| ... | 类比 | +| ... | 硬约束 | + +### 候选方案空间 +1. **方案 A**: <一句话描述> — 借鉴原理: — 关键差异: — 风险: <技术 / 成本 / 经费> +2. **方案 B**: ... +3. **方案 C**: ... + +### 接续建议 +<查文献验证可行性 / 做小试 / 算热力学相图 / ...> —— 由 LLM 按 skill 清单匹配 +``` + +## 反模式 + +- TRIZ 全套 40 原理硬背 —— 上面 10 对矛盾够 80% 建材场景 +- First-principles 拆到量子层("根本上电子云重叠决定强度") —— 拆到工程可调维度(组分 / 结构 / 工艺)即停 +- 创新方案没标"和现有方案的具体差异" —— 等于换了个名字 +- 自动否定常规方案 —— 创新不是为了否定 OPC / 烧结陶瓷,只是补充方案空间 +- 创新方案不评可行性 —— 在 analyze 阶段标"风险:验证成本 / 经费需求 / 时间窗口",别给"先做了再说" +- 借口 TRIZ 装高级 —— 用户看不懂的术语堆砌反而不专业,用大白话说原理(分阶段 / 复合 / 梯度...) +- 把所有创新都归到 TRIZ —— TRIZ 是工具,不是宗教;能直接想清楚的不必硬套 diff --git a/skills/analyze/references/issue_tree_patterns.md b/skills/analyze/references/issue_tree_patterns.md new file mode 100644 index 0000000..9d012d6 --- /dev/null +++ b/skills/analyze/references/issue_tree_patterns.md @@ -0,0 +1,93 @@ +# Issue Tree 拆分模板(MECE) + +MECE = Mutually Exclusive, Collectively Exhaustive(各子项互不重叠,合起来覆盖全部)。拆得好的 issue tree 看一眼就知道哪些叶子是关键路径。 + +## 三个常用维度(按场景选一个) + +### 模板 A: 机理-现象-工艺(建材最常用,默认选) + +适合:**性能问题 / 缺陷分析 / 新材料探索** + +``` +根问题 +├── 机理层(为什么会这样?) +│ ├── 化学组成 / 物相 +│ ├── 微观结构 / 形貌 +│ └── 界面 / 缺陷 +├── 现象层(看到了什么?) +│ ├── 宏观性能(强度 / 韧性 / 耐久性 / 热学 / 电学) +│ ├── 表观特征(外观 / 颜色 / 开裂模式) +│ └── 时间演化(早期 / 中期 / 长期) +└── 工艺层(怎么造出来的?) + ├── 原料(组成 / 纯度 / 粒度) + ├── 配料 / 混合 + ├── 成型 / 烧成 / 养护 + └── 后处理 / 检测 +``` + +### 模板 B: 输入-过程-输出(适合系统性问题) + +适合:**生产线问题 / 工艺整体优化 / 质量管控** + +``` +根问题 +├── 输入(物料 / 能源 / 信息) +├── 过程(单元操作 1, 2, 3, ...) +└── 输出(主产品 / 副产品 / 排放 / 废物) +``` + +### 模板 C: 材料-工艺-装备-检测(适合工程问题) + +适合:**装备改造 / 检测方法开发 / 工艺定型** + +``` +根问题 +├── 材料(配方 / 原料) +├── 工艺(参数 / 流程) +├── 装备(设备 / 工装 / 模具) +└── 检测(标准 / 仪器 / 取样) +``` + +## 深度建议 + +- **2 层是底限**(1 层等于没拆) +- **3 层是甜蜜区**(根问题 → 大类 → 具体子问题,5-10 个叶子) +- **4 层只在叶子节点本身复杂时分**(且只分那个叶子,别全树都 4 层) + +过深的 tree 模型容易堆细节、用户也读不下去。**宁可拆完发现树不够,再补一支,也别一上来 4 层全开。** + +## 叶子节点标注规范 + +每个叶子节点要带这三个 tag,合写在中括号里:`[<类型> / <优先级> / <能力描述>]` + +| Tag | 取值 | 怎么判 | +|---|---|---| +| **类型** | 根因 / 创新 / 优化 | 根因 = "为什么 X 异常";创新 = "怎么换条新路";优化 = "在已知路径上调参找最优" | +| **优先级** | 高 / 中 / 低 | 高 = 是当前瓶颈 + 解决后收益大;中 = 解决了有改善但不致命;低 = 远期 / 边缘问题 | +| **能力** | 一句话动词短语 | "查近 5 年综述"、"XRD + Rietveld 精修算物相含量"、"DoE 拟合响应面"、"SEM 看形貌"... **不写 skill 名** | + +## 示例:早强问题拆解(模板 A) + +``` +P42.5 早强偏低 +├── 机理层 +│ ├── [根因 / 高 / XRD + Rietveld 精修算 C3S/C2S 比例] 熟料 C3S 比例是否偏低 +│ ├── [根因 / 高 / SEM 看水化早期 CSH 形貌 + EDS 测 Ca/Si] 水化早期产物形貌异常 +│ └── [根因 / 中 / 查文献综述助磨剂对水化影响] 助磨剂残留是否毒化水化 +├── 现象层 +│ ├── [优化 / 中 / DoE 调比表面积测早强响应] 比表面积与早强关系曲线 +│ └── [优化 / 低 / 跟踪生产记录方差分析] 不同批次早强方差是否显著 +└── 工艺层 + ├── [优化 / 高 / 跟班记录工艺参数 + 测游离 CaO] 煅烧温度与游离 CaO 关系 + └── [创新 / 中 / 查文献综述纳米 CaCO3 晶种] 引入纳米晶种早强方案 +``` + +## 反模式 + +- 拆出的叶子节点之间有重叠(违反 MECE 的 ME)—— 例:既有"原料 SiO2 含量"又有"配料 SiO2 比例",合并 +- 漏掉显然该有的分支(违反 MECE 的 CE)—— 例:讨论强度问题但漏了"养护条件" +- 叶子标"用 research skill"/"用 stats_ml skill" —— 写能力描述,不写 skill 名(改名要回来改) +- 叶子优先级全标"高" —— 假装 MECE,等于没排 +- 拆到 4 层才发现叶子全是 `` —— 说明 PICO 阶段问题没问清,回阶段一 +- 拆完 tree 自己开始查文献做分析 —— analyze 只拆,执行交棒下游 +- mermaid 中文节点名带特殊字符不转义(逗号 / 引号 / 括号) —— 节点名用方括号包,内部避免符号或转义 diff --git a/skills/analyze/references/pico_template.md b/skills/analyze/references/pico_template.md new file mode 100644 index 0000000..f436f3c --- /dev/null +++ b/skills/analyze/references/pico_template.md @@ -0,0 +1,78 @@ +# PICO/PECO 问题规范化模板 + +PICO 起源于循证医学(P=Patient, I=Intervention, C=Comparison, O=Outcome),工程领域沿用或改造为 PECO(E=Exposure)。本 skill 默认 PICO。目的:把模糊命题翻译成可拆解、可量化的问题陈述。 + +## 四要素填空表 + +| 要素 | 填什么 | 建材 R&D 提问角度 | +|---|---|---| +| **P** (Population/Process) | 研究对象 —— 材料体系 / 工艺环节 / 检测方法 | 你研究的是什么材料?什么阶段?(例:P52.5 普通硅酸盐水泥早期水化阶段 / 莫来石熔铸耐火砖烧结过程) | +| **I** (Intervention) | 干预 —— 被你主动改变的变量 | 你打算改什么?(例:掺入 5% 纳米 SiO2 / 烧成温度从 1450°C 调到 1500°C) | +| **C** (Comparison) | 对照 —— 比较基准 | 跟谁比?基准配方?国标?国外同类型?(例:vs 不掺纳米 SiO2 的同配方 / vs JC/T 1086-2008 规定值) | +| **O** (Outcome) | 输出 —— **必须量化** | 用什么指标判断?数值目标?(例:1d 抗压强度提升 ≥ 15% / 28d 干燥收缩 ≤ 0.05%) | + +## 填空注意 + +- **P 别太宽**:"水泥" → "P52.5 普通硅酸盐水泥(C3S 含量 55-60%,中铝相)" +- **I 必须是可操作变量**:"提升性能" 不是 I,"温度 / 配比 / 时间 / 添加剂种类 / 比表面积" 才是 +- **C 不可省**:没对照的结果没意义。最低写"vs 当前配方基线" +- **O 必须有单位 + 数值**:"显著提升" / "改善" 全部禁用;"≥ 15%" / "≤ 0.05%" / "GB/T 17671 规定值的 1.2 倍" 才合规 + +## 建材域示例 + +### 示例 1: 早强问题(根因 + 优化混合) + +| | | +|---|---| +| 原始问题 | "我们这批水泥早强偏低" | +| P | 现有量产 P42.5 普通硅酸盐水泥(熟料 C3S 52%,SO3 2.3%,比表 350 m²/kg) | +| I | 待定 —— 候选:① 提高熟料 C3S 至 58%;② 添加 0.5% 纳米 CaCO3 晶种;③ 比表提升到 380 m²/kg | +| C | 基线:当前量产配方 1d 抗压 12 MPa,3d 22 MPa | +| O | 1d 抗压 ≥ 15 MPa,3d ≥ 26 MPa,28d 不低于 42.5 MPa(国标线) | + +### 示例 2: 耐火砖热震失效(根因型) + +| | | +|---|---| +| 原始问题 | "玻璃窑用熔铸 AZS 砖在 1450°C 工况下出现热震断裂" | +| P | 熔铸 33# AZS 砖(Al2O3 51%, ZrO2 33%, SiO2 14%) | +| I | 待定 —— 候选:① 添加 1-3% TiO2 改性玻璃相;② 优化退火曲线;③ 玻璃相组分调整 | +| C | 现有标准退火曲线 + 不加 TiO2 | +| O | 1100°C ↔ 室温热震 30 次无明显裂纹(ISO 16282) / 玻璃相弹性模量降低 ≥ 10% | + +### 示例 3: 新型材料探索(创新型) + +| | | +|---|---| +| 原始问题 | "想做一种低碳水泥" | +| P | 待定 —— 用户要补充:基于什么体系?(贝利特?石灰石煅烧粘土?碱激发?) | +| I | 由 P 决定 | +| C | OPC(普通硅酸盐水泥,CO2 排放 ~800 kg/t 熟料)基线 | +| O | CO2 排放 ≤ 500 kg/t,28d 抗压 ≥ 42.5 MPa,168d 干燥收缩 ≤ 0.06% | + +## FINER 自检(问题质量打分) + +PICO 填完后,5 个维度各给 1-5 分 + 一句话说明: + +| 维度 | 问题 | +|---|---| +| **F** Feasible | 现有实验条件 / 人 / 时间 / 经费 / 检测能力够吗? | +| **I** Interesting | 行业里有人关心吗?能发文章 / 立项 / 转化吗? | +| **N** Novel | 已经有人做过 / 做透了吗?(常见 trap:用户以为新但其实 90 年代已成熟) | +| **E** Ethical | 涉及人 / 动物 / 环境 / 知识产权风险吗?(建材常见:石棉 / 重金属浸出 / 放射性) | +| **R** Relevant | 对你们院 / 课题组 / 项目目标契合吗? | + +**任一维度 ≤ 2 → 显式标注"问题需重新审视"**,不一定要继续做。 + +## 何时不强求 PICO + +- 用户问的是**文献调研类**("综述 X 领域") —— 直接 research,PICO 强行套反而别扭 +- 用户问的是**工程实施类**("怎么把 X 推到生产") —— 走工艺优化路线,PICO 仍可用但 I/C 改成"工艺参数 vs 现行工艺" +- 用户的问题本身就是**工具选型**("用什么仪器测 X") —— 不需要 PICO,直接给经验答 / 走 research + +## 拒绝信号(说明问题还没准备好) + +- 整张表都是 `` → 问题还在概念阶段,先帮用户调研背景而不是硬拆 +- O 怎么都量化不出来 → 用户根本没想清楚要解决啥,引导回到目标层 +- P 与 I 矛盾(P 写"水泥",I 写"加金属粉末改性") → P 范围太窄,扩到"水泥基复合材料" +- 用户拒绝填任何字段("你看着填就行") → 强烈信号:用户对问题没真实理解,引导回到"你为什么想做这个" diff --git a/skills/analyze/references/root_cause.md b/skills/analyze/references/root_cause.md new file mode 100644 index 0000000..706d2f2 --- /dev/null +++ b/skills/analyze/references/root_cause.md @@ -0,0 +1,95 @@ +# 根因分析(Fishbone + 5 Whys) + +何时启动:**叶子节点类型 = 根因型**。典型场景:已知现象异常("早强低 / 不合格率高 / 批次方差大 / 局部开裂"),需要找根因。 + +## Fishbone(石川图 / 鱼骨图) + +把可能原因按大类列广,先求**穷尽**,后求深度。建材 R&D 改造后六大支: + +| 支 | 包含 | +|---|---| +| **材料** | 原料组成 / 粒度 / 含水率 / 杂质 / 批次差异 / 储存时间 | +| **工艺** | 配料比 / 温度曲线 / 时间 / 搅拌速度 / 养护条件 / 成型压力 | +| **设备** | 磨机磨损 / 窑炉密封 / 模具精度 / 控温精度 / 校准状态 / 振动台均匀性 | +| **检测** | 取样方法 / 仪器校准 / 标准选用 / 数据处理 / 主观误差 / 试件养护 | +| **环境** | 温度 / 湿度 / 季节性 / CO2 浓度 / 原料季节性波动 | +| **人员** | 操作差异 / 班次 / 培训水平 / SOP 执行 / 经验 | + +输出格式(放进 `analysis.md` §5 对应叶子的小节): + +``` +## 叶子 X: <问题描述> + +### Fishbone 列广 + +| 大类 | 可能原因 | 优先 | +|---|---|---| +| 材料 | 原料 A 粒度变化 | 高 | +| 材料 | 原料 B 含水率波动 | 中 | +| 工艺 | 烧成温度漂移 | 高 | +| 工艺 | 配料秤精度 | 低 | +| 设备 | 磨机内衬磨损 | 中 | +| ... | ... | ... | +``` + +穷尽 6 大支后,挑 2-3 个高优先项进 5 Whys。 + +## 5 Whys + +对 Fishbone 选出的高优先项,**连续问 5 次为什么**,直到拆到**可干预的机理层 / 工艺参数 / 设备状态**,不要拆到哲学层。 + +例: + +``` +现象: 某批 P42.5 1d 抗压只有 9 MPa(应 ≥ 12 MPa) + +Why 1: 为什么 1d 强度低? + → 水化反应早期速率慢 + +Why 2: 为什么早期水化慢? + → C3S 水化贡献不足 + +Why 3: 为什么 C3S 水化贡献不足? + → 熟料中 C3S 含量偏低(实测 48%, 设计 55%) + +Why 4: 为什么 C3S 含量低? + → 烧成时 C3S 形成不充分,大量游离 CaO 残留(实测 fCaO 2.1%, 正常 < 1.5%) + +Why 5: 为什么 C3S 形成不充分? + → 烧成温度未达 1450°C(实测 1430°C,在线热电偶老化漂移) + +[停] 拆到了可干预参数(温度 + 热电偶状态),不要再问"为什么热电偶老化" +``` + +输出格式: + +``` +### 5 Whys: <高优先项> + +Why 1: ... → ... +Why 2: ... → ... +Why 3: ... → ... +Why 4: ... → ... +Why 5: ... → ... + +[停在此层的理由]: 已落到可干预参数 + +[建议验证]: <怎么验证这条因果链是否真实存在,接续什么能力> +``` + +## Fishbone + 5Whys 协同节奏 + +1. **先 Fishbone 求广**:6 大支各列 2-5 条,标优先级 +2. **挑 2-3 条高优先**:既是"高"又物理意义清晰 +3. **每条走 5 Whys 深挖**:拆到可干预层就停 +4. **给出验证建议**:每条根因要标"接续什么能力验证"(测物相 / 查工艺记录 / 做对照实验 / 查文献...) + +## 反模式 + +- 跳过 Fishbone 直接 5Whys(只问一支,漏掉其他显然该查的支) +- 5Whys 问到哲学层("为什么我们院的设备老化快?" → "因为预算少") —— 拆到可干预层就停 +- Fishbone 列了 30 条 —— 大杂烩,失去优先级意义;每支 2-5 条,总数 < 20 +- "原因"和"现象"混用(原因是过程:"温度漂移",不是名词标签:"温度") —— 拆错粒度 +- 标"高优先"但没给优先理由 —— 写一句"为什么这条优先" +- 在 analyze skill 内部自己跑 5 Whys 自圆其说(模型自答自证) —— 验证步骤交棒下游(research 查文献 / 实验设计走 DoE) +- 假设单根因(只有一条原因) —— 工程问题常多根因叠加,Fishbone 阶段就要并列多个高优先项 diff --git a/skills/analyze/templates/analysis_report.md b/skills/analyze/templates/analysis_report.md new file mode 100644 index 0000000..105d9d6 --- /dev/null +++ b/skills/analyze/templates/analysis_report.md @@ -0,0 +1,87 @@ +# 科学问题分析: <课题简称> + +> 由 analyze skill 生成,基于 PICO 化 + Issue Tree + 框架深化的引导式分析结果。 +> 本文件是"问题理解 + 路线图",**不是最终交付物**。后续执行(查文献 / 跑实验 / 写本子)交棒下游 skill。 + +## 1. 原始问题 + +<用户原话照抄,不做改写> + +## 2. PICO 规范化 + +| 要素 | 内容 | +|---|---| +| **P** (对象) | <研究材料 / 体系 / 工艺环节,具体到牌号 / 配方 / 阶段> | +| **I** (干预) | <自变量 / 被你改变的量;留白时写 ``> | +| **C** (对照) | <比较基准:基线配方 / 国标 / 国外同类型> | +| **O** (输出) | <量化指标 + 单位 + 数值;不可量化项写 ``> | + +## 3. FINER 自检 + +| 维度 | 评级(1-5) | 一句话说明 | +|---|---|---| +| **F** Feasible | | | +| **I** Interesting | | | +| **N** Novel | | | +| **E** Ethical | | | +| **R** Relevant | | | + +(任一维度 ≤ 2 须显式标注 "问题需重新审视") + +## 4. Issue Tree + +拆分维度:<机理-现象-工艺 / 输入-过程-输出 / 材料-工艺-装备-检测> + +``` +<根问题> +├── <大类 1> +│ ├── [<类型> / <优先级> / <能力描述>] <叶子 1.1> +│ ├── [<类型> / <优先级> / <能力描述>] <叶子 1.2> +│ └── ... +├── <大类 2> +│ └── ... +└── <大类 3> + └── ... +``` + +(也可用 ```mermaid``` 块画 flowchart,叶子节点保持上面的中括号 tag 形式) + +## 5. 关键子问题深化 + +按优先级"高"的叶子节点逐个深化: + +### 5.1 <叶子 1.1> — <根因 / 创新 / 优化> 型 + +<根因型: Fishbone 表 + 5Whys 链;创新型: First-principles 假设拆 + TRIZ 矛盾矩阵 + 候选方案;优化型: DoE 设计表 + 因素范围> + +接续能力:<一句话动词短语,例:"查近 5 年 cement hydration kinetics 综述"> + +### 5.2 ... + +(继续高优先叶子,每叶子一小节) + +## 6. 实施路线图 + +按优先级 + 依赖关系排序,每步标四件事: + +| 步骤 | 干什么 | 用什么能力 | 产物 | 判停条件 | +|---|---|---|---|---| +| 1 | <动词开头> | <能力描述> | <产物名 + 格式> | <什么时候这步算完> | +| 2 | | | | | +| ... | | | | | + +## 7. 风险与备选 + +| 风险 | 影响 | 缓解 / 备选方案 | +|---|---|---| +| | | | + +## 8. TODO 待补项 + +- [ ] <用户需补充 PICO 中的 I 候选范围> +- [ ] <用户需提供基线实验数据> +- [ ] <需查文献验证的关键假设> + +--- + +**下一步建议**:<由 LLM 按当下 skill 清单匹配,例:"先用 research 能力查证假设 X,完成后再回 analyze 更新 §5">