笔记、剪藏与知识管理
本页说明Molore的内容层:笔记、剪藏、知识单元、文档四类内容共用一套标签/归档/检索口径,以及快记、目录树、标签、文档在线编辑与仓库模式各自的机制边界。检索与索引的底层实现见分块与索引机制。
四类内容统一模型
| 类型 | content_type | 来源 | 说明 |
|---|---|---|---|
| 笔记 | note | 手动新建 / 快记 | 最基础的内容单元,归属个人脑或网络脑 |
| 剪藏 | clip | 浏览器扩展 / RSS | 网页正文抓取入库,带原始 URL |
| 知识单元(KU) | knowledge | 管线加工产物 / 手动 | 概念卡、碰撞卡、派生条目,带 title 列 |
| 文档 | document | 文件上传 | PDF/DOCX/XLSX 等,抽取文本层进 content_text |
四类内容共用同一套基础设施:同一套标签关联表(content_tags)、同一套分块与行条目管线(app/services/chunking.py)、同一套三索引(FTS/向量/SQL),以及同一套空间口径(tenant_scope.scope_condition)。任何「按类型过滤」的新代码都要先回答「其他三类该不该也在」。
笔记与快记
- 常规入口:「存进来 → 笔记管理」新建/编辑。
- 快记:桌面端注册的系统全局热键 Ctrl+Shift+N,任意应用里一键弹出新建笔记页,写完即存;另有 Ctrl+Shift+J 唤起对话。网页端无等价热键。
- 笔记保存后进入后台异步链:自动打标 → 向量化 → 规则归档检查。刚保存的笔记几秒后才有标签、才能被语义检索命中,属正常时序。
脑侧建档目录树
目录树(folders 表)是手动归档体系,回答「这条内容放在哪」:
- 必属一脑:每个文件夹必属个人脑或网络脑之一,两脑各一套树互不混放(
Folder.brain_side);默认树 v2 播种见DEFAULT_FOLDER_TREE(app/services/folder_service.py)。 - 限三层:根/子/孙。建第四层在端点直接 400;移动子树时按「新父链深度 + 子树高度 ≤ 3」校验(
app/api/v1/endpoints/folders.py:70-229)。深层归类刻意交给标签。 - 删除不删内容:删除文件夹时子文件夹与内容整体上提一级。
规则归档与手动归档
| 归档方式 | 适用类型 | 机制 |
|---|---|---|
| 规则归档 | note / clip / knowledge 三类 | 文件夹 auto_rules(tags/subtypes/verification 三维度,夹内 OR)命中即入,只动未归档内容,不抢手动归的档(folder_service.evaluate_archive_rules) |
| 手动归档 | 四类全部(含文档) | 内容上的 folder_id 显式指定;文档只手动,不进规则引擎 |
口径细节:规则归档跳过团队内容;both(双脑)内容优先匹配个人脑树;文件夹计数四类内容全计。
标签
标签是检索主体系,关联表 content_tags 带 source 列区分来源:
source = auto:入库自动打标(本地模型,范围 = 四类内容,index_only跳过);source = manual:人工增删。
关键机制(app/services/tag_service.py):
- 重打只清 auto:
replace_auto_tags_for只删除source='auto'的关联,人工标签原样保留;新自动标签与现存人工标签同 tag_id 时跳过不重复关联。 - 逗号拆分收口在解析层:
resolve_tag_inputs统一按,,、;;拆分输入串,所有调用方(笔记/剪藏/文档/批量导入/剪藏扩展)自动受益——此前「a, b」整串被建成一个标签的缺陷即在此收口。 content_tags无user_id列:标签归属由调用端点前置校验(tag_id 属于当前空间),关联行按content_id + content_type引用内容,空间口径随内容行走。按标签统计用量直接按 tag_id 计数即为该空间用量,不要凭直觉写 user_id 过滤。- 标签用量只统计「活体内容」(
_live_usage_breakdown),幽灵关联行(内容已删、关联残留)有专门清理入口purge_ghost_associations。
知识单元(KU)title 列
知识单元有独立 title 列(app/services/knowledge_title.py):
- 生成时填:概念卡取
concept_name,碰撞卡取「碰撞:A×B」,派生/导入型取source_title或首行(first_line_title:剥 markdown 截 30 字); - 存量回填:
backfill_ku_titles三路零 LLM 优先(概念名解冒号前、碰撞卡解双亲、source_title 直用),都不沾的才走本地 0.8b 模型;本地不可用整轮跳过不报错。
文档在线编辑
文本类文档(md/txt 等,is_text_document 判定)支持在线编辑 title 与 content(PUT /api/v1/documents/{id},app/api/v1/endpoints/documents.py:159):
- 改的是标题与
content_text抽取文本层,原始上传文件不动; - 非文本类(PDF/DOCX 等)编辑请求直接 400;
content变更后重走重索引链:FTS 重同步 → 向量重嵌 → 自动打标;标题单独改也触发 FTS 重同步(标题进 FTStitle_tok高权列),但向量/打标的文本来源只有content_text,不随标题走。
仓库模式(index_only)
内容级开关「仅入库检索」:notes / browser_clips / documents 三表有 index_only 列(迁移 DEFAULT 0,NULL 兼容存量行):
index_only = true的内容只进检索层(FTS/向量/SQL 直查,RAG 照常可答),不进语义加工层(图谱语料、wiki 编译、自动打标、复盘素材等);- 消费方过滤统一走
tenant_scope.semantic_visible(app/core/tenant_scope.py:49);检索、站内统计、存储计费不滤——仓库内容必须照常可答、照常计数; - 前端在上传/列表等四处提供开关,列表显示「存档」徽章;摘标记后由打标兜底扫描、下次建图、wiki 编译等周期机制自然接管,零专门入口。
下一步
- 文档解析与 OCR——文档
content_text是怎么抽出来的 - 分块与索引机制——四类内容如何进检索层
- 笔记与快记使用指南——操作视角
- 脑侧建档目录树使用指南——树与标签的分工
- 标签档夹与融合检索——检索主入口