# Problem Doc Model Selector

> 解析赛题PDF/Word，抽取任务与数据条件并给出模型选型与验证路线。Invoke when用户提供赛题文档或题目文本，需要确定采用何模型/方法。

- Skill: `yushui2022/problem-doc-model-selector-3` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add yushui2022/problem-doc-model-selector-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yushui2022/problem-doc-model-selector-3/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: yushui2022 (https://skillmd.com/u/yushui2022)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yushui2022/problem-doc-model-selector-3

---


# 赛题文档自动解析与模型选型

## 全局流程协作约束（长对话防漂移）

- 本 skill 不得作为孤立入口。用户要求完整论文、生成 Word、继续流程或不确定阶段时，先回到 `paper-workflow-orchestrator` 判断当前 S0-S8 阶段。
- 启动或继续本 skill 的正式任务前，必须运行：
  ```bash
  python .claude/skills/paper-workflow-orchestrator/scripts/workflow_guard.py --skill problem-doc-model-selector
  ```
- 如果输出 `[WORKFLOW FAIL]` 或报告 `status != "PASS"`，停止本 skill，按 `paper_output/qa/workflow_guard_report.json` 的失败项回补前置阶段，不得凭记忆继续。
- 本 skill 只写入自己契约范围内的 `paper_output/` 产物；完成后必须回到 `paper-workflow-orchestrator` 判断下一步，并用 `context-memory-keeper` 记录已完成产物、阻塞项和下一步。
- 长对话中如果上下文变长、阶段不确定或用户分开调用 skill，先运行：
  ```bash
  python .claude/skills/paper-workflow-orchestrator/scripts/workflow_guard.py --status
  ```
  再读取 `paper_output/qa/workflow_guard_report.json`、`paper_output/preflight_report.json`、`paper_output/input_manifest.json`、`paper_output/results/run_manifest.json` 和本 skill 的上游 JSON 契约，按报告里的 `recommended_skill` 与 `next_action` 继续。
- 继续流程前，必须把 `paper_output/context/workflow_memory.json` 视为长期断点记录；若其中的 `current_step`、`next_step`、`recommended_skill` 与 `workflow_guard.py --status` 不一致，以 guard 报告为准。
- 每次完成本 skill 的产物后，先回到 `paper-workflow-orchestrator` 或运行 `workflow_guard.py --status`，再更新 workflow memory：
  ```bash
  python .claude/skills/context-memory-keeper/scripts/update_workflow_memory.py
  ```
  更新后读取 `paper_output/context/workflow_memory.json` / `.md`，确认下一步和推荐 skill 已记录。

## 执行契约
- 上游输入：`problem_files/` 中的赛题 PDF/Word/TXT 和附件数据。
- 必须输出：`paper_output/step1/problem_analysis.json`，以及 `A_题意对齐.md`、`B_论文大纲.md`、`C_评分点对齐表.md`、`D_模型路线.json`。
- 下游交接：`modeling-paper-rubric-and-model-selector` 读取 `problem_analysis.json` 生成模型路线；完整 workflow 由 `paper-workflow-orchestrator` 串联。
- 推荐下一步：完成题意分析后进入 `modeling-paper-rubric-and-model-selector`；如果用户目标是完整论文，回到 `paper-workflow-orchestrator` 判断后续阶段。
- 失败回退：若 `problem_files/` 为空，应停止并提示补齐赛题；若部分文档无法解析，保留可解析内容并在输出中记录字段画像缺失。

## 目标
- 输入赛题 PDF/Word 文档或题面文本，自动抽取“每一问”的任务类型、数据条件与约束，并输出贴题的模型选型与验证路线。
- 生成评分友好型交付：一页纸题意对齐、论文大纲、评分点对齐表、模型路线（基线/改进/验证/风险）。


## 阶段流转
- 解析完成后，不要停留在“是否满意”的泛泛询问；应说明已生成的题意契约，并给出下一推荐阶段。
- 若用户意图是完整论文，在输出 A/B/C/D 后回到 `paper-workflow-orchestrator`，由总入口决定继续生成模型路线、数据计划、QA 和正文。
- **拒绝偷懒**: 必须输出完整的 A/B/C/D 四部分，不得省略。

## 适用时机
- 用户提供赛题 PDF/Word 或题面文本，需要快速判断各问应采用的模型/方法并制定实验验证计划时。
- 对题意理解不确定、模型路线拿不准或需要论文结构与评分点对齐建议时。

## 输入
- 赛题文档路径或题面全文（支持 PDF、DOCX、TXT）。
- 可选：附件数据文件路径、你希望强调的亮点或限制。

## 输出
- A 一页纸题意对齐：逐问给出输入/输出、评价指标、关键约束、可验证方式。
- B 论文大纲：摘要、问题重述、假设、符号、数据说明、模型、求解、结果、检验、结论、不足、参考。
- C 评分点对齐表：评分点 → 证据形式（图表/实验/检验）→ 论文位置。
- D 模型选型与路线：每问的任务类型、最小可用基线、改进路线、验证计划、风险与备选。
- E 数据需求配置 (可选)：若发现题目需要外部数据（如人口、气象、经济数据），自动生成或更新根目录下的 `data_requirements.json`，以便 `authoritative-data-harvester` 自动获取。
- 机器可读契约：`paper_output/step1/problem_analysis.json`，包含 `documents`、`data_files`、`questions`、`recommended_models`、`validation_plan`、`figure_suggestions` 等字段，供模型路线、证据审计、正式写作和总编排器继续读取。

## 目录约定（与项目全局对齐）
- 赛题与附件统一放在 `problem_files/`。
- 建议把本技能的四类输出归档到 `paper_output/step1/`（例如 `paper_output/step1/A_题意对齐.md` 等），便于后续技能引用。
- 同步生成 `paper_output/step1/D_模型路线.json`，用于保留每一问的模型路线、验证方式和建议图表。

## 脚本入口（推荐）
本 skill 已内置结构化分析脚本：

```bash
python .claude/skills/problem-doc-model-selector/scripts/analyze_problem.py
```

该脚本会扫描 `problem_files/`，读取 TXT/Markdown/DOCX/PDF 赛题文本，并对 CSV/XLSX/XLS 附件做轻量字段画像。成功后会写入 `paper_output/step1/problem_analysis.json`，后续模型路线、证据门禁和正式 outline 均以它为上游契约。

## 前后衔接
- 后续通常先做：`data-cleaning-and-visualization`（数据清洗与可视化）。
- 若要继续到论文草稿：回到 `paper-workflow-orchestrator`。

## 约束（必须遵守）

- **Memory Interaction (必做)**: 
  - **开始前**，检查 `memoryskill.md` 中是否有外部文献/数据索引（如 g-sci 提供的参考文献），将其纳入模型选型依据。
  - **完成解析后**，必须调用 `context-memory-keeper`，将“核心任务类型”、“数据条件”与“模型选型结论”更新到 `memoryskill.md` 的 `Short-term Workbench` 中。这是后续产文技能获取上下文的关键。
- **外部数据检查 (必做)**:
  - 若解析发现题目依赖外部公开数据（如“搜集相关数据”、“附件数据不足”），必须生成 `data_requirements.json` 并写入根目录。
  - 配置内容应包含明确的 `url`（若已知）或 `manual_search` 提示，并将 `active` 设为 `true`。
- 本技能输出的题意对齐与模型路线，必须能被后续写作定位引用；建议固定归档到 `paper_output/step1/`。
- 若用户目标是“最终论文可提交”，本技能完成后不得直接进入产文阶段，必须先保证数据口径可用：进入 `data-cleaning-and-visualization` 或补充 `authoritative-data-harvester`。
- 若用户不想分步推进，必须回到 `paper-workflow-orchestrator` 执行完整 workflow，避免“解析完成但未生成正文”的断档。

## 工作流程
1. 文档读取
   - PDF：优先 PyMuPDF，否则 pdfplumber；保留图表标题与小节编号。
   - Word：python-docx；保留段落与表格结构。
   - 清理：去页眉页脚、合并断行、标准化单位（cm⁻¹、% 等）。
2. 题意解析
   - 规则抽取“问题1/问题2/问题3…”与“附件说明/单位/关键参数”。
   - 识别任务类型：预测/分类/评价/优化/聚类/仿真/机理建模。
   - 提取约束与边界：入射角、层次关系、单位口径、可行域。
3. 数据条件解析
   - 附件文件名与字段：列名、单位、样本量、范围、缺失值比例。
   - 结果口径：需要反射率、厚度、误差、排名或资源分配等。
4. 模型选型引擎（规则优先，结合提示式决策）
   - 预测类：移动平均/指数平滑/回归/ARIMA → 树模型/LSTM。
   - 分类类：逻辑回归/朴素贝叶斯 → 随机森林/梯度提升，不平衡用代价敏感。
   - 评价与排序：规范化+加权和 → 熵权/CRITIC/AHP/TOPSIS/VIKOR。
   - 优化与调度：线性/整数规划 → 多目标与启发式（遗传/退火）。
   - 聚类：K-means/层次 → GMM/DBSCAN（噪声与非凸形状）。
   - 机理/仿真：微分/差分/系统动力学；与数据驱动对照。
   - 物理/工程建模：根据领域知识建立方程（如热传导、流体力学、电路分析、光学传播），利用最小二乘或优化算法进行参数反演与模型修正。
5. 验证与鲁棒性
   - 指标：RMSE/MAE/AUC/F1/MAPE/轮廓系数/约束满足率。
   - 交叉验证/滚动回测/留出法；消融实验与敏感性分析。
   - 极端/边界情景与单位口径一致性检查。

## 判别逻辑速查
- 出现“预测/估计未来/趋势/参数估计”→ 预测类。
- 出现“分类/是否/风险等级/识别”→ 分类类。
- 出现“综合评价/排序/权重/打分”→ 评价与排序。
- 出现“资源分配/路径/选址/成本最小/收益最大”→ 优化与调度。
- 出现“分群/画像/相似性/模式发现”→ 聚类。
- 出现“机理/仿真/动力学/微分方程”→ 机理/仿真。
- 出现“物理过程/化学反应/信号传输/力学结构”→ 物理/工程建模。

## 输出模板
- A 题意对齐：逐问输入、输出、指标、约束、验证。
- B 大纲：按评分友好顺序列出章节与小节。
- C 评分对齐：评分点与证据映射表。
- D 模型路线：任务类型/基线/改进/验证/风险与备选。

## 使用示例
- 输入：赛题文件路径 `c:\path\to\赛题.pdf` 或题面文本全文。
- 行为：读取文档→抽取每问→识别任务类型与数据条件→输出 A/B/C/D 四类结果与建议模型。
- 自动建议：
  - 基线：选择最简单的经典模型（如线性回归、K-means、最短路算法）。
  - 改进：针对基线不足（如非线性、噪声、多目标）引入的高阶模型（如XGBoost、改进遗传算法、混合模型）。
  - 验证：指标计算、残差分析、交叉验证、灵敏度分析。

## 防跑偏检查
- 每问必须给出可量化输出与可验证指标。
- 符号与单位统一，指标口径一致。
- 至少一个基线对照与改进证据（提升或更合理）。
- 结论与图表逐问对应，不“做很多但没回答问题”。

## 何时不要用本技能
- 已经明确只需实现某个具体算法或改动单一代码片段时（直接实现更快）。

