mirror of
https://github.com/kuaifan/dootask.git
synced 2026-07-29 17:35:56 +00:00
244 lines
5.8 KiB
Markdown
244 lines
5.8 KiB
Markdown
# Chunk 写作风格指南
|
||
|
||
这里的内容**只给 LLM 读**,不是给人。写作风格和习惯与人类文档完全不同。这份指南强约束所有 chunk 的形态。
|
||
|
||
## 核心原则(按重要程度排)
|
||
|
||
1. **每个 chunk 单独可读**。RAG 切块后会丢失上下文。读者只能看到这一段,前后段都不存在。所以禁止「如上所述」「在前一节」「参见 task.md 第二段」这类指代。
|
||
2. **关键名词在第一段出现一次**。提升 dense embedding 召回。
|
||
3. **显式同义词**。「子任务」和「subtask」、「列」和「看板列」、「待办」和「todo」要在 `aliases` 字段里并列。
|
||
4. **显式否定信息**。"X 不支持,因为 Y" 是高价值信息,能让 LLM 拒绝编造。
|
||
5. **结构化优于叙述化**。能用编号列表就别写段落;能用表格就别写散文。
|
||
6. **不依赖截图**。所有信息用文字描述,必要时描述按钮位置("页面右上角")。
|
||
|
||
## 字数指引
|
||
|
||
- 正文(不含 frontmatter)**200-1500 字符**(lint 强制)
|
||
- 黄金区间 **250-700 字符**(最贴近切块器目标 512 token)
|
||
- 短于 200 字符的内容合并到相关 chunk;长于 1500 字符的必须拆成多篇用 `[[id]]` 互链
|
||
|
||
## 标题结构
|
||
|
||
只用 `H1` 和 `H2`。**不要用 H3**。
|
||
|
||
```markdown
|
||
# {title} ← 与 frontmatter title 一致,H1 只能一个
|
||
|
||
## 入口 / 是什么 / 操作步骤 ← H2,按 type 选择模板(见下)
|
||
...
|
||
|
||
## 字段说明 / 不支持项 / 相关
|
||
...
|
||
```
|
||
|
||
切块器按标题切;层级浅检索更稳。
|
||
|
||
## 各 `type` 推荐小节模板
|
||
|
||
### `concept`(是什么)
|
||
```
|
||
## 定义
|
||
(一句话)
|
||
|
||
## 关键属性
|
||
- 列表化字段
|
||
|
||
## 与其他概念的关系
|
||
- 父子 / 包含 / 依赖
|
||
```
|
||
|
||
### `howto`(怎么做)
|
||
```
|
||
## 入口
|
||
- 桌面端 / 移动端的具体路径
|
||
|
||
## 操作步骤
|
||
1. 编号步骤
|
||
|
||
## 字段默认值
|
||
(可选,表格更清晰)
|
||
|
||
## 不支持
|
||
- negative 中已列的项也在正文重复一次
|
||
```
|
||
|
||
### `faq`(为什么 / 出错怎么办)
|
||
```
|
||
## 问题
|
||
(一句话描述现象)
|
||
|
||
## 原因
|
||
(短解释)
|
||
|
||
## 解决
|
||
1. 步骤
|
||
```
|
||
|
||
### `menu-map`(在哪里)
|
||
```
|
||
## 路径
|
||
桌面端:左侧栏 → 应用 → 审批
|
||
移动端:底部 Tabbar → 应用 → 审批
|
||
快捷键:无
|
||
|
||
## 权限要求
|
||
- end-user 可见
|
||
```
|
||
|
||
### `glossary`(术语表)
|
||
通常一个 feature 一篇,结构化列表:
|
||
```
|
||
## task(任务)
|
||
**别名**:todo, 待办, 卡片
|
||
**定义**:一个待完成的工作项,归属于某个项目。
|
||
|
||
## subtask(子任务)
|
||
...
|
||
```
|
||
|
||
### `shortcut`(快捷键)
|
||
表格优先:
|
||
```
|
||
| 操作 | 桌面端 | 移动端 |
|
||
|---|---|---|
|
||
| AI 助手 | Cmd+I | (无) |
|
||
```
|
||
|
||
## 同义词处理
|
||
|
||
`aliases` 字段里列 ≥ 1 条用户**可能怎么提问**的口语化说法。不是堆关键词,是模拟真实提问:
|
||
|
||
✅ 好的:
|
||
```yaml
|
||
aliases:
|
||
- 怎么建任务
|
||
- 新建待办
|
||
- 加一条 todo
|
||
- 我要建任务
|
||
```
|
||
|
||
❌ 不好的(关键词堆砌):
|
||
```yaml
|
||
aliases:
|
||
- 任务
|
||
- 创建
|
||
- 添加
|
||
- 新建
|
||
- 任务管理
|
||
```
|
||
|
||
## 否定信息(negative)的写法
|
||
|
||
业界实测:在 RAG chunk 里**显式写"不支持 X 因为 Y"**,能显著降低 LLM 编造率。
|
||
|
||
```yaml
|
||
negative:
|
||
- 快速创建不支持设置截止时间,需用完整创建
|
||
- 审批中心不支持嵌套子审批
|
||
- 任务删除后 30 天内可恢复,30 天后无法找回
|
||
```
|
||
|
||
正文也要重复一次(让 chunk 自包含):
|
||
```markdown
|
||
## 不支持
|
||
- 快速创建不支持设置截止时间,需用完整创建
|
||
```
|
||
|
||
## 跨引用 `[[id]]` 语法
|
||
|
||
引用其他 chunk 用 `[[id]]`,lint 会校验目标存在:
|
||
|
||
```markdown
|
||
想设置更多字段,切到完整创建模式:[[task.create.howto.full]]
|
||
任务的可见性规则见:[[task.visibility.concept]]
|
||
```
|
||
|
||
这种引用比"参见 task.md 第二段"鲁棒得多。
|
||
|
||
## 正例 vs 反例
|
||
|
||
### 反例 1:依赖截图
|
||
|
||
```markdown
|
||
点击下图红框中的按钮即可创建任务。
|
||
(截图:xxx.png)
|
||
```
|
||
|
||
问题:LLM 看不到截图。
|
||
改:
|
||
```markdown
|
||
点击项目详情页右上角的「+」按钮,选「快速添加任务」。
|
||
```
|
||
|
||
### 反例 2:跨章节指代
|
||
|
||
```markdown
|
||
如上一节所述,权限分三级。这里只讨论第二级。
|
||
```
|
||
|
||
问题:切块后看不到「上一节」。
|
||
改:
|
||
```markdown
|
||
项目角色有三级:成员、负责人、管理员。本文只讲负责人。
|
||
(或用 [[project.role.concept]] 指向定义文)
|
||
```
|
||
|
||
### 反例 3:故事化叙述
|
||
|
||
```markdown
|
||
小王是公司的项目经理,他每天早上都要看一下今天的任务。他打开 DooTask,
|
||
点击仪表盘,看到今日待办...
|
||
```
|
||
|
||
问题:信息密度低。
|
||
改:
|
||
```markdown
|
||
## 入口
|
||
左侧栏「仪表盘」→「今日待办」卡片
|
||
|
||
## 显示内容
|
||
- 今天截止的任务
|
||
- 今日新分配的任务
|
||
- 已超期的任务(带红色标记)
|
||
```
|
||
|
||
### 反例 4:信息不完整 / 缺否定信息
|
||
|
||
```markdown
|
||
# 任务标签
|
||
|
||
任务可以打标签便于分类。
|
||
```
|
||
|
||
问题:信息量太少,且没说限制。
|
||
改:
|
||
```markdown
|
||
# 任务标签
|
||
|
||
## 是什么
|
||
任务可以打多个标签,用于分类和筛选。标签按项目隔离,不跨项目共享。
|
||
|
||
## 操作
|
||
- 添加:任务详情页 →「标签」字段 → 选择或新建
|
||
- 删除:标签上的 × 按钮
|
||
- 项目内管理:项目设置 →「标签管理」
|
||
|
||
## 不支持
|
||
- 标签不跨项目共享(每个项目独立维护)
|
||
- 单个任务最多 10 个标签
|
||
- 标签名 ≤ 20 字符
|
||
```
|
||
|
||
## 写完检查清单
|
||
|
||
提交 PR 前,每条 chunk 自检:
|
||
|
||
- [ ] 不读其他 chunk 也能懂这一篇
|
||
- [ ] 关键名词在第一段出现
|
||
- [ ] `aliases` 至少 1 条且像真实提问
|
||
- [ ] 有 `## 不支持` 小节(或在 frontmatter `negative` 写明"无已知限制")
|
||
- [ ] 没有截图、没有跨章节指代
|
||
- [ ] 正文长度在 200-1500 字符
|
||
- [ ] `last_verified` 是当前主程序版本号
|
||
- [ ] 跨引用 `[[id]]` 目标存在
|