# 科研流程图与架构图(CS3319 推荐系统) 本目录存放本项目「方法 / 架构 / 依赖」的**可维护矢量图**。所有图都以源文件形式保存在 `src/`,由 `scripts/render_diagrams.sh` 一键渲染为 SVG / PDF 到 `svg/`、`pdf/`。 图只表达**关键模块**(不堆砌全部代码文件),可直接放入论文或课程报告。 > 设计原则:源文件即真相,SVG/PDF 是构建产物。改图就改 `src/` 里的源文件,再重渲染。 > 切勿手工编辑 `svg/`、`pdf/` 里的产物——下次渲染会被覆盖。 --- ## 目录结构 ``` docs/diagrams/ ├── src/ # 图的源文件(编辑这些) │ ├── pipeline.mmd # Mermaid:整体实验流程 │ ├── architecture.d2 # D2:系统分层架构 │ ├── dependencies.dot # Graphviz:关键模块运行时依赖 │ ├── architecture_c4.puml # C4-PlantUML:系统主架构图(论文主图) │ └── architecture_c4_features.puml # C4-PlantUML:259 维特征构成 ├── svg/ # 渲染产物(自动生成,勿手改) ├── pdf/ # 渲染产物(自动生成,勿手改) └── README.md # 本文件 scripts/render_diagrams.sh # 一键渲染脚本 ``` --- ## 五张图分别表达什么 | 文件 | 工具 | 表达内容 | 论文用途 | |---|---|---|---| | `pipeline.mmd` | Mermaid | **端到端实验流程**:数据 → 确定性划分(seed=202) → 6 个 Stage-1 分数源 → 259 维特征 → LightGBM 二级堆叠 → rank-cutoff 决策 → 提交。用 `contrib` 类高亮高阶传播这一核心贡献。 | 方法流程图(Flow) | | `architecture.d2` | D2 | **分层系统架构**:Data Layer / Deterministic Split / Stage-1 Suite / Stage-2 Meta-learner / Decision / Output 七层 + Shared Infrastructure(两个 `load_module` 共享库、特征缓存、无 utils 的代码复用约定)。 | 系统架构图 | | `dependencies.dot` | Graphviz | **关键模块运行时依赖**:用 `importlib load_module()` 互相加载的真实关系。粗深色边 = 最终堆叠器加载各生产者;实线绿边 = 生产者间复用;点线灰边 = 扇入共享库。带图例。 | 工程/可复现性说明 | | `architecture_c4.puml` | C4 Container | **系统主架构图(论文主图)**:外部(异构图 + 榜单)↔ 系统边界(Two-Stage Stacking Recommender)。Stage-1 用 Container_Boundary 收纳 6 个 Component(LightGCN / BPR-MF / Random Walk / Content / Explicit / **High-order(核心贡献)**),经 Feature Cache → Meta-Learner → Decision → 输出。标注公开 F1 = 0.96626、验证 F1 = 0.966874。 | 论文主图(Main Figure) | | `architecture_c4_features.puml` | C4 Component | **259 维特征构成**:把主图里的「特征向量」放大,标注每组特征的维度(X_base 84-d = 4+18+8+3+43+4+4,再 +rich 18 +RW 77 +agg 11 +undir 24 +dir 45 = 259),汇入 LightGBM。 | 方法细节图 | > **为什么用三种工具**:Mermaid 适合「方法流程」(GitHub/Typora 直接预览);D2 适合「分层架构」;Graphviz 适合「依赖网络」;C4-PlantUML 适合「面向论文的专业架构主图」(有外系统边界、图例、规范的容器/组件抽象)。 --- ## 如何重新渲染(一键) ```bash # 渲染全部源文件 → SVG + PDF bash scripts/render_diagrams.sh # 只渲染 SVG(跳过 PDF,更快) bash scripts/render_diagrams.sh --svg ``` 脚本特性: - **优雅降级**:某个工具没装,会被跳过并提示,不会中断整体运行;装好后重跑即可补齐。 - **自动取工具**: - `plantuml.jar` 缺失时自动从 GitHub 下载到 `scripts/.cache/plantuml.jar`。 - `d2` 缺失时(Windows)尝试 `scoop install d2`。 - `mmdc` 缺失时回退到 `npx --yes @mermaid-js/mermaid-cli`。 - **逐图打勾/叉**:末尾打印 `SVG: N PDF: M failed: K` 汇总。 渲染产物:`docs/diagrams/svg/*.svg` 与 `docs/diagrams/pdf/*.pdf`。 ### 单独渲染某一类(手工命令) ```bash # Mermaid mmdc -i docs/diagrams/src/pipeline.mmd -o docs/diagrams/svg/pipeline.svg # D2 d2 docs/diagrams/src/architecture.d2 docs/diagrams/svg/architecture.svg # Graphviz dot -Tsvg docs/diagrams/src/dependencies.dot -o docs/diagrams/svg/dependencies.svg # PlantUML / C4(注意:它在源文件旁输出,需手动移动) cd docs/diagrams/src && \ java -jar ../../scripts/.cache/plantuml.jar -tsvg architecture_c4.puml && \ mv architecture_c4.svg ../svg/ ``` --- ## 如何更新一张图 1. 编辑 `docs/diagrams/src/` 下对应的源文件。 2. **核对事实**:图里的数字(如 259 维构成、136,484 验证对、F1)必须与代码 / 报告一致。 - 259 维构成见 `reports/final_report.md` 与 `code/high_order_graph_stack.py`。 - 依赖关系改了,先在 `code/` 里 `grep -n "load_module"` 确认,再改 `dependencies.dot`。 3. `bash scripts/render_diagrams.sh` 重渲染。 4. 打开 `svg/*.svg` 目视检查布局/文字是否溢出;必要时调源文件里的 `skinparam`/`classes`/`rankdir`。 ### 改图时的常见注意点(踩过的坑) - **C4-PlantUML 的 include**:`!include ` **不**定义 `Component` 宏;要用 `Component(...)` 必须用 `!include `(它向下包含 Container→Context,定义全部宏)。`System_Boundary` 是带下划线的(不是 `SystemBoundary`)。 - **D2**:`stroke-dash` 只接受单个 0–10 的数字(不是 CSS 的 `4 3`);没有 `note` shape,注释用 `shape: text`。 - **Graphviz**:依赖图刻意用三种边样式 + `constraint=false` 控制层级,避免「毛线球」;加边前想清楚属于哪一类。 --- ## 工具安装(一次性) | 工具 | 安装 | 用途 | |---|---|---| | Mermaid CLI | `npm i -g @mermaid-js/mermaid-cli` | `.mmd` → SVG(首次会拉 puppeteer chromium) | | D2 | Windows: `scoop install d2` · macOS: `brew install d2` | `.d2` → SVG | | Graphviz | Windows: `scoop install graphviz` · macOS: `brew install graphviz` | `.dot` → SVG | | PlantUML | `scoop install temurin21-jdk`(或任意 JDK);jar 由脚本自动下载 | `.puml` → SVG(C4 stdlib 已内置于 jar) | > 本目录的图已在 Windows + bash 环境下验证全部可渲染(Graphviz 14.1.1、mmdc 11.15.0、d2 0.7.1、PlantUML 1.2026.6)。 --- ## 与其它文档的关系 - 图里的方法叙事与 `reports/final_report.md`、`docs_first_principles/` 一致。 - 259 维特征构成与 `docs_first_principles/_fact_sheet.md`(数值唯一真相源)对齐。 - 若数值有出入,以 `_fact_sheet.md` 和代码为准,并回头修正这里的图。