diff --git a/README.md b/README.md index 558baf7..919a183 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,9 @@ ## 阅读路径 1. 从 [系统总览](docs/concepts/overview.md) 了解系统要解决的问题和核心闭环。 -2. 从 [术语表](docs/concepts/README.md) 查找具体概念。 -3. 需要理解“为什么这样设计”时阅读 `docs/design/` 下的文档。 +2. 从 [系统结构](docs/design/system-structure.md) 了解组织轴、闭环、记忆机制与取舍准则。 +3. 从 [术语表](docs/concepts/README.md) 查找具体概念。 +4. 需要理解“为什么这样设计”时阅读 `docs/design/` 下的文档。 ## 维护规则 diff --git a/docs/concepts/README.md b/docs/concepts/README.md index 22f7aae..b607041 100644 --- a/docs/concepts/README.md +++ b/docs/concepts/README.md @@ -8,6 +8,8 @@ | 学习会话 | 针对某个学习任务的一次连续学习过程;误操作开启时可零数据关闭 | [学习会话](study-session.md) | | 学习预期 | 开始学习前对本次学习目标的描述 | [学习预期](learning-expectation.md) | | 知识碎片 | 学习中随手记录的不完整内容,也称“学习报告残片” | [知识碎片](knowledge-fragment.md) | +| 内容归属 | 一条知识碎片在知识结构上属于哪个学习任务 | [内容归属](knowledge-ownership.md) | +| 待归类 | 尚未确定内容归属的碎片状态 | [内容归属](knowledge-ownership.md) | | 学习报告 | 一次学习结束后汇总出的完整学习结果 | [学习报告](learning-report.md) | | 有效学习时间 | 学习会话中未暂停的实际投入时间 | [时间与效率](time-and-efficiency.md) | | 任务优先级 | 由多个维度综合计算出的学习任务排序依据 | [任务优先级](priority.md) | diff --git a/docs/concepts/knowledge-fragment.md b/docs/concepts/knowledge-fragment.md index 152853b..11569fd 100644 --- a/docs/concepts/knowledge-fragment.md +++ b/docs/concepts/knowledge-fragment.md @@ -20,7 +20,10 @@ - 学习报告:碎片被聚合、整理成完整报告。 - 复习 Feed:碎片是滚动展示的核心内容。 - 标准思维导图:碎片参与导图生成,并可追溯到原文。 +- 内容归属:碎片产生于某个会话,但它可以归属到另一个学习任务。 ## 设计思路 碎片不应被要求“整理得非常完美”。它是学习过程的原料,后续由用户或 AI 汇总成更结构化的内容。 + +碎片“产生于某个任务”只说明它出现在哪里,不代表它只能属于那里:记录上下文不可变,内容归属可以调整,尚未确定的内容进入待归类状态。区分两者后,旁支知识不会污染原任务的知识结构。 diff --git a/docs/concepts/knowledge-ownership.md b/docs/concepts/knowledge-ownership.md new file mode 100644 index 0000000..56ebdeb --- /dev/null +++ b/docs/concepts/knowledge-ownership.md @@ -0,0 +1,93 @@ +# 内容归属 + +> 状态:**草案,待维护者确认后实施**。文末列出三个待决问题,确认前不要按本文档改动实现。 + +## 定义 + +**内容归属**描述一条知识碎片(以及由它聚合出的内容)属于哪个学习任务。 + +它与**记录上下文**是两件事: + +- **记录上下文**:这条碎片是在哪次学习会话、哪个任务下产生的。不可变,由系统确定。 +- **内容归属**:这条碎片在知识结构上属于哪个任务。可变,由用户确定。 + +系统允许两者不一致。典型场景:在学习 AI 的过程中记下"1B 是 one billion 的缩写",它的记录上下文是 AI 任务,内容归属是英语任务。 + +**待归类**是没有确定归属的状态。处于待归类的内容不会消失,也不阻塞任何流程,只是暂时不进入任何任务的知识结构。 + +## 要解决的问题 + +在只有记录上下文的情况下,系统会强制把"记录地点"当成"内容归属",由此产生三个后果: + +1. **污染原任务的知识结构**。旁支知识进入原任务的标准思维导图,回忆对比的基准随之失真——用户明明掌握了 AI 的内容,却因为导图里混着英语词条而覆盖率偏低。 +2. **旁支知识无处复习**。用户想按英语复习这块内容时找不到它,它沉在 AI 任务下。 +3. **不成体系的内容无家可归**。既不属于任何现有任务,也不值得为它单独建任务的内容,只能硬塞或干脆不记。 + +## 三个维度 + +| 维度 | 数量 | 可变性 | 由谁决定 | 影响 | +|------|------|--------|---------|------| +| 记录上下文 | 一个 | 不可变 | 系统 | 时间统计、学习报告 | +| 内容归属 | 一个,可为空 | 可变 | 用户(AI 只建议) | 标准思维导图、复习内容、检索 | +| 标签 | 多个,可为空 | 可变 | 用户 | 只影响检索,不影响聚合与统计 | + +归属保持**单一**是有意的:多归属会让同一条内容出现在多张导图里、被回忆对比重复计数,聚合与统计都会出现歧义。一条内容确实横跨两个领域时(例如"1B"同时属于英语与 AI),用标签表达弱关联即可。 + +## 核心原则 + +**时间按学习会话统计,内容按内容归属聚合。** + +这条原则把两条轴彻底分开: + +- 学习时间、有效性、番茄钟、遗忘判定——全部按会话,不受归属影响。一次会话实际投入的时间不会因为碎片被归类到别处而改变。 +- 标准思维导图的素材、复习内容、按任务的检索——全部按归属,不受产生地点影响。 + +推论:**学习报告按会话生成**(它是"这次学习产出了什么"的事实记录),而**标准思维导图按归属聚合**。同一份数据因此有两种视角,这是设计意图,不是重复。 + +## 配套机制 + +### 待归类优先,不打断记录 + +记录一条碎片时,归属默认就是当前任务,用户不需要做任何额外操作。只有在用户主动改归属时才会离开默认值。未确定归属的内容进入**待归类**视图,长期不处理也不影响任何流程——低阻力优先于分类整齐。 + +### 归类挂在复习里,而不是单独做整理流程 + +用户很少专门花时间整理历史记录,但会经常刷复习 Feed。因此在复习 Feed 中看到一条内容时提供轻量的归类动作,是成本最低的归类时机。归类不应该成为一个独立的"整理任务"。 + +### AI 只给建议 + +系统可以在记录或归类时给出建议归属,一键接受即可。AI 不可用时降级为规则建议(关键词、历史归属),再不可用时不做建议,不影响记录与复习。 + +### 零散知识可以升格为学习任务 + +待归类内容积累到一定量时,系统可以提示用户将这些同类内容立为一个学习任务。这让体系从已有内容中长出来,而不是要求用户在记录之前就规划好体系。 + +升格后的内容归属到新任务,记录上下文保持不变——学习时间仍然记在当初真实发生的那次会话上。 + +### 报告保持真实,旁支内容单独呈现 + +一次会话产生的碎片可能归属不同任务。学习报告只收敛归属当前任务的碎片;旁支碎片在报告中单独呈现并标注其归属,不参与本次报告的正文推演。这样既保住报告的真实性,也避免报告与导图被无关内容带偏。 + +## 修改归属的后果 + +内容归属可以被修改,但修改会产生两个后果,需要系统显式处理: + +- 原任务与新任务的知识结构都需要重新整理。导图是快照式的,必须标记为待更新,否则用户会以为内容丢失。 +- 复习 Feed 的排序权重按任务掌握度计算,归属改变后自动跟随,不需要单独处理。 + +## 相关概念 + +- 知识碎片:内容归属的作用对象,也是待归类的单位。 +- 学习任务:内容归属的目标容器。任务不必在记录前存在,可以由待归类内容升格而来。 +- 标准思维导图:按归属聚合的核心消费者。 +- 学习报告:按会话生成,与归属口径不同。 +- 复习 Feed:归类动作的最低成本落点,也是旁支内容的复习入口。 +- AI 任务:只提供归属建议,不作为判定依据。 + +## 待决问题 + +以下三点需要维护者确认后再进入实现: + +1. **是否允许碎片脱离学习会话存在?** 允许后可以在任何场景随手记一条内容,代价是系统有向通用笔记工具漂移的倾向。若允许,这类碎片不参与时间统计、不产生学习报告。 +2. **学习报告是否改为结构化呈现?** 即报告由"会话产出摘要 + 按归属分组的碎片"组成,而不是一段自由文本。结构化后旁支内容天然分离,但会改变报告的形态。 +3. **归属是否保持单一、由标签承担跨领域关联?** 本文档的建议是保持单一。 diff --git a/docs/concepts/learning-task.md b/docs/concepts/learning-task.md index cd17974..5434d7d 100644 --- a/docs/concepts/learning-task.md +++ b/docs/concepts/learning-task.md @@ -28,3 +28,5 @@ ## 当前系统体现 学习任务拥有可配置的多维度优先级权重,用户可以调整权重后让系统重新排序。应用场景被设计为任务级能力,而不是复习模块的一部分。 + +学习任务不必在记录之前就存在:待归类内容积累到一定量后可以升格为一个学习任务,体系从已有内容中长出来。 diff --git a/docs/concepts/standard-mind-map.md b/docs/concepts/standard-mind-map.md index e2e246c..da33970 100644 --- a/docs/concepts/standard-mind-map.md +++ b/docs/concepts/standard-mind-map.md @@ -2,7 +2,7 @@ ## 定义 -标准思维导图是每个学习任务对应的知识结构基准,由系统从该任务的学习报告、知识碎片和应用场景中提取整理而成。用户可以查看、编辑它,也可以用它作为复习的对照对象。 +标准思维导图是每个学习任务对应的知识结构基准,由系统从**归属为该任务**的学习报告、知识碎片和应用场景中提取整理而成。用户可以查看、编辑它,也可以用它作为复习的对照对象。 ## 设计意图 @@ -15,10 +15,26 @@ ## 相关概念 - 学习报告与知识碎片:导图的生成素材。 +- 内容归属:决定哪些碎片进入本导图;素材按归属取材,而不是按产生于哪个学习会话。 - 应用场景:作为独立分支进入导图。 - 回忆对比:标准导图是用户回忆结果的对照基准。 - 节点溯源:导图节点可以关联回原始报告、碎片或应用场景。 +## 生成来源 + +标准导图区分四种来源,用于说明当前这份导图是怎么来的: + +- 内置规则:不依赖 AI,按学习会话分组,对报告、碎片和应用场景做去重与合并。 +- AI 生成:由 AI 从学习材料中提取缩进大纲后解析成树。 +- 用户编辑:用户直接修改导图内容。 +- 用户合并:增量生成时保留用户已编辑的内容,再追加新产生的学习内容。 + +重新生成导图时不覆盖用户的手工编辑,而是把新内容合并进来。 + ## 设计思路 标准导图应同时适合人工编辑和机器处理。它既可以用缩进大纲的形式让用户直接修改,也可以用树结构参与算法比较。 + +内置规则和 AI 是两条并行的生成路径:AI 提升结构质量,内置规则保证 AI 不可用时导图仍能生成。 + +取材按内容归属而不是产生地点:其他任务中顺手记下、但归属本任务的内容同样会进入本导图;反之,在本任务中产生的旁支内容不会混入。内容归属发生变更时,原任务与新任务的导图都应标记为待更新。 diff --git a/docs/design/module-boundaries.md b/docs/design/module-boundaries.md index 27cc791..41f4667 100644 --- a/docs/design/module-boundaries.md +++ b/docs/design/module-boundaries.md @@ -15,7 +15,7 @@ - 汇总学习报告。 - 追踪时间与状态。 -学习执行产生学习过程中的原始材料。 +学习执行产生学习过程中的原始材料。学习执行只按会话记录发生了什么,不决定内容最终属于哪个知识结构(见 [内容归属](../concepts/knowledge-ownership.md))。 ## 复习 @@ -25,7 +25,7 @@ - 维护标准思维导图。 - 提供回忆对比和遗漏项回溯。 -复习模块不要求用户逐条整理学习材料,材料是自动整理和对照分析的数据来源。 +复习模块不要求用户逐条整理学习材料,材料是自动整理和对照分析的数据来源。复习按内容归属聚合,而不是按内容产生于哪次会话:这是归类动作与复习动作放在一起的原因。 ## 应用场景 @@ -46,4 +46,5 @@ AI 能力可替换、可降级,不影响学习执行和复习的基本流程 - 执行模块产生数据。 - 复习模块消费数据并形成反馈。 - 应用场景定义学习目标。 +- 时间轴与内容轴分离:时间按学习会话统计,内容按内容归属聚合。 - AI 模块增强整理与对比,但不承担核心闭环的完整性。 diff --git a/docs/design/system-structure.md b/docs/design/system-structure.md new file mode 100644 index 0000000..57877e8 --- /dev/null +++ b/docs/design/system-structure.md @@ -0,0 +1,106 @@ +# 系统结构 + +## 本文档的用途 + +`concepts/overview.md` 回答"系统要解决什么问题",本文档回答"系统是靠什么结构解决问题的"。理解以下三条结构后,判断某个功能该不该做、改动会不会动摇设计目标,都会变得直接。 + +## 一、系统要回答的三个问题 + +LPT 的全部能力最终只服务于三个问题: + +1. **我学过什么?** —— 需要真实、不可篡改的学习记录。 +2. **我学到什么程度?** —— 需要可对照的知识结构和暴露缺口的机制。 +3. **下一步该学什么?** —— 需要可比较的任务优先级。 + +任何一个功能,如果对这三个问题都没有贡献,就不应该进入系统。 + +## 二、骨架:一个组织轴、一个闭环、一个记忆机制 + +### 组织轴 + +```text +学习任务 → 学习会话 → 知识碎片 → 学习报告 +``` + +组织轴决定"内容存放在哪里、被谁聚合"。系统里所有围绕内容的聚合(知识结构、复习内容、检索)都从这条轴派生。 + +组织轴的每一层含义不同: + +- **学习任务**:长期目标,可管理、可排序。 +- **学习会话**:一次真实发生的学习,不可变、时间可计量。 +- **知识碎片**:学习过程中的原始记录,粒度最小。 +- **学习报告**:一次会话的收敛结果。 + +### 闭环 + +```text +学习预期 → 学习执行(碎片) → 报告收敛 → 复习 → 应用场景 +``` + +闭环决定"一次学习如何被完整地走完"。闭环的完整性依赖两件事: + +- 会话记录不可篡改,量化结果才可信。 +- 碎片记录成本足够低,闭环才不会在中途断掉。 + +### 记忆机制 + +```text +偶遇(滚动 Feed) → 主动提取(回忆对比) → 缺口暴露(遗漏项) → 回看原文 +``` + +记忆机制是系统区别于普通笔记工具的部分。笔记工具能"存",能"检索",但不会告诉用户"你以为你记得,其实漏了这三个点"。 + +## 三、三条主线与痛点的对应 + +| 原始痛点 | 设计主线 | 主要概念 | +|---------|---------|---------| +| 没有时间观,不知道自己的能力水平在哪 | 量化学习过程 | 学习会话、学习预期、知识碎片、学习报告、时间与效率 | +| 没有计划,想学什么学什么 | 合理安排优先级 | 学习任务、任务优先级、应用场景 | +| 没有复习习惯,学过就忘 | 让复习自然发生 | 复习 Feed、标准思维导图、回忆对比 | + +三条主线共享同一条组织轴,因此组织轴的任何变化都会同时影响三条主线;反之,三条主线各自的机制变化通常互不干扰。 + +## 四、取舍准则 + +新增功能时按以下顺序判断: + +1. **是否服务于三个问题之一**(见第一节)。不服务就不做。 +2. **是否增加记录或整理成本**。增加成本的方案必须证明收益大于成本损失。 +3. **是否让 AI 变成必需品**。AI 只能增强,不能成为流程能否走通的前提。 + +这三条准则解释了系统已有的一些取舍:不做强制复习清单、不做打卡与连续天数、短会话不计入总时长、AI 能力全部可降级。 + +## 五、支点:不轻易改动的六条 + +以下六条是设计目标的支点。改动它们属于设计变更,必须先改文档再改实现: + +1. **时间按学习会话统计**。会话是唯一真实发生的事实。 +2. **一次学习会话只属于一个学习任务**。 +3. **三类时间规则**:番茄钟长度(单个学习段落的上限)、遗忘判定阈值(判断用户是否忘记暂停或结束)、不计入总时长的最小值。 +4. **学习报告是会话产出的真实记录**。碎片是原料,报告是收敛,报告不做美化。 +5. **复习是偶遇加主动提取**,不是清单、不是打卡、不是必须完成的任务。 +6. **AI 只增强不依赖**。报告聚合、导图生成、回忆对比都必须有内置规则可独立完成。 + +## 六、两条轴的分工原则 + +系统正在形成两条互不干扰的轴: + +- **时间轴**:按学习会话统计投入。回答"我花了多少时间、效率如何"。 +- **内容轴**:按内容归属聚合知识。回答"这块知识属于哪里、我掌握到什么程度"。 + +两条轴的分工是:**时间按会话,内容按归属**。这解释了一个看起来矛盾的现象——一次会话产生的知识碎片不一定属于这次会话的学习任务,而一份学习报告一定属于这次会话。细节见 [内容归属](../concepts/knowledge-ownership.md)。 + +## 七、判断改动是否触及设计目标 + +用三个提问自查: + +1. 改动是否改变了支点之一(第五节六条)?如果改变,属于设计变更。 +2. 改动是否引入了第二套聚合口径(同一内容在两处归属不同)?如果引入,必须先把口径统一到唯一的聚合入口。 +3. 改动是否依赖了某个尚不存在的概念?如果是,先补概念文档再谈实现。 + +## 相关文档 + +- [系统总览](../concepts/overview.md):三个痛点与核心闭环的简述。 +- [设计原则](principles.md):量化但不评判、低阻力优先等具体原则。 +- [模块边界](module-boundaries.md):各模块负责什么、不负责什么。 +- [内容归属](../concepts/knowledge-ownership.md):内容轴的定义与设计。