Question Bubbles:在思考流里把「没问出口的疑问」浮成气泡

前言

DeepSeek Harness(DSH)桌面端在 agent 执行过程中,模型往往会在 reasoning 里犹豫、自问,却很少把这些话写进正式对话。你只有事后翻思考记录,才可能发现它其实卡在某个拍板点上。常见做法是盯着日志或等任务结束再补一句——会打断当前步,也容易错过「刚卡住」的那一瞬间。

Question Bubbles(dsh-question-bubbles)面向这类场景:Host 订阅 agent/assistant-stream 的 reasoning-delta,从思考流里抽出疑问,用一小段客户端脚本画成气泡;你点气泡作答时走 steer,在下一个 step 边界并入会话,而不是中途插话。下面按定位、依赖、安装、用法与机制说明如何接入。

这是什么

dsh-question-bubbles 是 DSH 桌面端的一个 bundle 插件(维护者 3341284397-max,当前版本 0.3.0,许可证 MIT)。它解决的是:模型思考里的隐性疑问可见、可答,且尽量不破坏任务节奏。

要点(与 README 一致):

  • 不打断 —— 气泡旁路显示,不进入对话上下文。
  • 不落盘 —— 疑问只在内存里,重启 DSH 即清空(刻意设计:价值在于「被恰好看见」)。
  • 就地作答 —— 点气泡输入一行,经 steer 排队到下一轮。
  • 依赖鲸鱼挂件 —— 需 dsh-whale-widget 作定位;未安装时仅有右下角圆点,气泡无锚点。

插件分类为客户端侧能力,与 DSH「一切皆插件」的 bundle 形态一致;社区目录见 SkillHub 条目,源码在 GitHub。

核心功能

思考流订阅与展示

Host 侧处理实时思考流,客户端通过注入脚本把疑问渲染为气泡(默认浮在 Balance Whale Widget 的鲸鱼上方)。正文开始输出或调用工具时,尚未回答的条目会标为「已自行推进」(变暗,仍可补答)。

两种疑问捕获

  1. 提示词标记协议(默认 markers: true):向 system prompt 挂约 120 tokens 的约定,模型在思考里写 ⟦问⟧…⟦/问⟧ / ⟦答⟧…⟦/答⟧;带标记的气泡显示 ✦,自解后快速收起。
  2. 正则兜底:以 ?/? 结尾,或含犹豫词且不像复述用户原话;按语言过滤长度,跳过代码块与 URL 等,同义句合并,单步最多 6 条、每分钟 20 条。

多语种与主题

语言模式支持 auto(跟随当前思考语言)、all,或锁定 zh / en / ja / ko / ru。界面主题与 DSH 一致(深/浅/跟随系统)。面板文案随浏览器语言,不支持语言回落英文。

本地 HTTP 与作答路径

路由挂在 Host 回环上(拒绝跨站 Sec-Fetch-Site,有 Origin 时要求同源),例如:

  • GET /dsh-qb/client.js —— 客户端脚本
  • GET /dsh-qb/events —— SSE(hello / q / resolve / config / counters)
  • POST /dsh-qb/answer —— { id, text },经 sessionController.prompt(mode: 'steer') 注入

完整路由表见项目 README。

安装与启用

README 写明为纯本地 bundle,无构建步骤;没有 dsh plugin add github:… 一类命令,需手动放入 profile 并登记依赖。

  1. 将插件目录放到 desktop profile 的 node_modules 下,或用 junction/软链接指向源码目录:
<DSH_HOME>/profiles/desktop/node_modules/dsh-question-bubbles
  1. 编辑 <DSH_HOME>/profiles/desktop/package.json,在 bundles 与 dependencies 中登记:
{
  "dsh": { "profile": { "bundles": [ "...", "dsh-question-bubbles" ] } },
  "dependencies": { "dsh-question-bubbles": "link:<该目录的绝对路径>" }
}
  1. 重启 DSH(Host 仅在启动时读取 bundle);改客户端脚本后刷新页面即可热更新。

bundle 通过 package.json → dsh.bundle.patch → cordis.patch.yml 自我声明。安装前请自行审阅源码与 MIT 许可;插件以当前 DSH 进程权限运行。

前置依赖:DSH 桌面端本体,以及 dsh-whale-widget(气泡锚点与中键打开面板的入口)。

典型用法

面板与气泡交互

  • 中键点鲸鱼(或右下角 💭)打开面板:总开关、气泡数量上限(1–9)、语言模式、主题,以及出现 / 你答了 / 自己往下走三个计数器。
  • 点气泡 → 输入 → 「发过去」(steer)或「算了」;右键展开全文,右上角 × 可关闭。
  • 30 秒无人操作气泡会淡出;你已回答的会亮到下一轮结束。

持久配置写在 <DSH_HOME>/dsh-question-bubbles/config.json:

{ "enabled": true, "maxBubbles": 9, "langMode": "auto", "markers": true }

也可 POST /dsh-qb/config 更新 enabled / maxBubbles / langMode / markers。

验证渲染

GET /dsh-qb/demo?text=… 可塞一条假疑问,用于检查客户端渲染而不必等真实思考流。

Host 自测(不启动 DSH)

仓库提供 Node 测试,覆盖注入、SSE、/state、/answer、标记协议等:

node test/host.test.mjs

适用场景与注意

适合:你经常开着 DSH 桌面端跑 agent,且已装鲸鱼挂件;希望在模型「默默纠结」时轻量补一句拍板,又不想中断当前 step。

务必注意(README「已知限制」):

  • 正则兜底会漏报或误报;标记协议更好,但依赖模型遵守约定。
  • 答案只在下一 step 边界生效,回得太晚可能帮不上正在卡的那一步。
  • 模型不流式输出 reasoning 时不会有气泡。
  • 所有 agent 共用一条 SSE,气泡暂不区分来源会话。
  • 无鲸鱼挂件时体验退化为右下角圆点。

社区目录的星标数会变动;接入前以 GitHub 仓库与本地 package.json 版本为准。

结尾

Question Bubbles 把 DSH 思考流里的隐性疑问接到界面旁路:看见、点选、用 steer 排队注入,而不是把整条 reasoning 倒进对话。若你在做 Harness 周边或客户端插件,可对照其 SSE、steer 与标记协议实现。

  • 目录页:https://www.skillhub.cn/plugins/3341284397-max/dsh-question-bubbles
  • 源码:https://github.com/3341284397-max/dsh-question-bubbles
羽毛球分组比赛记分
小程序二维码

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

小夜