<!-- title: 后勤四件：算账印纸查证编课 -->

# 后勤四件：算账、印纸、查证、编课——内容产线的后排拆解

## 概述

本期是 Skills 生态拆解第 4 轮，方向内容创作与办公。镜头从造型间挪到后勤科：一篇内容从开工到出厂，聚光灯都打在出海报、造信息图、写口播稿的前排件上，但真正决定产线能不能转的，是后排四个不起眼的工位——**jupyter-notebook**（数据算账）、**md2pdf**（印纸出厂）、**wikipedia-research**（进料查证）、**tutorial-engineer**（内容编课）。四件全部来自装机盘，SKILL.md 逐行一手读完。核心发现有三条：其一，后排件集体不设确认闸，把「少问多干」推到极致，和前排造型件的「两道闸」正好构成光谱两端；其二，md2pdf 的说明文档本身就是一张实战伤单，连 Mermaid 避坑例句都带着 5G 核心网的行业味；其三，wikipedia-research 把军事情报学的来源评级体系搬进了引用核查，而且是四件里唯一白纸黑字写下「我不能干什么」的。

## 一、评测对比表

评分沿用本栏固定权重：功能完整度 25%、设计质量 25%、实战效果 20%、上手难度 15%、社区活跃度 15%。上手难度一栏星越多越容易；社区活跃度按文件内可见的维护痕迹计（版本号、参考文档、脚本完备度、测试报告）。

| Skill | 功能完整度 | 设计质量 | 实战效果 | 上手难度 | 维护活跃 | 加权总分 |
|-------|-----------|---------|---------|---------|---------|---------|
| wikipedia-research | ★★★★★ | ★★★★★ | ★★★★ | ★★★ | ★★★★ | **4.4** |
| jupyter-notebook | ★★★★ | ★★★★ | ★★★★ | ★★★★ | ★★★ | **3.9** |
| md2pdf | ★★★★ | ★★★ | ★★★★ | ★★★ | ★★ | **3.3** |
| tutorial-engineer | ★★★ | ★★★ | ★★★ | ★★★★★ | ★★ | **3.2** |

四件在产线上各占一个工位，先看整体位置：

```mermaid
flowchart TD
    A["一篇内容开工"] --> B["wikipedia-research<br>进料查证"]
    B --> C["jupyter-notebook<br>数据算账"]
    C --> D["tutorial-engineer<br>转成课程"]
    D --> E["md2pdf<br>印纸出厂"]
    B --> F["结构化引用<br>JSON"]
    C --> G["可复跑实验<br>ipynb"]
    D --> H["分步教程<br>Markdown"]
    E --> I["A4成品<br>PDF"]
```

## 二、算账的：jupyter-notebook

**定位**：把「造一个 Jupyter 笔记本」这件最容易翻车的事，收缩成两条模板加一个脚手架脚本。只认两种货——`experiment`（探索实验）和 `tutorial`（教学 walkthrough），开工第一步不是写代码，是「Lock the intent」：锁定意图、读者和「做完长什么样」。

**拆解**：这件最值钱的设计是防呆。Jupyter 笔记本的原始格式是嵌套 JSON，让模型徒手写 `.ipynb` 是社区公认的事故高发区——括号错一位整本报废。它的对策写得很直白：「Prefer the bundled templates and the helper script for consistent structure and fewer JSON mistakes」，模板放在 `assets/`，脚手架脚本只依赖 Python 标准库，零额外安装，一条命令出骨架：

```bash
uv run --python 3.12 python "$JUPYTER_NOTEBOOK_CLI" \
  --kind experiment \
  --title "Compare prompt variants" \
  --out output/jupyter-notebook/compare-prompt-variants.ipynb
```

编辑已有笔记本时它还立了规矩：保结构、别乱动单元格顺序、能小改不重写，真要动原始 JSON 先读 `references/notebook-structure.md`。最难得的是失败路径写进了正文——「If execution is not possible, say so explicitly」，跑不了就明说，别装跑过。

**短板**：它的路径设定暴露了户口——环境变量写的是 `CODEX_HOME`，默认安装位是 `~/.codex/skills`，依赖管理指定 `uv`。这是一件带着 Codex 生态门牌的技能，原样住进了 Claude 的技能目录。跨 Agent 的技能可移植性在这台机器上又多了一件实物证据：SKILL.md 里没有一个字绑定某个模型或某个 CLI，谁家 Agent 读它都能照跑。维护痕迹中等：四份参考文档齐全，但没有版本号和更新日志。

## 三、印纸的：md2pdf

**定位**：四件里业务面最窄的一件——只干「Markdown 转 A4 PDF」一件事，但窄得有理有据。它的开头不是功能列表，是一张事故清单：导出 PDF 时，Mermaid 图（尤其是参与者多的时序图）和长代码块（JSON、信令流程）必然超宽被截断。「This skill solves both problems」——两个坑，各给一个解。

**拆解**：解法是两步流水线：先用自带脚本把 Markdown 转成带打印级 CSS 的 HTML，再用 Playwright 驱动 Chromium 出 PDF。两处关键 CSS 值得抄走：代码块 `white-space: pre-wrap` 加 `word-break: break-all`，保证长行换行而不是被切；Mermaid 初始化时 `useMaxWidth: true` 加 `wrap: true`，让图自动缩放进页宽。中文字体（微软雅黑、苹方）和 A4 页边距都预设好了。

最有趣的是它附带的 Mermaid 避坑清单，全部带真实战例：菱形节点里不许塞复杂文本、节点文字里禁用问号感叹号、`<br/>` 别滥用。而它的错误示例是「验证签约数据：用户是否授权该DNN和S-NSSAI」——DNN、S-NSSAI 都是 5G 核心网术语。这件显然是从通信行业的内容产线里长出来的工具，伤单上的每一道疤都对应一次真实的排版事故。

**短板**：版式写死 A4 一种，页边距、字体不可配置；两步操作靠手工衔接，中间没有校验；无版本号无更新日志，一次性工具的气质。依赖 mermaid.js CDN，断网环境需要自己换本地文件——文档倒是把这条例也写了。

## 四、查证的：wikipedia-research

**定位**：四件里最重的一件，v2.0，五个自带脚本，管的是内容产线最要命的一段——进料查证。它把「读维基百科做研究」从抄散文升级成一条结构化流水线：抽取、验证、富化、落盘四个阶段，产出带完整引用溯源的 JSON。

**拆解**：三个设计值得单独说。第一，**评级体系**：它直接搬用了军事情报学的 Admiralty Code（海军部代码），把来源可靠性分 A 到 E 五档，A 档要求 80% 以上引用核验通过——情报界用了几十年的「信源可信度」语言，第一次被一件中文圈的技能件写进 SKILL.md。第二，**置信度明码标价**：每条论断的置信度是加法公式——底分 0.50，有 DOI 加 0.20，有 PMID 加 0.15，有 ISBN 加 0.10，作者信息加 0.10——公式全在文档里，不玩黑箱。第三，**诚实声明**：它明确列出公式做不到什么——「Does NOT verify that the source actually supports the claim」，不验证来源是否真支持论断，不假设 DOI 等于同行评审。一份技能文档敢把自己的边界写成小节，这在四件里是独一份。

```mermaid
flowchart TD
    P1["Phase 1 抽取"] --> P2["Phase 2 验证"]
    P2 --> P3["Phase 3 富化"]
    P3 --> P4["Phase 4 落盘"]
    P1 --> Q1["引用转 CSL-JSON"]
    P2 --> Q2["DOI与PMID核验"]
    P2 --> Q3["死链Wayback兜底"]
    P3 --> Q4["实体关系时间线"]
    P4 --> Q5["知识图谱JSON"]
```

验证环节还有两个细活：自动识别维基百科的不确定模板——`{{citation needed}}`、`{{disputed}}`、`{{outdated}}` 全都打旗标；死链不判死刑，先去 Wayback Machine 找存档兜底。每次抽取都保存 `revision_id`，保证研究可复现。

**短板**：链路重，上手要读得懂 JSON schema 和 Python 调用；整条流水线依赖维基 API 和 doi.org 的连通性；置信度终归是元数据启发式，文档自己承认替代不了人工核对关键事实。

## 五、编课的：tutorial-engineer

**定位**：四件里的对照组。它的头两节是万能模板——「Use this skill when：Working on tutorial engineer tasks or workflows」，这种句式一看就是脚手架批量生成的壳。但壳里的内核是一份像样的技术写作教学法：概念分解、渐进披露、动手练习、错误预判五项专长，加上「What You'll Learn → 最小示例 → 引导练习 → 变体 → 挑战 → 排错」的标准教程骨架。

**拆解**：内核里两条原则有真功夫。一是「Fail Forward」——教程里故意埋错误，让读者在修 bug 中学会调试，这是高级教程和流水账的分水岭；二是练习五型谱系（填空、除虫、扩展、从零造、重构），把「动手」拆成了可轮换的题型而不是一句空话。结尾的质量自检清单也实用：「新手能不能不卡壳地跟完」「概念是否先于使用出现」「每个示例是否完整可跑」。

**短板**：全件零脚本、零模板文件、零输出校验，全靠提示词驱动；模板壳的存在说明作者没做收尾的定制——头是批发的，身是手艺的。它更像一份「够用的教学提示词」，和 wikipedia-research 那种带脚本的工程件不在一个重量级。

## 六、后排件的三条共性

**其一，确认闸归零。** 前排造型件流行两道闸：先确认理解，再确认方案，宁可多问一轮。后排四件全部零确认——jupyter 用「锁意图」代替提问，md2pdf 和 wikipedia-research 参数即指令，tutorial-engineer 连参数都没有。这不是偷懒，是分工：造型件的产出主观性强，问清楚再干；后勤件的产出有客观对错，问不如干，错了重跑就是。

**其二，伤单即文档。** md2pdf 通篇是「踩过的坑」的形状：超宽、截断、CDN 断网、Mermaid 语法雷区，每个坑带解法带反例。jupyter-notebook 的防 JSON 手写、wikipedia-research 的死链兜底，本质也是把事故史写成流程。好技能和差技能的分界线，往往不在提示词多漂亮，而在有没有把翻过的车写成护栏。

**其三，户口与门牌分离。** jupyter-notebook 写明要装进 `~/.codex/skills`，却实实在在接受 Claude 的调度；tutorial-engineer 的模板壳是某家技能生成器的批货，内核却谁都能用。后排件普遍不关心自己在谁家门口——它们的 SKILL.md 里几乎不出现特定产品名，只出现路径、参数和清单。可移植性不是喊出来的，是写文件时就不依赖门牌。

## 七、安装与使用

四件都是目录即安装：把技能目录放进 `~/.claude/skills/` 即被识别。上手命令如下。

**jupyter-notebook**（先设路径，再一条命令出骨架）：

```bash
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
export JUPYTER_NOTEBOOK_CLI="$CODEX_HOME/skills/jupyter-notebook/scripts/new_notebook.py"

uv run --python 3.12 python "$JUPYTER_NOTEBOOK_CLI" \
  --kind tutorial --title "Intro to embeddings" \
  --out output/jupyter-notebook/intro-to-embeddings.ipynb
```

**md2pdf**（两步走）：

```bash
python <skill-path>/scripts/md2pdf.py "input.md"
# 生成 input.html 后，用 Playwright 出 PDF：
# page.pdf(path="output.pdf", format="A4", print_background=True)
```

**wikipedia-research**（四阶段对应四个脚本入口）：

```python
from scripts.citation_extractor import CitationExtractor
from scripts.source_verifier import SourceVerifier
from scripts.entity_extractor import EntityExtractor

research = CitationExtractor().extract_article("Subject_Name")
results  = SourceVerifier().verify_citations(research["citations"])
```

**tutorial-engineer**（无命令，直接下达写作任务即可，进阶细节在 `resources/implementation-playbook.md`）。

## 八、分场景排行榜

- **查证硬需求（引用要能点开）**：wikipedia-research，无对手，A 到 E 评级加 DOI 核验直接给结论
- **数据要复跑**：jupyter-notebook，脚手架防 JSON 事故，实验与教学双模板
- **交付要打印级 PDF**：md2pdf，这个工位它是独苗，Mermaid 超宽的旧账一笔勾销
- **零基础先练手**：tutorial-engineer，零依赖零配置，开口就能用
- **想学写技能件的**：抄 md2pdf 的伤单写法，学 wikipedia-research 的边界自白

## 结语

后排件没有 Star 传奇，也没有出圈作品，但一台机器的内容产能，恰恰由这些工位的深度决定：查证件决定进料质量，算账件决定数据可信，编课件决定知识能否二次分发，印纸件决定交付的最后一厘米。这一轮横评里最值得带走的不是某一件，而是一条写件标准——**把翻过的车写成护栏，把自己的边界写成条文**。做到了这两条的，哪怕只有一页纸，也是好件。

## 参考来源

1. `~/.claude/skills/jupyter-notebook/SKILL.md` — 本地装机文件，本文一手分析对象（CODEX_HOME 路径设定、双模板、脚手架脚本均出自该文件）
2. `~/.claude/skills/md2pdf/SKILL.md` — 本地装机文件，超宽截断问题清单、两步流水线、Mermaid 避坑例句均出自该文件
3. `~/.claude/skills/wikipedia-research/SKILL.md` — 本地装机文件，Admiralty Code 评级、置信度加法公式、局限声明均出自该文件
4. `~/.claude/skills/tutorial-engineer/SKILL.md` — 本地装机文件，模板壳结构与教学原则清单均出自该文件
5. [anthropics/skills](https://github.com/anthropics/skills) — Anthropic 官方技能仓库，本栏观察技能设计惯例的常设参照

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
