dsh-study-ask: Follow-up questions via text selection in the main chat; independent right sidebar for inquiries without cluttering the conversation list.

前言

用 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 同时启用,会出现两个划词入口,文档建议二选一。

核心功能

划词提问与引文

  1. 在主对话里选中一段文字,浮层出现「提问」按钮并点击。
  2. 右侧栏出现「提问对话」,选中的内容已按 > 引用 格式写入输入框。
  3. 补充问题后发送;后续追问仍在同一条提问对话里进行。

选区识别范围是 [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 的可复现步骤:

  1. 打开一条用于学习的主对话,阅读到需要追问的段落。
  2. 选中该段文字 → 点击「提问」。
  3. 在右侧「提问对话」输入框中,在已有引文下方继续输入问题并发送。
  4. 需要换话题但仍留在同一主对话时,继续在右侧同一线程追问即可;不必为每个小问题占一条左栏会话。
  5. 若右侧栏被关掉,点「❓ 提问对话」重新打开同一提问会话。

适用场景与已知限制

适合:长时间在主对话里学一门主题、频繁对局部段落追问,又希望左栏会话列表保持「一条主学习线」清晰的用户。

限制(均来自 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 仓库为准:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye