DeepSeek Harness (DSH) 的插件生态允许开发者扩展模型推理能力。对于阅读任务,最大的痛点在于上下文窗口限制:把整本书丢进主会话会迅速消耗 Token。dsh-deep-reading 解决这个问题:它通过拆分章节、单章子代理处理原文、主会话仅接收短结果的方式,实现 Token 效率优先的读书流程。
插件核心价值在于将「读一本书」变成一件可累积、可续读、可导出的事。它维护一份带定位的章节记忆,允许用户在不重读原文的情况下切换视角;同时支持逐字导出,确保导出的笔记与原文完全一致。
核心功能¶
导入与拆章¶
插件支持导入多种格式并自动拆章:
- 格式支持:EPUB、单个 Markdown 文件、包含多个章节的 Markdown 目录、TXT、PDF。
- 转换逻辑:TXT 和 PDF 会先通过 lib/convert.js 转换为 Markdown。转换后的全文保留在 books/<ID>/source.md 中。
- 切章规则:Markdown 按 # 一级标题切分,标题前内容算「前言」;EPUB 按书自身的 spine 结构切分。
- 段落编号:导入时会给每章正文添加 [1] [2] [3] 段落号,用于后续定位。
- 幂等性:源文件未变再导入会返回 skipped:true。
单章精读与子代理¶
- 原文隔离:用户发起精读指令后,主会话会派生一个
reading_chapter子代理。子代理带着本章原文和阅读目的独立工作,返回的讲解和状态落盘,但原文不会进入主会话。 - 断点续读:超长章节(默认 12000 字节)会自动分节。中途断开下次可从断点续读;读完全章后状态由
partial变为complete。
章节记忆与复用¶
- 带定位的记忆:每条 AI 解释必须带有
[n]段落定位,写入memory/NNN.md。记忆绑定源文件哈希,源文件变动会导致旧记忆过期。 - 记忆不可回改:标记为
complete的记忆一旦写入,不可修改。若后续理解改变,需在后续章节的记忆中追加修正。 - 已读复用:
dr_status会检查记忆是否满足complete、哈希一致、协议版本一致三个条件。若满足,标记为reusable,后续直接基于记忆讲解,不重读原文。
工具与导出¶
插件提供以下核心工具:
- dr_import:导入并拆章。
- dr_read:只读模式,支持 index、range、locate、find 四种定位原文的方式。
- dr_write:写入记忆、讲解、用户笔记等。
- dr_status:查看每章状态与 reusable 判定。
- dr_usage:记录 Token 消耗,支持 report 模式汇总。
- dr_export_epub:将 lecture/*.md 逐字拼接成 EPUB3。
安装与启用¶
安装插件需要使用官方提供的命令,直接指定本地目录路径:
dsh plugin --profile <profile> add <本目录路径>
安装完成后,桌面版必须重启 DSH 应用才会加载插件。
典型用法¶
以下是一个典型的阅读流程:
- 导入书籍:
导入一本书并指定 ID,插件会自动拆分章节并建立索引。 - 精读单章:
对话中发起精读指令,主会话生成子代理处理本章,原文不进入主对话。 - 继续阅读:
在新会话中直接说「继续读书」,插件会从第一个未完成或过期的章节开始。 - 切换视角:
对已读完的章节,要求「从人物角度再讲一遍」,插件会复用记忆,不重读原文。 - 导出:
使用dr_export_epub生成逐字收录的电子书。
注意事项¶
- 扫描件限制:没有文字层的 PDF 扫描件会被拒绝导入。
- PDF 依赖:PDF 转换依赖特定的 CMap 表和
pdfjs-dist构建,若配置不当会导致中文静默抽空。 - 数据结构:
complete的记忆不可回改,需通过后续章节追加修正。 - 权限:插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
书库配置¶
默认书库路径为 $DSH_HOME/deep-reading/books。若需共享书库或更改路径,可在 profile 的 cordis.patch.yml 中修改 booksRoot 配置。