前言¶
用 DeepSeek Harness(DSH)做长文学习时,主对话里往往有一段正在跟进的脉络;若在同一个线程里随手追问细节,新问答会把前面的内容顶走,阅读和回溯都不方便。社区里已有划词追问类插件,但常见做法是每问一次就在左侧会话列表新建一个带「❓」的会话,问多了列表很快挤满。
dsh-study-ask(GitHub:P1gG0dG0d/dsh-study-ask)把「提问」收进原生右侧栏:与主对话分屏并排,提问线程不进入左侧列表,同一主对话下复用一条提问会话。下面介绍它解决什么问题、怎么用,以及安装时要注意什么。
这是什么¶
学习提问(Study Ask) 是维护者 P1gG0dG0d 发布的 纯客户端 DSH 插件:无宿主业务逻辑、无独立构建链,依赖 DSH 桌面版或 Web 上的原生右侧栏(@deepseek-ai/dsh-client-ui-sidebar-right)。README 写明适用 DSH 0.2.1-rc.3。
一句话定位:在主对话里选中文字并点「提问」,右侧打开专用「提问对话」;流式回答、Markdown、输入框、模型选择、停止与审批等行为与 DSH 本体一致,主对话不新增消息、不滚动、不打断。
与常见划词追问的差异¶
README 用表格对比了本插件与「每次提问新建左栏会话」的做法:
| 行为 | |
|---|---|
| 每个主对话 | 只有 一个 提问会话;第一次提问时创建,之后在同一线程里累积追问 |
| 左侧列表 | 提问会话 不显示(CSS display:none,数据仍保留) |
| 右侧栏 | 提问以原生对话形态展示 |
| 主对话 | 保持不动 |
若与 dsh-sidebar-qa 同时启用,会出现两个划词入口,文档建议二选一。
核心功能¶
划词提问与引文¶
- 在主对话里选中一段文字,浮层出现「提问」按钮并点击。
- 右侧栏出现「提问对话」,选中的内容已按
> 引用格式写入输入框。 - 补充问题后发送;后续追问仍在同一条提问对话里进行。
选区识别范围是 [data-slot="conversation.session"] 内的文字,并排除输入框与右侧栏,避免误触。
公式(KaTeX)引文¶
直接用 selection.toString() 在含 KaTeX 的页面上会得到重复、换行混乱的文本。插件从 DOM 克隆选区再处理:选区落在公式内部则整段以 $TeX$ 引用;选区跨过多个 .katex 节点时,用其 annotation(TeX 源码)替换后再取文本,公式只出现一次。
入口与复用¶
- 输入框左侧有「❓ 提问对话」按钮;当前主对话尚无提问会话时会自动创建。
- 关闭右侧栏 tab 不删数据;再次打开仍指向同一会话。
- 同一提问会话在右栏按
contentId去重,避免重复 tab。
会话 id 与持久化¶
提问会话 id 为确定性值 session-<uuidv5(主会话id)>,重启后遍历会话列表即可认回。另用 Cookie dsh_study_ask_map(按 host 隔离、不随端口变化)兜底——因桌面版宿主常用 --port 0 随机端口,localStorage 按 origin 含端口隔离,重启易失效。两条路径都失败时才新建提问会话。
安装与启用¶
资料中的安装示例针对 本地目录开发;装完后需 重启 DeepSeek Harness,以便宿主重新组合 profile。
# 本地目录(开发)
dsh plugin --profile desktop add "link:D:/Projects/PluginsCreation/dsh-study-ask"
卸载:
dsh plugin --profile desktop remove dsh-study-ask
插件在 npm 上包名为 dsh-study-ask,版本 0.1.0,许可证 MIT。Node 引擎要求:^22.19.0 || >=24.0.0。社区目录页:https://www.skillhub.cn/plugins/P1gG0dG0d/dsh-study-ask(独立站点,与 DeepSeek / 幻方无官方从属关系)。
安装前建议阅读仓库源码与许可证:客户端插件在 当前 DSH 进程权限 下运行,与主程序同域交互会话与 Cookie。
典型用法¶
按 README 的可复现步骤:
- 打开一条用于学习的主对话,阅读到需要追问的段落。
- 选中该段文字 → 点击「提问」。
- 在右侧「提问对话」输入框中,在已有引文下方继续输入问题并发送。
- 需要换话题但仍留在同一主对话时,继续在右侧同一线程追问即可;不必为每个小问题占一条左栏会话。
- 若右侧栏被关掉,点「❓ 提问对话」重新打开同一提问会话。
适用场景与已知限制¶
适合:长时间在主对话里学一门主题、频繁对局部段落追问,又希望左栏会话列表保持「一条主学习线」清晰的用户。
限制(均来自 README):
- 提问会话是真实 DSH 会话,仅被 CSS 隐藏;若
data-row-key等 DOM 约定变化,插件需同步适配(作者已在0.2.1-rc.3实测)。 - 工作区分组里「展开其余 N 个会话」的计数可能仍包含被隐藏的提问会话(只影响数字,不显示行)。
- 不提供「把回答回填主对话」或「学习笔记导出」。
- 与
dsh-sidebar-qa同时启用会出现两个划词入口。
实现结构(便于排查问题)¶
仓库主要文件:
dsh-study-ask/
├── package.json # dsh.bundle.patch + dsh.client(platform: web)
├── cordis.patch.yml # 插入 profile 的 bundle 栈
├── lib/index.js # 宿主半区:空插件(服务 client 半区)
└── lib/client.js # 浏览器半区:资源协议 / tab / 内嵌对话 / 选区浮层 / 隐藏列表
右侧通过 dsh-resource://studyask/session/<id> 打开内嵌 conversation.content(variant: embedded),与官方 subagent 侧栏同构;引文经 conversation.input.shell(questionId).actions.setDraft() 写入。
结尾¶
dsh-study-ask 把学习场景下的划词追问从「左栏不断长出新会话」改成「右侧一条可复用的提问对话」,主对话上下文不被打断。需要细节与更新时,以 GitHub 仓库为准: