前言¶
在 DeepSeek Harness(DSH)里和模型对话时,本地电子书往往只能另开窗口或外部阅读器。上下文里若要把整本书塞进去,既费 token,也会把会话搅乱。常见做法是路径交给 Agent 做摘要或问答,但「连续读正文」仍缺一个和对话同屏、又不进模型的入口。
下面介绍社区插件 dsh-read(维护者 mic1on):它在 DSH 里增加 /read 命令,把磁盘上的 EPUB、MOBI、纯文本以对话卡片的形式流式展示,像一条 AI 回复一样逐字出现,并带调速、暂停、目录与断点续读。正文不进入模型上下文,命令生命周期也不包进普通对话轮次。
这是什么¶
dsh-read 是 DSH 的客户端插件(platform: web),面向在浏览器 GUI 里阅读本地书稿的场景。核心价值可以概括为两点:阅读发生在会话 transcript 内的真实 Chat 节点里,而不是侧边栏外挂;/read 零 token——书籍文本不会进入模型上下文。
插件当前版本见仓库 package.json(资料中为 0.2.1),许可证 MIT,源码:https://github.com/mic1on/dsh-read。社区目录页:https://www.skillhub.cn/plugins/mic1on/dsh-read(独立社区站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
对话内阅读卡片¶
输入 /read 并指定书籍后,阅读区以固定高度的卡片占据对话视口,段落在内滚动,避免正文变长时整页 reflow。文字按字符流式露出,并带活动光标;支持 慢 / 中 / 快(约 10 / 20 / 60 字/秒)及 10–160 字/秒 的自定义滑条(选自定义后才出现)。可暂停、上一段 / 下一段、重启,以及章节下拉;速度选择会被记住。
指针移入卡片或控件获焦时,顶栏、章节行与控制条会收起,仅留细进度线;需要时再滑出。
格式与解析¶
| 格式 | 读取方式 | 说明 |
|---|---|---|
.epub |
OCF/ZIP → OPF manifest 与 spine → XHTML | 跳过非线性 spine;不展开样式表与字体;插图仅 manifest 声明者 |
| 插图 | 作为独立项进入阅读流 | 按书内位置出现,播放会停留而非直接「打过去」 |
解压版 .epub |
磁盘上直接读 OCF 包 | 识别 META-INF/container.xml,当作一本书而非普通目录 |
.mobi |
PalmDB → PalmDOC LZ77 | 支持未压缩与 PalmDOC 压缩 |
.azw3 / .azw |
同 .mobi(MOBI-7 文本部分) |
纯 KF8 会报错并提示转换 |
.txt、.md 等 |
编码探测 | UTF-8/UTF-16、GB18030/GBK、Big5、Shift-JIS 等 |
伴读与笔记¶
划选段落可出现 问 AI 或 记一笔。问 AI 把书名、段落与引文写入输入框,由你自行补充后发送;记一笔 只本地记录,不占用会话。笔记 按书存放在 $DSH_HOME/dsh-read/notes.json(通常为 ~/.dsh/dsh-read/notes.json),避免在 transcript 里堆满碎片。
进度与书库¶
卡片内显示实时百分比;阅读中心 里每本书也有相同进度,按书保存,重开可从上次段落续读。向上滚动可加载更早段落,一直能回到全书开头。
自然语言找书¶
Agent 可调用 book_search 按书名在书库根目录下检索,你再配合 /read 打开路径。
交互细节¶
单击卡片聚焦后,空格 在该卡片上切换播放/暂停(绑定在卡片上,避免在输入框里误触全局空格)。插件会读取 DSH 对话滚动容器已有的 CSS 变量,以适配窗口缩放与 composer 高度变化。
安装与启用¶
dsh plugin add 会转发给 pnpm,可直接用 GitHub 等 specifier,无需先发布到 npm。README 给出的命令如下(请使用你实际运行的 profile,浏览器 GUI 一般为 web):
# 直接从 GitHub 安装
dsh plugin --profile web add github:mic1on/dsh-read
# 固定到某个 tag,便于可复现安装
dsh plugin --profile web add github:mic1on/dsh-read#v0.1.0
# 本地目录(开发或自审源码时)
dsh plugin --profile web add -w link:/path/to/dsh-read
安装后需要重启 DSH。客户端 bundle 在启动时组装,仅刷新页面不够。仓库无单独 build 步骤,git 源安装即可用。运行环境要求 Node >= 22.13(见 package.json 的 engines)。
插件以当前 DSH 进程权限访问本地文件;安装前请自行审阅源码与 MIT 许可证,并确认书库路径在你可接受的访问范围内。
典型用法¶
阅读中心(设置 → 阅读中心)¶
在侧栏底部打开 设置,选择图标为书本的 阅读中心(不在「对话 / 轨迹」旁占 Tab,以免会话顶栏过于拥挤)。
- 目录栏显示插件记住的书库根;每次打开页面会回填。输入绝对路径后点 加载,该目录成为主书库根并持久化。
- 子目录优先列出,便于逐级进入藏书位置。
- 每本书显示格式、大小与进度(如
已读 5.9% · 第 124 / 2083 段,或 未开始)。 - 开始阅读 / 继续阅读 会在当前选中的会话里执行与
/read相同的逻辑,并关闭设置页,直接进入卡片续读。 - 设置进度 可在书下拖动滑块任意定位(从未打开的书会先解析再显示滑块);重置进度 清除该书位置。
说明:空格 暂停/继续 — 先点击卡片聚焦,再用空格切换播放。
/read 命令¶
阅读中心只是命令的便捷入口,行为一致。
/read ~/Books/三体.epub
/read /Volumes/library/Dune.mobi
/read 三体
第三条为关键词:在 library roots 下按文件名匹配。默认根目录包括 ~/Books、~/Documents/Books、~/Downloads、~/Documents(仅存在的目录会生效)。可在配置中扩展:
// $DSH_HOME/dsh-read/config.json (常见路径 ~/.dsh/dsh-read/config.json)
{ "libraryRoots": ["/Volumes/books", "~/Calibre Library"] }
也可让 Agent 找书,例如:
帮我找一下《三体》
→book_search({ "query": "三体" })→ 返回路径 → 再/read该路径
适用场景与注意¶
适合:已在 DSH Web 客户端里长时间对话、希望同屏读本地 EPUB/MOBI/txt 且不想把正文灌进上下文的用户;需要断点续读、调速、目录跳转和划词提问 / 本地笔记的读者。
注意:
- 插件分类为客户端,依赖
@deepseek-ai/dsh-client-ui-conversation等 peer 依赖,面向 web profile。 - 阅读与找书都访问本机路径,权限等于运行 DSH 的用户;书库根与笔记 JSON 写在
$DSH_HOME/dsh-read/下。 - 部分格式有 deliberate 限制(如纯 KF8),会以可操作的错误提示而非静默失败;具体以 README「Supported formats」为准。
- 社区目录与 GitHub 星标等元数据会变动;功能与命令以仓库 README 为准。
结尾¶
dsh-read 把本地电子书放进 DSH 对话流:流式卡片、零 token、多格式与阅读中心统一管理,适合「在 Harness 里伴读」而不是把书塞进模型上下文。安装使用 README 中的 dsh plugin --profile web add github:mic1on/dsh-read,重启后即可 /read 或从 阅读中心 打开。