dsh-study-mode
学习模式(study-mode):把知识学进主题知识库,问的时候直接从库里查 —— 查到了标出处,查不到标「未验证」。
DeepSeek Harness (DSH) 插件 · agent 预设 + 侧边栏知识库面板
dsh-plugin·dsh-bundle·agent-preset·study-mode·knowledge-base·learning
一个包给你两样东西:
| agent 预设「学习模式」 | 新建会话时选它。回答先查库 → 查不到用自己的知识(标「未验证」)→ 必须查证才联网(标日期) |
| 侧边栏「学习知识库」面板 | 书本图标:按主题浏览、搜索、互链、归档 / 恢复 / 删除 / 手动新增 / AI 校验补充 |
它跟别的知识库插件差在哪
不是一个更大的功能清单,是三条取舍:
查不到就标「未验证」,不装作知道。 库里没有 → 回答里明写「库里没有独立的 X 条目」,再给模型知识并标
[模型知识·未验证], 同时提议补一条。宁可说没有,也不编一个像样的答案。每条卡片都带出处。 来源是结构化的(文件 / 网页 / 用户口述 + 页码定位),卡片和回答里都能看到 「这句是从哪来的」。数字、参数、命令跟原文对不上时,看卡片原文,不看模型的转述。
卡片之间能互链。 正文里写
[[另一张卡的标题]]就建成一条链接;详情里能看到「链接(它连着谁)」 和「被引用(谁连着它)」。知识是网,不是一堆孤岛 —— 这条是本插件跟 纯检索类插件最明显的差别。
一条真实的命中长什么样
问「间隙锁是什么」,库里命中的是这条(下面是从真实库里跑出来的原样结果):
{
"title": "间隙锁(Gap Lock)",
"topic": "mysql",
"score": 72.34,
"body": "锁的是索引记录之间的空隙,不是记录本身。\n- **间隙锁**罩住首记录前、末记录后的范围,阻止其他事务在其中插入。",
"source": { "type": "file", "ref": "课件 06. 专题六:事务和锁(重点).pdf", "locator": "p.16-18" },
"verified": true
}
回答里对应的是:
间隙锁
- 锁的是索引记录之间的空隙,不是记录本身。 [主题:间隙锁]
- 罩住首记录前、末记录后的范围,阻止其他事务在其中插入。
出处(文件 + 页码)在卡片上,展开那张卡就能看到原文位置。
性能(338 张卡片的真实库实测)
| 操作 | 耗时 |
|---|---|
| 冷启动(读盘 + 建索引) | 7.8 ms |
| 面板列全库条目 | 1.2 ms |
| 单次检索(BM25,338 条) | 13.7 ms |
| 算一张卡的正向 + 全库反向链接 | 2.7 ms |
检索是纯本地计算,不调模型、不联网、不上传任何东西。 模型那一次往返才贵(见下面的「怎么问最省」)。
安装
DSH 的「插件」页 →「添加插件」→「安装第三方插件」:
| 方式 | 填什么 | 注意 |
|---|---|---|
| npm 包名 | dsh-study-mode |
国内可在「安装源」选 npmmirror 镜像 |
| Gitee 仓库 | git+https://gitee.com/waspqj/dsh-study-mode.git |
必须带 git+ 前缀(裸地址会被当成 tarball,拉回 HTML 页面导致安装失败) |
| GitHub 仓库 | git+https://github.com/waspqj/dsh-study-mode.git |
宿主认得 github.com,直接可用;同一个发布源,代码与 Gitee 一致 |
| tarball | https://…/dsh-study-mode-0.3.24.tgz |
或本地绝对路径 |
| 本地目录 | C:\path\to\dsh-study-mode |
开发者用 |
装完重启 DSH(bundle 是启动时装配的)。「安装源」可选:默认 / npm 官方源 / 中国大陆镜像 / 自定义地址。
⚠️ 不要和开发副本同时装:两个包插的是同一行 id,后装的会顶掉先装的。
装完的 4 个检查点
- 「插件」页能看到
dsh-study-mode,状态已启用 - 新建会话时,预设列表里有「学习模式」
- 侧边栏出现书本图标
- 点开面板:左边主题列表、右边条目区、顶部搜索框都在
怎么用(4 步)
- 新建会话时选「学习模式」预设,然后正常提问就行 —— 模型会自己去库里查。
- 要入库就说「把这条记下来」 —— 卡片先预览给你看,点「确认写入 N 条」整批落盘;展开其中一张卡片还能单独确认那一条(逐张审批,写完的会标「已写入」,剩下的继续等你点头)。
- 库里缺东西,模型会提议补 —— 对话下方出现一条醒目的提议条,可以勾掉不想补的、改补到哪个主题,点「同意,出卡片预览」直接出预览卡片,再点「确认写入」入库。
- 侧边栏书本图标进知识库面板:左边选主题,右边看条目,顶部搜索。
回答里的三种标记
| 标记 | 含义 |
|---|---|
[主题:名称] |
命中知识库(有出处,可查原文) |
[模型知识·未验证] |
库里没有,用了模型自己的知识 |
[网络:日期] |
联网查证过 |
面板里能做的事
- 按主题浏览、全库搜索、归档 / 恢复 / 删除 / 手动新增
- 单条核实:每张未核实的卡片上都有「核实」,点第一次只是「上膛」(变成「确认核实?」),再点一次才真的标为已核实 —— 核实是"我确认这条是对的"的声明,不能手一滑就生效;批量核实同理,也要二次确认
- 点任意卡片:完整正文、标签、来源、版本
- 互链:卡片详情底部有「链接」和「被引用」两段;正文里的
[[某某]]是可点的,点开就是那张卡;也能手动挂一条链接(输入目标卡片的标题回车) - 卡片上的「AI 校验补充」:让模型对着这一条补内容或纠错
- 面板顶部可以改插件自己的模型(校验 / 检索重排用它)
使用建议
怎么问最省
学习模式比普通模式贵,贵在多出来的那次检索往返(检索本身很便宜,一个问题几百 token),不在检索本身。实测:每次工具往返约 1.5-2 万 token(整段上下文重发 + 一次思考),所以省钱的杠杆是「少一次往返」,不是「少读几张卡」。参考:一个问题 3 次往返约 6-7 万 token,2 次约 4-5 万。
- 直接问具体问题最省:「间隙锁是什么」—— 一次检索,一两张卡。
- 别先说「查一下知识库」再问一遍。模型本来就会查,多这一句只会多一次往返(一两万 token)。
- 一次问清。多个方向用「、」并列:「STL、智能指针、RAII 的相关知识点」—— 模型会按方向分别召回再合池,比你自己拆成几次问更准、也更省。
- 要条目全集才说「有哪些 / 清单 / 常考点汇总」(这时会列全,卡片会很多); 想看内容就别这么说,说「讲讲 A 和 B」。
- 想更省就换非思考模型:这类「查库 + 汇总」的活不需要深度推理,67k 里大头是思考 token; 用便宜的非思考模型能省掉这一块(插件自己的校验 / 重排调用可以在面板顶部单独固定模型)。
怎么问更准
- 具体问题不要限定领域:「间隙锁是什么」直接问。领域得先猜,猜错反而会把答案过滤掉 (问「某领域有哪些」或点名多个方向时,才会按领域收窄)。
- 范围性问题用领域:「C++ 有哪些」「MySQL 8.0 的常考点」。
- 以卡片原文为准:回答是模型照着卡片重写的梳理,卡片下方是原文 —— 数字、参数、术语有出入时看卡片。
- ⚠未核实 的条目说明这条还没核过:点卡片上的「AI 校验补充」可以让模型对着核对。
- 库里没有就说没有:模型会明说「库里没有独立的 X 条目」,然后给你模型知识(标未验证)并提议补一条。
怎么让库越用越值钱
- 同一个问题在 10 分钟内重复问,检索会走缓存,不重复烧钱。
- 越常问的主题,越要把结论沉淀成条目(「把这条记下来」)。
- 条目按主题分(面试 / mysql / …),主题本身就是它的领域; 没标领域的条目也能按主题整体检索到。
- 卡片之间用
[[标题]]连起来 —— 一张被反复引用的卡(比如「间隙锁」)会出现在很多别的卡的 「被引用」里,这比单看标签更能看出哪些知识是枢纽。
知识库存哪
~/.dsh/learn/
├── settings.json # 默认主题
└── topics/<主题>/kb.jsonl
每台机器一份,换机器不带走。想改位置设环境变量 DSH_LEARN_ROOT;想备份就拷这个目录。
条目是 JSONL,一行一条,方便 grep / git 管理 / 自己写脚本消费。
不做什么(边界)
| 不做 | 为什么 |
|---|---|
| 不在后台偷偷抓你的文件 | 素材只从你明确指名的来源来(「把这份课件记下来」),不主动翻工作区 |
| 不联网抓取 | 要联网只在你点名「查证 / 最新 / 版本号」时,且答案里带 [网络:日期] |
| 不上传任何内容 | 库是本地文件;检索是本地计算 |
| 不做向量库 / 不装 Python 模型 | 检索是纯 BM25 文字匹配 + 模型重排,零外部依赖,装上就能用 |
| 不替你决定「这条对不对」 | 「已核实」只有你点过才算(点一次上膛,再点一次才生效) |
和别的插件共处
- 只写自己的目录(
~/.dsh/learn),不依赖、也不冲突任何其它记忆 / 知识库插件。 - 不改宿主行为:agent 预设只在你主动选「学习模式」的会话里生效; 侧边栏那个面板只是查看器,不会替你做检索、入库、联网这些事。
- 名字撞车说明白:唯一发布源是 npm 上的
dsh-study-mode,源码仓库是 GitHub 和 Gitee(同一份代码、同一批 tag)。 其它同名 / 分叉的仓库不是发布源,别从那儿装。
自定义
编辑 cordis.patch.yml 里 preset-study → config.plugins → persona → config.prefix:
那是 agent 的人设与检索协议(中文,Markdown)。改完重启 DSH,改坏了用 npm run check 体检。
开发
npm install # 无外部依赖
npm test # 检索 / 写入 / 接口 / 浏览器半侧 / 互链 的自测
npm run check # 接线自检:exports 入口、裸包名约束、预设 id、版本号一致
包带着 test/ 和 scripts/,装完就能直接跑这两个命令自检。
许可
MIT,见 LICENSE。
No comments yet. Be the first to write one.