Skip to content

笔记、剪藏与知识管理

本页说明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_TREEapp/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_tagssource 列区分来源:

  • source = auto:入库自动打标(本地模型,范围 = 四类内容,index_only 跳过);
  • source = manual:人工增删。

关键机制(app/services/tag_service.py):

  • 重打只清 autoreplace_auto_tags_for 只删除 source='auto' 的关联,人工标签原样保留;新自动标签与现存人工标签同 tag_id 时跳过不重复关联。
  • 逗号拆分收口在解析层resolve_tag_inputs 统一按 ,,、;; 拆分输入串,所有调用方(笔记/剪藏/文档/批量导入/剪藏扩展)自动受益——此前「a, b」整串被建成一个标签的缺陷即在此收口。
  • content_tagsuser_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 判定)支持在线编辑 titlecontentPUT /api/v1/documents/{id}app/api/v1/endpoints/documents.py:159):

  • 改的是标题与 content_text 抽取文本层,原始上传文件不动
  • 非文本类(PDF/DOCX 等)编辑请求直接 400;
  • content 变更后重走重索引链:FTS 重同步 → 向量重嵌 → 自动打标;标题单独改也触发 FTS 重同步(标题进 FTS title_tok 高权列),但向量/打标的文本来源只有 content_text,不随标题走。

仓库模式(index_only)

内容级开关「仅入库检索」:notes / browser_clips / documents 三表有 index_only 列(迁移 DEFAULT 0,NULL 兼容存量行):

  • index_only = true 的内容只进检索层(FTS/向量/SQL 直查,RAG 照常可答),不进语义加工层(图谱语料、wiki 编译、自动打标、复盘素材等);
  • 消费方过滤统一走 tenant_scope.semantic_visibleapp/core/tenant_scope.py:49);检索、站内统计、存储计费不滤——仓库内容必须照常可答、照常计数;
  • 前端在上传/列表等四处提供开关,列表显示「存档」徽章;摘标记后由打标兜底扫描、下次建图、wiki 编译等周期机制自然接管,零专门入口。

下一步

基于 AGPL-3.0 协议发布。