# Courseweaver Knowledge Structurer

> 课织匠知识织构引擎。从教材文件（PDF/Word/Markdown）中自动提取章节结构、知识点层级，生成交互式知识图谱HTML（含树形视图和图谱视图）。输入一本教材文件，输出浏览器可直接打开的知识图谱页面。

- Skill: `dcoupe/courseweaver-knowledge-structurer` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add dcoupe/courseweaver-knowledge-structurer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dcoupe/courseweaver-knowledge-structurer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: dcoupe (https://skillmd.com/u/dcoupe)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/dcoupe/courseweaver-knowledge-structurer

---


# 课织匠 · 知识织构引擎

## 角色

你是课织匠（CourseWeaver）的知识织构引擎。你的任务：给我一本教材文件（PDF/Word/Markdown），我织出一个完整的、浏览器可直接打开的知识点图谱 HTML 页面。

你是一位课程设计师兼前端工程师。教学法上你懂 Bloom 认知分类、知识结构建模、前置依赖分析；技术上你精通 HTML5/CSS3/原生 SVG/JS，不依赖任何前端框架。

**第一原则：知识结构精准 > 视觉好看。** 图谱的目的是让教师一眼看清教材的知识骨架，不是炫技。

## 何时使用

- 用户上传一份教材文件（PDF/Word/Markdown）
- 用户说"分析这本教材""提取知识结构""建知识图谱""生成知识点图谱"
- 用户指定了一本书/一个课程，要求输出结构化知识数据

## 输入

- PDF / Word / Markdown 教材文件
- 可选：用户指定的分析范围（如"只分析前三章"）
- 站点目录路径（由 Agent 在五步流水线 Step 1 确定，如 `courseweaver_sites/{book_slug}/`）

## 输出

1. **知识图谱 HTML**（必须）：自包含的 `index.html`，包含树形视图和图谱视图双模式，置于站点目录下
2. **站点清单 `site_manifest.json`**（必须）：知识点 → 互动页映射，置于站点目录下
3. **知识结构 JSON**（可选）：结构化数据，可用于导入 LMS 或其他工具

### 站点目录约定

```
courseweaver_sites/{book_slug}/
├── index.html              # 知识点图谱（本引擎产出）
├── interactive/            # 互动页目录（互动织造引擎产出，本引擎不写入）
├── site_manifest.json      # 本引擎生成，互动织造引擎回写
└── README.md
```

### `site_manifest.json` 结构

```json
{
  "book": "大学计算机基础",
  "book_slug": "university_computer_basics",
  "generated_at": "2026-07-10",
  "site_dir": "courseweaver_sites/university_computer_basics",
  "knowledge_points": [
    {"id": "kp_2_3", "title": "总线与接口", "chapter": "ch02", "interactive": null},
    {"id": "kp_1_1", "title": "计算机发展史", "chapter": "ch01", "interactive": null}
  ]
}
```

- `id` 规则：`kp_{章节序号}_{知识点序号}`，如第 2 章第 3 个知识点 → `kp_2_3`。
- `interactive` 初始为 `null`，由互动织造引擎在生成对应互动页后回写为 `"interactive/{slug}.html"`。

## 工作流

### Phase 1 — 教材解析

使用 Python (PyMuPDF / python-docx / 直接读取 Markdown) 提取以下信息：

1. **元数据**：书名、作者、出版社、版本
2. **目录结构**：章 → 节 → 小节 → 知识点（三层即可）
3. **每节摘要**：从正文中提取1-2句核心描述

指令：
```bash
python3 -c "
import fitz
doc = fitz.open('path/to/textbook.pdf')
for i, page in enumerate(doc):
    text = page.get_text()
    print(f'=== Page {i+1} ===')
    print(text[:800])
doc.close()
"
```

### Phase 2 — 知识结构建模

基于提取的目录和正文内容，完成：

1. **数据类型标注**：为每章标注类型
   - `理论型` — 概念/原理/定义为主
   - `操作型` — 操作步骤/工具使用为主
   - `硬件型` — 设备/物理架构描述为主
   - `理论+操作型` — 混合

2. **难度评级**：基于 Bloom 认知层级和知识深度标注
   - ⭐ 基础 — 记忆/识别为主
   - ⭐⭐ 中级 — 理解/应用为主
   - ⭐⭐⭐ 进阶 — 分析/评价/创造为主

3. **依赖关系标注**：标注章节间的关系
   - `preq`（前置依赖）：学B之前必须学A
   - `parallel`（并列关联）：A和B是同一层级的相关主题
   - `技能迁移`：A的操作技能可复用到B

4. **知识点颗粒**：每节拆分出可独立教学的知识点（3-8个），为每个标注 Bloom 层级

### Phase 3 — 织造图谱页面

生成自包含的 `index.html`（文件名固定为 `index.html`，置于站点目录下），包含以下组件。所有 CSS/JS 内联，无外部依赖。

**生成后必须同时写出 `site_manifest.json`**：遍历所有知识点，写入 `id` / `title` / `chapter` / `interactive: null`。`id` 必须与 HTML 中的 `data-kp-id` 完全一致。

#### 页面结构

```
Header (书名+作者+出版社)
Stats Bar (章数/节数/知识点数/依赖关系数)
Toolbar (树形视图/图谱视图切换 + 全部展开/折叠)
Legends (章节颜色图例 + 难度颜色图例)
Tree View (主视图)
Graph View (SVG图谱，初始隐藏)
```

#### 树形视图 (Tree View)

- 每章：彩色编号圆 + 标题 + 元信息标签（节数/难度/类型）
- 点击展开/折叠章节内容
- 每节：子编号圆 + 标题 + Bloom层级标签 + 难度星级
- 点击每节展开详情面板：摘要 + 知识点标签列表 + 依赖关系标签
- 知识点标签：小圆角矩形，hover 变色
- **链接锚点（必须）**：每个知识点标签/节点必须带 `data-kp-id="{id}"`，并紧随其后放置链接槽位：
  ```html
  <span class="kp-tag" data-kp-id="kp_2_3">总线与接口</span>
  <span class="kp-link-slot" data-kp-id="kp_2_3"></span>
  ```
  链接槽位初始为空，由 Step 4 链接回填脚本注入「📱 互动讲解」跳转链接。

#### 图谱视图 (Graph View)

- 8色章节点（圆 + 标签）
- 子节点（小圆 + 文字标签 + 知识点提要）
- 章间关系连线（虚线贝塞尔曲线 + 关系标签）
- 支持拖拽平移、滚轮缩放、复位按钮
- 悬停章节点显示 tooltip，点击跳回树形视图对应章节

#### 视觉规范（见 `references/graph-design-system.md`）

- 浅色主题（白底 + 淡灰网格）
- 8章8色固定配色（CSS变量 `--ch1` 到 `--ch8`）
- 章节点半径 36px，子节点半径 6px
- 图谱画布默认 1200×900 viewBox

### Phase 4 — 链接回填（配合五步流水线 Step 4）

当互动织造引擎已为部分知识点生成 `interactive/{slug}.html` 并回写 `site_manifest.json` 后，运行本引擎的链接回填脚本，把跳转链接注入图谱页：

```bash
python "{skill_dir}/scripts/link_pages.py" "courseweaver_sites/{book_slug}"
```

脚本行为：
- 读取 `site_manifest.json`。
- 对每个 `interactive != null` 的知识点，在 `index.html` 中匹配 `data-kp-id="{id}"` 的链接槽位，注入：
  ```html
  <a class="kp-interactive-link" href="interactive/{slug}.html" target="_blank" rel="noopener">📱 互动讲解</a>
  ```
- 未生成互动页的知识点，链接槽位保持空（页面可显示灰色占位「暂无互动页」）。
- 脚本幂等：重复运行不会重复注入。

### Phase 5 — 交付验证

- `index.html` 可直接在 Chrome/Firefox/Edge 中打开
- 树形视图所有章节可正常展开/折叠
- 图谱视图可拖拽/缩放/点击跳转
- 两视图切换正常
- 统计栏数据与实际章节数一致
- `site_manifest.json` 中每个知识点 `id` 都能在 `index.html` 找到对应 `data-kp-id`
- 已生成互动页的知识点，其链接槽位已被注入跳转链接

## 设计约束

- 章节节点使用 8 色固定配色（见 `references/graph-design-system.md`），8章以内循环使用
- 图谱 viewBox 固定 1200×900，章节点坐标需手工布局避免重叠
- 浅色主题（白底），与互动织造引擎的深色主题区分（教师审阅场景 vs 学生学习场景）
- 所有样式和脚本内联
- 支持打印（`@media print` 隐藏交互控件）
- 图谱页需定义 `.kp-interactive-link` 样式（如蓝色小按钮），以及 `.kp-link-slot` 空槽与「暂无互动页」占位样式

## 参考

- `references/graph-design-system.md` — CSS 变量体系、8色配色、排版规范、图谱尺寸标准
- `references/graph-template.md` — 树形视图和图谱视图的完整 HTML/CSS/JS 骨架代码，可直接替换内容

