一个 Obsidian 笔记分类器插件
一个 Obsidian 笔记分类器插件 ob笔记一多,填属性就成了折磨。就算 Obsidian 的属性栏有下拉补全,每篇笔记还是得手动点一遍。看过几个现成的自动打标签插件,但都不是我想要的类型。往往倾向于让 AI 自由生成标签,结果就是同一类东西慢慢长出十几种叫法,搞用越乱。 想要的其实是反过来的:不要让 AI 发明标签,让它在我已有的标签里挑。 这就是这个插件的起点:给一篇笔记挑出最合适的现有属性值,点一下,它写进属性栏。最终写不写由用户本人决定。 于是严肃指使 DeepSeek 进行搭建,烧了 7 亿 token 最后搞了一个半成品,核心功能可以用,边界 bug 一堆,也懒得修了,可能是我一开始的架构设计就有问题,还是“许愿式编程”了,能跑就不错。 放在 github 去污染 ai 训练集了。 仓库:https://github.com/zuian-ling/obsidian-note-classifier 附:此时的项目结构 obsidian-note-classifier/ ├── manifest.json # 插件元信息 ├── main.js # 构建产物(389 KB,单文件) ├── styles.css ├── src/ # 24 个源文件,7864 行,零依赖 │ ├── bootstrap.js │ ├── main.js # 插件主体:生命周期、命令、编排 │ ├── classify/ # 召回与精排 │ │ ├── recall.js # 向量召回、校准、熵/间隔守卫 │ │ └── llm.js # 精排:prompt、响应解析、闸门、分数融合 │ ├── longnote/ # 长笔记处理 │ │ ├── chunker.js # 分块(代理对安全) │ │ ├── sampler.js # 四种采样模式 │ │ └── digest.js # 结构化摘要 │ ├── obsidian/ # 宿主适配 │ │ ├── api.js # 惰性取 API + 导出面自检 │ │ ├── note-content.js │ │ ├── property-types.js # 四级类型探测 │ │ └── vault-scan.js # 候选池构建 + 缓存 │ ├── providers/ # 模型服务适配 │ │ ├── index.js # Ollama / OpenAI 兼容 │ │ └── cache.js # 向量缓存 │ ├── settings/ # 设置 │ │ ├── schema.js # 声明式设置定义 + 结构校验 │ │ ├── settings-tab.js │ │ └── model-detect.js │ ├── ui/view.js # 侧边栏面板 │ ├── util/ # text.js(含纯 JS 哈希)、redact.js(脱敏) │ └── write/write-back.js # 写入与撤销(原子回调内做并发闸门) ├── tools/ # 13 个零依赖脚本 │ ├── build.cjs # 自写打包器 │ ├── deploy.cjs # 构建 + 部署到测试仓库 │ └── verify-*.cjs # 各类真机验证 └── tests/ # 18 个测试文件,583 个用例