1实现原理 · 为什么它能做到
单目录重型 skill:交付物不是总结,而是一套能继续运转的本地内容工程;SKILL.md 要求自身自包含。
**你交付的不是一份总结,而是一套能继续运转的系统。**
目录自持全部资产:脚手架、模板、脚本、文档都留在 skill 目录内并随安装分发(10 个 Node 脚本 + 7 份模板 + 4 份根级 scaffold + 6 份规则 + 2 份文档)。
**本 skill 不是轻量 prompt,而是单目录重型 skill。`SKILL.md`、脚手架、模板、脚本、文档都固定留在 `skills/dbs-content-system/` 目录内部,不依赖共享目录。**
先审计再建工程:内容量与边界两道门槛,不达标只出审计结论并给降级路径。
### 原则 1:先审计,再建工程
原始素材只复制不改写:源目录原文件不碰,副本进 `01-原始素材区/完整副本/` 仅作回溯依据。
原目录里的原文件不碰。
处理对象是内容单元而非文件:首期固定 5 类(QST/CON/OPI/CAS/SOL),每个单元独立 Markdown 并带 YAML frontmatter。
首期只保留 5 类内容单元:
关系与去重先冻结口径:关系只允许 4 类(回应/解释/证明/冲突),去重只允许 4 类,且只有完全重复与同义重复默认合并。
第一期只允许 4 类关系:
四模式逐档升级(审计→样本→批量→全量),每档设硬闸门,少一条都不升档。
只有前一档闸门全部通过,才允许进入下一档。少一条都不升档。
交付工具层随 skill 自带:初始化脚本建目录骨架、复制模板与 scaffold,并把 9 个工具脚本复制进工程 `07-脚本与工具/`。
- `tools/init-content-system.js`:初始化工程骨架
首批样本抽取是「固定协议 + 脚本辅助」,不是黑箱全自动语义抽取。
这里说的「自动抽取」,不是写一个虚假的全自动语义脚本批量乱拆,而是让 skill 直接按固定协议,从用户指定的 `3` 到 `5` 篇样本文稿里产出第一批内容单元。
结构先于规模:先用样本验证字段/关系/去重口径稳定,再批量推进;批量转全量另有 7 条闸门(含抽查 30 个单元误判≤3)。
#### `批量模式 → 全量模式` 升档闸门
「能用」有可验收定义:骨架、规则、素材副本、首批单元、主题地图、装配稿、关系与去重索引、状态总览齐备即可交付,不承诺全量完成。
- `03-处理状态/处理状态总览.md` 已明确当前范围、未处理量与下一步入口
执行纪律要求真动手:不要停在建议层,素材不够就直接指出,边界混乱就先收缩边界;并明确与其它 skill 的转入口。
- 不要停留在建议层
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | node |
| cli | npx skills(skills.sh CLI,安装途径) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 抽取器对作者自有语料特化,换语料会静默降级 — extract-sample-units.js 内含硬编码上下文判定(如 /生产型兴趣/、/686种组合/、/赛道思维/ 等),对陌生题材会走通用兜底分支,产出质量下降且不报错;使用者应按 docs/acceptance.md 抽查单元质量。
- 脚本按 cwd/参数写盘,跑错目录会污染工作目录 — 多数脚本以 `path.resolve(process.cwd())` 为工程根,必须在目标工程内运行;只有 init 脚本接受目标目录参数。
- 会复制用户全部源素材到新工程 — 素材副本进 `01-原始素材区/完整副本/`,含敏感/未发布内容时形成第二份拷贝,使用者需自行决定纳入范围(审计门槛要求明确排除目录)。
- 清理是移动到 .trash 而非删除,磁盘占用持续增长 — 重复单元清理只做 rename;长期使用会在工程内留下 .trash 目录树,需人工清理。
- 「可重组」依赖启发式推荐,非语义保证 — assemble-topic-from-units.js 的 --auto 按标题与关键词推荐单元,docs/quickstart.md 也要求「自动推荐结果已经可以作为第一版装配稿,但正式对外输出前仍要人工复核」。
5第二遍独立确认
- [ok] 自包含声明与资产面一致 — SKILL.md 列出的 templates/(7)、scaffold/root/(4)、scaffold/rules/(6)、docs/(2)、tools/(10)与 find 清点结果逐项吻合,无缺失文件。
- [ok] 脚本仅本地读写、无网络无凭证 — 10 个脚本全部 `const fs = require("fs");` + `const path = require("path");`;grep https?://|fetch(|child_process|execSync|spawn|process.env|API_KEY 零命中。
- [ok] 写盘范围限定在目标工程 — init 脚本所有目标路径均由 skillRoot/targetRoot 派生;extract 脚本的清理用 `fs.renameSync(filePath, target)` 移入 `<root>/.trash/{日期}_{原因}/`(不删除)。
- [discrepancy] 抽取器非通用语义引擎(能力边界) — SKILL.md 声明「不是写一个虚假的全自动语义脚本批量乱拆」,但 extract-sample-units.js 内含大量作者语料特化正则(如 `if (/生产型兴趣/.test(context.conceptText) && /兴趣/.test(context.normalizedTitle) && /赚钱|变现/.test(context.normalizedTitle)) {`),换语料会退化到通用兜底分支;这不是「虚假」,但确属「对自有语料特化」,已在 risks 写明。
- [ok] 四档闸门与数量门槛 — 审计/样本/批量/全量四模式与各自闸门标题均在原文;50 文件/80000 字、≥15 单元、≥3 地图/≥2 装配稿、抽查 30 误判≤3 逐字命中。
- [ok] 源文件只读与副本制 — 「原目录里的原文件不碰。」+ 原则 3 标题「### 原则 3:原始素材不改写,只复制副本」逐字命中。
- [ok] description 与内容相符 — description(把本地文稿/推文/选题/案例/课程稿整理成可持续生长、可重组复用的内容工程)对应五类单元 + 主题地图 + 装配稿 + 四模式推进,无夸大;但「可重组复用」的可验证证据是 assemble-topic-from-units.js 的 --auto 跨主题推荐,属启发式实现。
- [ok] commit / license / 元数据 — HEAD = 8b8e33f1ecaed8cee606fe950c4426b525ead314;LICENSE = CC BY-NC 4.0(含 NonCommercial,非商业授权);stars 10121、pushed_at 2026-09-07T03:48:59Z。
6结论
b0d6fde8b85e94cf…8b8e33f1ec