技术选型与第一阶段架构方案

基于材料物性参数的激光加工参数智能匹配系统 · SIT 创新训练项目 · 2026-09 · v1.0

经建模方法、实验设计、工程化部署三路并行调研验证:企划书的技术路线整体成立,无需推翻;本次共形成 9 项选型决策,其中新增 TabPFN 第四模型候选与 Conformal Prediction 统一不确定性层两项增强, 明确主动学习框架采用 Ax/BoTorch(避开已停止维护的方案),GPR 的 ONNX 导出列为受控风险项。 第一阶段(当前)搭建范围为数据层与工程底座,按 8 周里程碑推进。

1. 执行摘要:决策一览

下表汇总本次技术选型的全部核心决策。加粗项为相对企划书的变更或增强,其余为调研确认沿用。

表 1 · 技术选型决策总表
决策项 调研后决策 关键理由
建模主力 沿用 GPR + XGBoost + 随机森林三模型对比,GPR 为主推 小样本(300–500 组)下 GPR 天然输出均值与方差,不确定性估计最直接[2]
新增候选 增加 TabPFN 作为第四候选 预训练表格 Transformer,免调参,2025 年小样本基准表现突出[1][3]
不确定性量化 增加 Conformal Prediction 统一包装层(MAPIE 实现),与 GPR 原生区间并行输出 模型无关的覆盖保证,使四种模型置信区间可公平对比[4]
多输出策略 MultiOutputRegressor 独立建模三个输出(功率/速率/频率) 三输出相关性弱,链式回归无益;多任务学习留待 2027 扩展[6]
主动学习框架 明确采用 Ax/BoTorch(qEI / qNEI 批量采集);避开 scikit-optimize 与 modAL Ax 活跃维护(2026.06 发布 1.3.0),原生批量采集匹配物理实验批次模式[7];skopt 已于 2024.02 归档[8]
超参调优 Optuna(TPE 采样器) 成熟活跃,TPE 适合中小搜索空间;与 Ax 职责分离、不重复造轮子
模型导出 沿用 ONNX + joblib 双格式;GPR 导出后强制做 float64 精度对比 sklearn-onnx 官方支持 GPR,但需 DoubleTensorType,存在精度差异风险[11][12]
数据管理 沿用 SQLite + CSV;不引入 DVC / MLflow 500 组规模、5 人团队下为零运维方案;版本追踪交给 Git
工程规范 明确工程骨架标准:uv + src layout + pydantic-settings + pytest + ruff 2025–2026 Python 社区共识工具链,学生团队可长期维护

下一步行动

确认本方案后,即可按第 7 节的工程结构初始化代码仓库,并启动第 8 节的 W1–W2 里程碑:工程骨架、数据模型(pydantic)、SQLite 库表三项先行。

2. 调研背景与方法

企划书确定的技术路线为「数据采集 → 模型训练 → 封装交付」三阶段闭环:阶段一(2026.05–12)完成 5 类材料、300 组以上的物性-参数-效果映射数据;阶段二(2027)完成 GPR / XGBoost / 随机森林三模型对比与留一材料交叉验证,并扩展深度学习方法;阶段三(2028)完成 ONNX + FastAPI 推理服务封装与厂商试用。项目当前处于阶段一执行期(2026.09)。

企划书中已给出的技术方案属于初期调研,允许中途调整。为在正式开发前锁定第一批技术决策,本次围绕三个方向展开并行调研:

  • 建模方法:小样本表格回归的模型基准、不确定性量化、跨材料泛化与多输出策略;
  • 实验设计与主动学习:支持物理实验批次采集的框架现状与维护状态;
  • 工程化部署:ONNX 导出可行性(特别是 GPR)、API 服务、数据管理与工程规范。

调研重点覆盖 2024–2026 年公开资料,结论以「确认沿用 / 修改 / 新增」三类标注,与企划书方案逐项对照。

3. 建模层选型

3.1 模型池:保留三基线,新增 TabPFN

企划书提出的 GPR(RBF 核 + WhiteKernel)、XGBoost、随机森林三种模型组合在 2026 年仍是小样本表格回归的合理基线。GPR 在小样本场景下可同时输出预测均值与方差,是置信区间需求下最直接的方案[2];XGBoost 与随机森林提供精度与稳健性参照,且随机森林可输出特征重要性,辅助验证物性特征筛选[3]

本次新增 TabPFN 作为第四候选。TabPFN 是在合成表格数据上预训练的 Transformer,无需调参即可在中小样本表格任务上取得强结果,且推理速度快;2025 年基准评测中表现突出[1]。材料信息学方向的工作(如 ICL-FM 将 TabPFN 与材料嵌入结合)也验证了 in-context learning 方法在小样本材料属性预测中的潜力[5]——这与本项目「留一材料」的跨材料泛化目标天然契合。TabPFN 仅作对比候选,不作为主线依赖(见第 9 节风险表)。

LightGBM 在小样本场景下相对不利,不纳入首轮对比[3];CatBoost 留作 2027 年数据量扩展后的备选。

3.2 不确定性量化:GPR 原生区间 + Conformal 统一包装

预测置信区间是本系统对外的核心承诺(企划书要求覆盖率 ≥ 90%)。决策采用双轨:

  • 主线:GPR 后验分布直接输出均值 ± 95% 区间,无需额外校准;
  • 统一层:对四种候选模型统一追加 Conformal Prediction(保形预测)包装(MAPIE 的 SplitConformalRegressor),使 GPR、XGBoost、RF、TabPFN 的区间输出在同一覆盖率标准下公平对比[4]

Conformal Prediction 在有限校准集下提供覆盖率保证,不依赖模型形式,是当前小样本回归不确定性量化的主流做法[4]。NGBoost(参数化分布输出)作为备选记录,不纳入首轮实现。

3.3 多输出策略:独立建模

系统输出为三维连续值(功率百分比、走光速率、脉冲频率)。三者的物理相关性较弱(分别受能量耦合、扫描机械、脉冲时序主导),调研确认小样本表格场景下独立建模三个输出(MultiOutputRegressor)是最务实的选择[6];链式回归(RegressorChain)仅在输出强相关时有增益。企划书中 2027 年的多任务学习架构规划保留不变,作为数据量突破 500 组后的扩展方向。

3.4 跨材料泛化:特征工程优先

留一材料交叉验证(LOMO CV)是本项目区别于常规回归任务的核心评估协议。提升 LOMO 泛化的优先手段是特征工程:以物理意义明确的物性参数(反射率、吸收率、熔点/Tg、热导率、密度、粗糙度)构成统一特征空间,保证数值跨材料可比、量纲标准化一致。企划书提出的「大类独立训练 + 子类微调」分层策略保留为数据量不足时的备选方案;TabPFN 的 in-context 特性为跨材料泛化提供了额外一条低成路验证路径[1]

4. 实验设计与主动学习选型

4.1 框架现状与决策

本项目数据采集的特殊性在于:实验是串行批次的物理过程(一批做完再决定下一批),而非纯数字模拟,因此框架必须支持批量采集函数(batch acquisition)。调研对比如下:

表 2 · 主动学习 / 贝叶斯优化框架对比
框架 维护状态 批量采集 结论
Ax / BoTorch 活跃(Ax 1.3.0,2026.06[7] 原生 qEI / qNEI / qEHVI[9] 主选
Optuna 活跃 较弱 超参调优专用
scikit-optimize 2024.02 已归档[8] 避开
modAL 基本停滞 有限 避开
scikit-activeml 活跃(1.0.0,2025.12) 有限 备选
Dragonfly / SMAC3 维护中 支持并行 / 弱 不采用

决策:主动学习环节采用 Ax/BoTorch。其 GPR 内核与建模层主力模型同源,采集函数直接复用训练好的 GPR 不确定性;qNEI 等批量采集函数支持「一次推荐一批 10–20 组参数」的物理实验节奏[9]。超参调优独立使用 Optuna(TPE),两者职责清晰互不干扰。材料实验领域的自主优化平台(如 NREL ALchemist[10])验证了此类工作流在实验科学中的可行性,可作为架构参考。

4.2 采集工作流:LHS 冷启动 → 主动学习

  • 初始采样:使用 scipy.stats.qmc.LatinHypercube 生成每种材料 30–40 组初始参数组合(拉丁超立方保证低维空间覆盖均匀);
  • 主动学习循环:初始数据训练 GPR 后,Ax 以 qNEI 推荐下一批 10–20 组实验,模型不确定性高的参数区域优先被探索;
  • 停止条件:留一材料验证误差收敛或单材料实验预算(80 组)耗尽。

该工作流将企划书「主动学习引导的高效实验采集」创新点落实为可执行方案,且与阶段二的建模管线共享同一套 GPR 基础设施,无额外维护成本。

5. 工程化栈选型

5.1 模型导出:ONNX 保留,GPR 列为受控风险

sklearn-onnx 官方支持 GaussianProcessRegressor 的导出[12],但官方示例明确要求使用 DoubleTensorType(float64)而非默认 float32,因为 GPR 的矩阵运算在 float32 下存在精度差异[11]。XGBoost 与随机森林的 ONNX 导出成熟[12]。决策:

  • 沿用 ONNX + joblib 双格式交付方案;
  • GPR 导出流程中强制插入精度对比环节(同一测试集上 sklearn 原生预测 vs ONNX Runtime 预测,误差超过阈值即回退 joblib + FastAPI 直载方案);
  • 该风险不阻塞第一阶段开发,2027 年模型定型时再验证。

5.2 API 服务与数据管理

FastAPI 方案确认可行:pydantic v2 承担请求/响应校验,模型在 lifespan 钩子中单次加载(避免每请求重复加载),CPU 推理走同步 endpoint 由 FastAPI 线程池处理,满足 ≤100ms 响应要求。数据管理沿用 SQLite + CSV:单文件零运维、5 人团队可直接共享,CSV 作为对外交付格式;DVC 与 MLflow 在当前数据规模(≤500 组)下属过度工程,明确不引入,数据版本追踪由 Git 提交记录承担。

5.3 设备采集与工程规范

串口通信采用 pyserial(活跃维护,支持 Python 3.10+[13]),按 producer-consumer 模式组织:后台读线程持续读取设备状态,主逻辑通过队列消费[14]。工程规范一次性定标准,避免后期重构:

  • 包管理:uv(2025–2026 Python 社区主流,速度快、锁文件确定性);
  • 项目结构:src layout(src/lmpm/,包名取 laser-material-parameter-matching 缩写);
  • 配置:pydantic-settings(类型安全的环境变量与配置文件管理);
  • 测试与质量:pytest + ruff(lint 与格式化二合一)。

6. 系统架构设计

系统按「数据层 → 模型层 → 服务层」三层组织,工程底座贯穿全程。主动学习闭环是架构中的关键反馈路径:模型层的不确定性评估反向驱动数据层的下一批实验设计。图中实线为数据流,蓝色虚线为主动学习反馈。

flowchart TB
    IN1(["材料物性测量
光谱仪 · 粗糙度仪 · DSC"]) IN2(["激光加工实验
HZZ-M300U · 355nm"]) subgraph P1["阶段一 · 数据层(2026.05–12 · 本次搭建)"] direction LR D1["实验设计 DoE
LHS + Ax 主动学习"] D2["数据采集
pyserial + 显微镜"] D3["数据存储
SQLite + CSV"] D1 --> D2 --> D3 end subgraph P2["阶段二 · 模型层(2027)"] direction LR M1["模型训练
GPR · XGB · RF · TabPFN"] M2["评估与 UQ
LOMO CV · Conformal"] M3["超参调优
Optuna TPE"] M1 --> M2 M3 -.-> M1 end subgraph P3["阶段三 · 服务层(2028)"] direction LR S1["推理引擎
ONNX + joblib"] S2["REST API
FastAPI · pydantic v2"] S3["容器交付
Docker"] S1 --> S2 --> S3 end OUT(["激光设备控制软件 / 厂商数据产品"]) IN1 --> P1 IN2 --> P1 D3 --> M1 M2 --> S1 S3 --> OUT M2 -. 主动学习反馈 .-> D1 classDef neutral fill:#F5F8FC,stroke:#DCE3EC,color:#1B2430; classDef focus fill:#EAF2FC,stroke:#0969DA,color:#05468C,stroke-width:1.5px; classDef external fill:#FFFFFF,stroke:#66717F,color:#3D4756; class IN1,IN2,OUT external; class D1,D2,D3 focus; class M1,M2,M3,S1,S2,S3 neutral; style P1 stroke:#0969DA,stroke-width:2px,fill:#FFFFFF,color:#05468C; style P2 stroke:#DCE3EC,fill:#FFFFFF,color:#3D4756; style P3 stroke:#DCE3EC,fill:#FFFFFF,color:#3D4756; linkStyle 11 stroke:#0969DA,stroke-width:1.8px;
图 1 · 系统三阶段技术架构(虚线为主动学习反馈闭环;阶段一为当前搭建范围)

6.1 模块职责

表 3 · 核心模块职责划分
模块 所属阶段 职责
domain(领域模型)阶段一pydantic 定义材料物性、实验记录、加工参数、质量评分四类实体,全链路类型校验
doe(实验设计)阶段一LHS 初始采样、参数空间定义、主动学习批次推荐(对接 Ax)
data(数据存取)阶段一SQLite 读写、CSV 导入导出、数据校验与清洗
device(设备采集)阶段一pyserial 串口状态读取、实验参数自动同步记录
ml(模型管线)阶段二四模型训练、LOMO 交叉验证、Conformal 包装、超参调优
api(推理服务)阶段三FastAPI REST 接口、ONNX Runtime 推理、置信区间输出

7. 项目工程结构

第一阶段按以下骨架初始化仓库(阶段二、三的目录预留占位,随进度填充):

lemdb/
├── pyproject.toml          # uv 管理:依赖声明、ruff/pytest 配置
├── README.md
├── .gitignore              # data/*.db 等产物不入库
├── src/lmpm/               # 主包:laser material parameter matching
│   ├── config.py           # pydantic-settings:路径、设备、参数范围
│   ├── domain/             # 领域数据模型(第一阶段核心)
│   │   ├── material.py     # MaterialProperty:反射率/吸收率/熔点/热导率/密度/粗糙度
│   │   ├── experiment.py   # ExperimentRecord / ProcessingParams / QualityMetrics
│   │   └── doe.py          # ParameterSpace / ExperimentDesign
│   ├── data/
│   │   ├── store.py        # SQLite 读写层
│   │   ├── io_csv.py       # CSV 导入导出(交付格式)
│   │   └── validate.py     # 入库前校验:范围/缺失/重复
│   ├── doe/
│   │   ├── initial.py      # LHS 初始采样(scipy QMC)
│   │   └── active.py       # Ax 主动学习批次推荐(阶段一末启用)
│   ├── device/
│   │   └── serial_recorder.py  # pyserial 采集(协议确认后开发)
│   ├── ml/                 # 阶段二:train / evaluate / uq
│   └── api/                # 阶段三:main.py(FastAPI)
├── scripts/
│   ├── init_db.py          # 初始化 SQLite 库表
│   ├── generate_doe.py     # 生成参数网格 CSV
│   └── record_experiment.py # 实验记录录入 CLI
├── tests/                  # pytest:domain 校验 / store 读写 / doe 生成
├── data/                   # SQLite 库文件与 CSV(gitignore)
└── docs/
    └── data_dictionary.md  # 数据字典:字段、单位、测量方法、溯源

7.1 依赖清单(按阶段引入)

表 4 · Python 依赖引入计划
阶段 依赖 用途
阶段一 pydantic pydantic-settings pyserial scipy pandas typer 数据模型 / 配置 / 串口 / LHS 采样 / 数据处理 / CLI
阶段二 scikit-learn xgboost tabpfn optuna ax-platform botorch mapie 四模型训练 / 调优 / 主动学习 / Conformal 区间
阶段三 fastapi uvicorn skl2onnx onnxruntime REST 服务 / 模型导出与推理
全程 pytest ruff 测试 / 代码质量

分阶段引入依赖可保持前期环境轻量(阶段一无需安装 PyTorch 系的 Ax/BoTorch),也避免了当前 Windows/Linux 混合环境下的编译问题。

8. 第一阶段实施路线(8 周)

对齐企划书「2026.05–12 完成数据采集与首批 300 组数据」的目标,从当前时点起按 8 周里程碑推进:

表 5 · 第一阶段 8 周里程碑
周次 交付物 验收标准
W1–W2工程骨架 + 领域模型 + SQLite 库表uv sync 可装、pytest 全绿、库表可建可写
W3DoE 生成器(LHS 初始采样)生成亚克力 40 组参数网格 CSV,范围符合设备量程
W4–W5实验记录工作流(CLI 录入 + 串口采集)单条实验记录全字段校验入库,重复/越界被拦截
W6首批数据:亚克力 + 椴木 ≥120 组,数据字典 v1完整率 100%,EDA 快照可复现
W7基线模型试跑(GPR / XGBoost)LOMO 交叉验证管线跑通(不考核精度)
W8主动学习接口预留 + 中期检查文档Ax 环境可运行 qNEI 批量推荐 demo

进度风险提示

串口自动采集依赖厂商提供 HZZ-M300U 的通信协议文档;若 W4 前未取得,立即切换为「CLI 手工录入」模式兜底,不影响 W6 数据目标。企划书中 2026.06 完成串口开发的计划以此风险开关为条件。

9. 风险登记表

表 6 · 技术风险与缓解措施
风险 等级 影响 缓解措施
GPR 的 ONNX 导出精度差异 线上推理结果偏离训练基线 导出后强制 float64 对比验证;备选 joblib + FastAPI 直载[11]
HZZ-M300U 串口协议未知 自动采集延期,拖累数据目标 W1 起向厂商索取协议;CLI 手工录入兜底
小样本 LOMO 精度不达标 新材料推荐误差超 8% 目标 特征工程优先;大类分层训练备选;主动学习提高单数据信息量
TabPFN 适用边界 第四候选失效 仅作对比不依赖;主线仍是 GPR / XGBoost
5 人团队协作冲突 代码互踩、数据覆盖 Git 分支规范 + ruff 统一格式 + SQLite 单写入口(store.py)