dbskill 问题单元模板深度解析:从 YAML frontmatter 到 QST 内容单元的实战指南
【免费下载链接】dbskilldontbesilent 的商业诊断 Skills项目地址: https://gitcode.com/gh_mirrors/db/dbskill
导读
dbs-content-system 是 dontbesilent 内容结构化系统的核心 skill,它把本地大量文稿、推文、选题、案例和课程稿搭成一个可持续生长的内容工程,而**问题单元(QST)**是其中定义「内容要回答什么问题」的骨架单元。本篇以仓库中的 问题单元模板 为蓝本,结合同目录下的概念、观点、案例、方案四份模板、内容单元字段规范 与 generate-unit-draft.js 等源码,完整讲解 QST 单元的字段语义、手写/脚本生成两种落盘方式、与其他单元的关系建立,以及它在「审计 → 样本 → 批量 → 全量」四档工作流中的实际用途。读完你将能够独立创建一份合格的问题单元,并理解它如何支撑主题地图与选题装配。
一、问题单元在内容结构化系统中的定位
1.1 五类内容单元的最小语义对象
dbs-content-system的第四原则是「对象不是文件,而是内容单元」:内容不被当作文件夹来整理,而是被拆成可复用的最小语义对象。首期只保留 5 类:
| 前缀 | 类型 | 职责 |
|---|---|---|
QST | 问题单元 | 记录一个值得回答的问题原句、问题类型与适用人群 |
CON | 概念单元 | 固定一个概念的稳定定义与其功能 |
OPI | 观点单元 | 固定核心判断、适用范围与重要性 |
CAS | 案例单元 | 记录案例主体、摘要、过程与结果 |
SOL | 方案单元 | 记录目标问题、方案摘要、动作步骤与预期结果 |
其中QST处于抽取链路的最前端:在 首批样本自动抽取协议 中,每篇样本文稿强制抽取的第一个单元就是「1 个主问题单元QST」,随后才是观点OPI、概念CON、案例CAS与方案SOL。
1.2 QST 单元要回答的两个问题
从模板与字段规范看,问题单元回答两个问题:
- 内容在问什么——由
question_text(问题原句)与question_type(问题类型)承载; - 这个问题为谁、为哪些选题而存在——由
user_stage(用户阶段)与applicable_topics(适用选题)承载。
二、问题单元模板逐字段解析
2.1 完整模板原文
仓库中的 问题单元模板 全文如下:
--- id: QST-YYYYMMDD-001 type: 问题单元 title: 标题 source_documents: - SRC-* source_authors: - 待补 themes: - 主题 keywords: - 关键词 status: 待核对 canonical: true version: 1 created_at: YYYY-MM-DD updated_at: YYYY-MM-DD question_text: 问题原句 question_type: 认知问题 user_stage: 起步期 applicable_topics: - 适用选题 relationships: [] --- ## 核心内容 ## 来源依据 ## 使用场景 ## 关联单元 ## 备注2.2 通用字段(五类单元共用)
根据 内容单元字段规范,每个内容单元必须包含以下 13 个通用字段:
| 字段 | 含义 | 取值建议 |
|---|---|---|
id | 单元唯一标识 | QST-YYYYMMDD-001形式,日期+三位序号 |
type | 单元类型 | 固定为问题单元 |
title | 标题 | 一句话概括问题主题 |
source_documents | 来源文档 ID | 默认SRC-*,后替换为真实来源 |
source_authors | 来源作者 | 默认待补 |
themes | 所属主题 | 一个或多个主题词 |
keywords | 关键词 | 供检索与聚类 |
status | 状态 | 默认待核对 |
canonical | 是否主单元 | 合并去重时true者为主单元 |
version | 版本号 | 语义变化才递增 |
created_at/updated_at | 创建/更新时间 | YYYY-MM-DD |
relationships | 关联关系 | 空为[] |
2.3 类型专属字段(问题单元独有)
除通用字段外,问题单元多出 4 个专属字段:
| 字段 | 含义 | 示例 |
|---|---|---|
question_text | 问题原句 | 用户真实提出的问题,尽量保持原话 |
question_type | 问题类型 | 认知问题/方法问题(见 2.4 判定规则) |
user_stage | 用户所处阶段 | 起步期、成长期等 |
applicable_topics | 适用选题 | 该问题可以支撑的选题列表 |
2.4question_type的判定口径(来自抽取器源码)
虽然模板中question_type默认写认知问题,但 extract-sample-units.js 中的detectQuestionType函数给出了可操作的判定规则:
- 命中
为什么 / 本质 / 根本 / 误区 / 错在→认知问题; - 命中
怎么 / 如何 / 怎样 / 步骤 / 路径 / 开始 / 落地→方法问题; - 两者都不命中 →
待人工复核。
这提醒我们:手工填写时也应遵循同一口径,保证全库判断一致。
三、从模板到真实单元:两种落盘方式
3.1 手工填写:最小合格样例
把模板中的占位符替换为真实内容即可:
--- id: QST-20260602-192 type: 问题单元 title: 什么样的兴趣能真正变现 source_documents: - SRC-20260602-011 source_authors: - dontbesilent themes: - 兴趣变现 keywords: - 生产型兴趣 - 变现 status: 待核对 canonical: true version: 1 created_at: 2026-06-02 updated_at: 2026-06-02 question_text: 什么样的兴趣属于可以变现的生产型兴趣,以及怎样把兴趣、能力和具体业务接起来,做成可持续增长? question_type: 认知问题 user_stage: 起步期 applicable_topics: - 年轻人怎么赚钱 relationships: [] --- ## 核心内容 什么样的兴趣可以变成钱,是内容库里反复出现的主问题。本单元将其固定为可复用问题节点,供主题地图与装配稿引用。 ## 来源依据 来源文稿《兴趣变现实操》核心段落;`SRC-20260602-011`。 ## 使用场景 - 兴趣变现主题地图的主问题 - 「年轻人怎么赚钱」选题装配稿的开场问题 ## 关联单元 - [[CON-20260602-190|生产型兴趣]](解释) - [[OPI-20260602-200|兴趣变现三要素]](回应) ## 备注 `question_type` 按规则命中「为什么/本质」判为认知问题;待人工核对 `user_stage` 是否覆盖成长期人群。注意:模板中question_text: 问题原句、question_type: 认知问题、user_stage: 起步期等默认值应当被替换为真实内容;relationships: []在建立关系后要按 内容单元关系规则 的格式改写。
3.2 脚本生成:generate-unit-draft.js
手工从零写空文件容易出错。dbs-content-system自带 generate-unit-draft.js,它会读取模板并替换占位符。用法:
node 07-脚本与工具/generate-unit-draft.js <QST|CON|OPI|CAS|SOL> <YYYYMMDD> <序号3位> <标题> [sourceId] [theme] [keyword] [author]生成 QST 单元的例子:
node 07-脚本与工具/generate-unit-draft.js QST 20260602 192 什么样的兴趣能真正变现 SRC-20260602-011 兴趣变现 生产型兴趣 dontbesilent从源码看该脚本的核心行为:
id拼接规则为${prefix}-${date}-${seq},即QST-20260602-192;- 类型前缀映射(
typeMap)把QST指向问题单元/问题单元模板.md; - 输出目录为
02-内容单元库/问题单元/,文件名固定为ID_标题.md,例如QST-20260602-192_什么样的兴趣能真正变现.md; - 通过正则替换模板中的
QST-YYYYMMDD-001、title: 标题、SRC-*、待补、主题、关键词、created_at、updated_at等占位符; - 若目标文件已存在会直接报错退出,避免覆盖。
3.3 样本抽取:extract-sample-units.js 自动产出 QST
在首批样本阶段,推荐直接用 extract-sample-units.js 从样本文稿批量抽取:
node 07-脚本与工具/extract-sample-units.js --files '完整副本/兴趣变现.md,完整副本/找生意.md'从源码可以推断,该脚本会:先对每个来源做分类(成稿、短稿、推文合集等),再从正文中提取问题原句(buildMainQuestion),调用detectQuestionType判定question_type,用inferTheme推断themes,并自动生成nextId序号(扫描02-内容单元库/问题单元/下已有QST-YYYYMMDD-前缀文件取最大值 +1),最后落盘到02-内容单元库/问题单元/并更新抽取日志与处理状态总览。脚本产出的仍是「草稿」,需要按 新增文稿进入系统流程 人工复核。
四、问题单元如何与其他单元建立关系
4.1 四种允许的关系类型
内容单元关系规则 规定第一期只允许 4 类关系:
| 关系 | 语义 | 典型方向 |
|---|---|---|
回应 | 直接回应另一个问题、判断或方案 | 回应方 → 被回应对象 |
解释 | 概念解释问题、观点或方案 | 概念单元 → 被解释对象 |
证明 | 案例证明观点、方案或问题判断 | 案例单元 → 被证明对象 |
冲突 | 判断方向、适用边界或结论直接冲突 | 建议双向建立并补note |
4.2 relationships 的两种写法
空关系(模板默认):
relationships: []存在关系时(内容单元字段规范 示例):
relationships: - type: 解释 target: CON-20260602-001 note: 用于定义判断边界问题单元最常见的两种关系是:
- 被解释:概念单元(CON)用
解释指向问题单元,把问题中出现的术语边界固定下来; - 被回应:观点单元(OPI)用
回应指向问题单元,表示该观点是对这个问题的直接回答。
4.3 正文中的链接纪律
SKILL.md 明确:frontmatter 中的id、relationships.target保留结构化 ID;正文里引用其他内容单元、主题地图、装配稿时统一写[[文件名]]。对应地,fill-obsidian-links.js 会把正文中的结构化 ID 补成[[文件名]],方便在 Obsidian 中看到节点关系。
五、问题单元在四档工作流中的用途
dbs-content-system固定分为审计、样本、批量、全量四个模式,默认永远从审计模式进入,闸门全过才升档。QST 单元在其中的角色:
| 阶段 | QST 的产出要求 |
|---|---|
| 审计模式 | 不产出单元,只锁定边界与规模 |
| 样本模式 | 每篇样本文稿至少强制抽取 1 个主 QST,并补齐source_documents、themes、keywords、relationships |
| 批量模式 | 按批次推进,来源分类器先分流,每批复盘字段/关系/去重是否变动 |
| 全量模式 | 以既有规则滚动扩展覆盖率,不得重新发明字段、关系或去重类型 |
进入「样本模式 → 批量模式」的闸门中,明确要求「QST / CON / OPI / CAS / SOL的判断口径已经稳定」以及「回应 / 解释 / 证明 / 冲突的关系口径已经稳定」,因此问题单元的question_type判定规则与关系方向纪律,直接决定系统能否安全升档。
在 Phase 5 建立主题地图与选题装配稿时,QST 通常作为主题地图的主问题节点;在 assemble-topic-from-units.js 组装新选题时,问题单元通过--question 'QST-...,QST-...'参数被装配进新稿的骨架。
六、版本、去重与状态管理
6.1 canonical 与 version
内容单元去重与版本规则 规定:
- 去重类型第一期只允许
完全重复 / 同义重复 / 近似重复 / 重复讲述4 类; 完全重复与同义重复默认合并,合并时必须指定canonical: true的主单元作为当前有效对象;- 只有语义边界、适用范围、核心结论或关键步骤发生变化,才提升
version。
对问题单元而言,「问题原句」就是它的语义边界——如果两个 QST 的问题原句只是措辞不同而指向同一问题,应合并并保留一个canonical: true的主单元。
6.2 状态流转
status: 待核对是模板默认状态,配合03-处理状态/下的已处理清单、待处理清单与 处理状态总览 一起跟踪。新抽取的 QST 草稿在人工复核后,将status从待核对提升为可用态,同时把version保持在当前有效版本,历史变化交给 Git 管理。
七、填写检查清单(自检)
新建或复核一份 QST 单元时,逐项确认:
id满足QST-YYYYMMDD-三位序号且不与库内已有 ID 重复type: 问题单元未写错question_text是问题原句,而不是一段结论question_type按「为什么/本质→认知问题,怎么/如何→方法问题」口径判定user_stage与目标读者阶段一致source_documents、source_authors已替换SRC-*/待补占位符themes、keywords可被检索与聚类relationships为空则写[],非空则符合 4 类关系之一并保留结构化 ID- 正文引用一律用
[[文件名]],不用裸 ID created_at/updated_at格式为YYYY-MM-DD
八、相关文件速查
- 模板:问题单元模板(本文主体)、概念单元模板、观点单元模板、案例单元模板、方案单元模板
- 规则:内容单元字段规范、内容单元关系规则、内容单元去重与版本规则、处理流程
- 工具:generate-unit-draft.js(单单元落盘)、extract-sample-units.js(批量抽取)、fill-obsidian-links.js(ID 转
[[文件名]])、assemble-topic-from-units.js(选题装配) - 总览:SKILL.md、快速上手
掌握问题单元模板,等于掌握了整个内容结构化系统的入口语义:先锁定「问什么」,才能谈观点、概念、案例与方案的组装。
【免费下载链接】dbskilldontbesilent 的商业诊断 Skills项目地址: https://gitcode.com/gh_mirrors/db/dbskill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考