夜雨聆风学习资料网

ARTICLE · 1112992

DeepSeek Harness学习插件KnowledeGenet:AI 逐个啃概念,并按知识前置讲给你听,同时把学过的东西沉淀成可检索的图谱

DeepSeek Harness学习插件KnowledeGenet:AI 逐个啃概念,并按知识前置讲给你听,同时把学过的东西沉淀成可检索的图谱

学一个新概念的时候,卡住的往往不是概念本身,而是它依赖的那些前置:想搞懂注意力机制,得先把词嵌入、矩阵乘法的直觉补上;可这些前置的前置又还没弄明白。KnowledeGenet 是 Du010902 发在 GitHub 上的一个 DeepSeek Harness(DSH,本地 Agent 运行环境,插件制)插件,解决的正是这件事:它给每个工作区建一个本地知识图谱,一个节点就是一个 markdown 文件,节点之间记「前置依赖」,让模型按图谱的节奏讲、按纪律写。

它 9 月 29 日创建(3 天前),2 星、0 fork、没有 license 文件、203 个源码文件(最后一条 push 是今天 10 月 1 日,API 核实)。先说结论:这是个人向的项目,代码很用心,但「没有 license」意味着它目前在开源法上不是可自由使用的——引用、集成前你得先搞清楚。

🔥 一、存储格式:一节点一文件

(图注:库 = 目录里的一组文件。节点正文就是笔记本身,front-matter 只装身份元数据,关系全部在 graph.json)

这是它最核心的设计决策,上图画的就是它。

库就在工作区里:<工作区>/.dsh_knowledge/。三个东西:library.json(库元数据,格式版本 3)、Nodes/ 下一堆 .md(每个文件就是一个节点)、graph.json(边:A → B,以及「为什么依赖」「出处」)。

节点文件长这样——竖线围住的是 front-matter(元数据),它之后的正文直接用编辑器改也不会坏。文件开头是三道横线围起来的元数据区,里面逐行写字段:

id: 01M3NHE78B55MHMDQ9D192MXAMtitle: 注意力机制status: todoaliases: [Attention, 注意机制]rev: 2

围栏之后就是正文,随便写。

每个字段的含义:id 是 ULID(一种可排序的唯一标识),永不随标题或文件名变化;status 三档,todo / learning / done;aliases 是别名数组,查重复时靠它;rev 是修订号。front-matter 之后的一切都是正文,你自由写,不用守任何额外格式。

🔥 二、身份与名称彻底解耦

这里有个值得学的设计:节点的 id 是一个 ULID(一种可排序的唯一 ID),永不随标题或文件名变化。后果就是——改标题、重命名文件(注意力机制.md 改叫 Attn.md),节点身份不变、它的所有依赖边不会断,因为面板是按 id 找节点的。建两个同名节点也 OK(自动加 -2 后缀,两个不同身份)。手工往 Nodes/ 丢一个没 front-matter 的 md,先给临时身份,首次写入时固化成正式 ULID。

它明确不支持老格式(v2,一节点一文件夹那种):遇到直接报 unsupported_format 并告诉你「删掉库目录、在面板里重新创建」,不给含糊结果。

🔥 三、工具:按图谱讲,按纪律写

(图注:提案与落地之间隔了一个人。Agent 提案只写计划文件,真正建点由用户在面板点确认,已落地的可撤销——这是它控制「Agent 擅自扩库」的核心手段)

工具
干什么
读/写
`kn_list_graph`
列节点与依赖(可看某个节点的一跳邻里)
只读
`kn_find_node`
按标题/别名查(判重、找复用)
只读
`kn_read_node`
读一个节点的正文与关系(含「为什么依赖」、出处)
只读
`kn_enter_node` / `kn_back`
进入前置 / 返回上层(学习栈)
会话内状态
`kn_write_note`
写正文(带内容指纹冲突守卫,绝不静默覆盖)
写
`kn_add_prerequisite`
记一条前置(可顺带建点;命中相近候选会先问你)
写
`kn_propose_prerequisites`
一次提案多个前置(只写计划文件,不建点)
写计划
`kn_plan_status`
查提案状态(落地了哪些、哪些失败)
只读
`kn_status`
自诊断(路由注册、缓存/扫描指标、隔离判定留痕)
只读

写纪律是写进系统提示、模型必须遵守的:搜索类请求不得调写入工具;建点前必须说明并等你同意;一轮最多一次 kn_add_prerequisite;要一次处理多个概念只能走提案,落地只能由你在面板上点。

🔥 四、右侧「知识库图谱」面板:交互的几个讲究

面板所有工作区可见,库没有就静默创建一个空库(不弹窗不问)。建节点是右键空白处(双击建点那个临时兜底已经移除了);加前置是右键节点 →「添加前置」(2–3 条推荐 + 搜索);删连线是右键连线;删节点是右键节点 → 删除 → 直接删掉那个 .md——没有回收站、没有墓碑,想留底自己复制。

笔记编辑器只有一个标题栏,高度全给正文,没有模式切换(打开就是所见即所得的正文);没有保存按钮,改完按 Ctrl/⌘+S(提示挂在标题栏悬停里),未保存时节点名右上角有 *。正文里有富编辑器保不住的语法(原始 HTML、脚注、指令)会自动切到纯文本编辑,原文一字不动;想切回正文得显式点一次「仍要用正文编辑」。

保存的竞态处理值得抄:确认保存后先落缓存、再通知离开,所以重新打开直接显示刚保存的正文,不会把自己刚存的当成「外部变化」。真冲突(外部编辑器改过)才走保护流程,默认只给一句话 +「比较修改」,点开才分栏对比,且只对差异行标注。

🔥 五、没有知识库的工作区:模型完全看不见

这是「隔离」的完整表述(我读 README 时的理解):没有知识库的工作区,kn_* 工具对该会话被移除、协议提示词渲染为空——模型看不到这个插件的存在;有库的工作区才可见,而且建库后当前会话立刻放开,不用等下一个会话。这意味着它不是「把工作区变成知识库工作区」的开关,而是「任何工作区都可以有一个库,有没有完全由目录里有没有 .dsh_knowledge/ 决定」。

🔥 六、桌面端流畅度:面板「看得见才干活」

(这一节适合写 GUI 插件的人看,官方 README 的自述,未逐条跑过验证):面板只在真的可见时工作——收起侧栏、被覆盖、零尺寸时不取数不渲染三维;切标签页即卸载;取数带请求序号 + AbortController,旧请求被取消,过期响应不会覆盖新数据;划词浮条先判断有没有选中文字,没有就一个请求都不发。

🔥 七、安全边界与已知取舍

写操作不越出库根(路径守卫,拒 .. 和绝对路径);写正文用内容指纹做乐观并发,外部改过就拒绝并回传实际指纹;graph.json 的加边幂等,自环与成环拒绝,删节点摘掉它的边;提案的落地/撤销只有界面能触发,Agent 无法自己落地;删除是彻底删除(无回收站无墓碑);v2 旧库不会被碰,只报 unsupported_format。

已知取舍(官方列的):v2 兼容代码还在源码里但不可达,属可清理项;一个工作区一个库,多库、跨工作区共享没做;kn_list_graph 一次返回整张图(默认上限 400 节点),大库没分页;三维视图是上游实现(构建期补丁注入四元数 trackball),标签密度只有固定策略。开发侧它也讲得很实诚:上游 src/vendor/upstream 整个目录逐字节冻结(77 个文件,sync-vendor --check 必须全过),类型检体现在约 85 条既有宽松,建议当棘轮用——只看你这次改动有没有引入新错误。

🔥 八、安装与适用判断

安装就是在 profile 的 cordis.patch.yml 里插入这个插件(@local/dsh-knowledgenet),零运行时依赖、安装时不执行脚本。

它适合谁:在 DSH 里做「学习」的人(用 AI 逐个啃概念、需要它按前置顺序讲、把学过的东西沉淀成可检索的图谱);写文档体系的人(节点即 md,天然可以喂给其他流程)。不适合谁:想要多库/跨工作区共享的;想要大库(千节点级)分页检索的;以及——没有 license 这件事没解决前,任何想商用/集成的。3 天前创建、2 星,它现在的价值更多是「一个把『学习依赖图』做进 Agent 插件的思路样本」,而不是一个可以直接抄进生产的东西。

(收尾:它最有意思的一刀是「身份与名称解耦 + Agent 提案、人落地」——前者让图谱重命名不烂尾,后者把 Agent 扩库的权力收回到人手里。思路比成熟度值钱。)

相关学习资料