dsh-next-suggestion:DSH Web 输入框的下一句预测

前言

在 DeepSeek Harness(DSH)的 Web 端聊天时,助手回复后往往需要接一句上下文相关的续写。手动打字既费时又容易偏离语境。dsh-next-suggestion 插件在每轮助手回复结束后,在输入框上方给出 1–3 条候选句子,点选或用快捷键即可填入,不改变已有输入内容。

是什么

  • 名称:dsh-next-suggestion
  • 维护者:xiaoxiaomoyu
  • 分类:客户端
  • 简介:DSH Web 输入框「下一句」预测:每轮回复后给候选,点击 / Tab / → 填入。

核心功能

  • 每轮助手回复结束后触发;切换到空闲会话时也会补一次。
  • 只读当前会话的最近 12 条消息 + 会话开头那条任务描述。
  • 给 1–3 条完整句子,按可能性排序,语言与对话一致。
  • 接受方式:点击某一行、Tab、→;Esc 收起卡片。
  • 可收起为「只留最可能的一条」,也可关闭这一轮卡片。
  • ↻ 换一批(提高温度重问一次)。
  • 连续五次忽略后自动降频,改为每三轮试一次。
  • 失败静默:模型慢或挂了,只不显示卡片,不弹错。

安装与启用

需在 Web UI profile 下运行。从源码安装:

git clone https://github.com/xiaoxiaomoyu/dsh-next-suggestion.git
dsh plugin --profile web add "link:/绝对路径/dsh-next-suggestion"

安装后重启 Host,再刷新页面。卸载:

dsh plugin --profile web remove dsh-next-suggestion

若 dsh.profile.bundles 里残留条目,手动删除后重启。

使用

助手回完一轮后,输入框上方出现候选卡片:

  • 点某一行:整句填入输入框,光标在末尾,不自动发送。
  • Tab / →:仅在输入框为空且聚焦时,接受第一条。→ 仅在空输入框生效。
  • Esc:收起卡片。
  • ▾ / ▸:收起为最可能的一条,或重新展开;状态按会话记在 localStorage。
  • ↻:换一批,提高温度重问一次,多一次调用。
  • ×:关闭这一轮;切会话、刷新页面后不再出现,直到下一轮开始。

只有输入框为空、没有附件、没有排队消息、会话不在跑时才会出现。

设置

输入框工具栏右侧、发送按钮旁有一个滑杆图标,点开即为设置。设置保存在本机浏览器,改完立即生效,无需重启。

  • 启用开关、候选条数(1–3)、显示方式(卡片 / 内联 ghost)
  • 接受方式:Tab、→、Esc 各自开关
  • 触发时机:每轮 / 仅当助手最后一句是问句
  • 默认收起、是否显示条数角标
  • 降频:连续忽略几次后改为每几轮出现一次
  • 本会话不再提示
  • 高级:provider、model、上下文条数、每条字符数、超时、最大输出 token
  • 底部「恢复默认」:快捷键、行为、高级参数一起回到初始值

内联 ghost:候选以灰色文字出现在输入框里,只显示第一条,末尾带 Tab 提示。点击、Tab、→ 均可接受,Esc 关闭;ghost 出现时会暂时隐藏 placeholder,避免文字重叠。卡片模式行为不变。

配置文件(可选)

设置面板是本机偏好;profile 配置是默认值和服务端开关,两边都会生效:

- id: dsh-next-suggestion
  name: dsh-next-suggestion
  config:
    enabled: true          # 总开关
    count: 3               # 候选条数,1–3
    provider: deepseek-official
    model: deepseek-flash
    maxMessages: 12        # 取多少条对话
    messageChars: 1200     # 每条截断长度
    timeoutMs: 15000
    maxOutputTokens: 4000  # 只是封顶,写完就停
    debug: false           # 写 $DSH_HOME/dsh-next-suggestion/debug.log

保存即热生效,无需重启。

实现方式

  • 浏览器端:注册 conversation.input.dock(order: 10),监听 session.running,回合结束后等 250ms 再请求 Host。结果按会话在内存里缓存两分钟。开始打字、发送、切会话都会取消请求并清掉卡片。
  • Host 端:三条只监听回环地址的路由:
  • GET /plugins/dsh-next-suggestion/config:返回 { enabled, count, debug }
  • POST /plugins/dsh-next-suggestion/predict:body { sessionId } → { items: string[] }
  • POST /plugins/dsh-next-suggestion/debug:浏览器端诊断打点,仅 debug: true 时注册
  • predict 用 session.deriveMessages() 取最近 12 条 user/assistant 文本,助手消息保留开头 350 字和结尾 1200 字,最前面附上会话第一条用户消息,然后让模型输出 JSON 数组。解析容忍代码围栏、被截断的数组、按行列表;复读用户最近消息的候选会被丢弃,也不会把 ["..."] 这种序列化残渣显示出来。

隐私与成本

  • 只读当前会话的文本,不碰附件、文件、其他会话和工作区内容。
  • 这段对话会发给 provider/model 指定的服务,走你聊天用的同一个账号和额度。
  • 路由注册在 /api 鉴权之外,所以自己校验 Origin,非回环一律拒绝。
  • 每次预测是一次小请求。调试日志默认关闭,且只记事件名和条数,不记对话内容。

已知限制

  • 只有 Web 端,没有 TUI / Desktop 版本。
  • Tab 接受有范围:只在卡片可见、输入框聚焦时由捕获阶段拦截;其他时候 Tab 仍是焦点切换,没有全局快捷键。
  • 预测的是整句;已打了一半的字不会被补全,输入框非空时也不出卡片。
  • 内联 ghost 只显示第一条,不支持下方向键在候选间切换;它出现时会暂时隐藏 placeholder,依赖 DSH 的 data-composer-placeholder 属性。
  • 每轮一次模型调用;打开没有缓存的空闲会话再补一次;每次点 ↻ 再加一次。
  • 界面文案按 navigator.language 在中英文之间切换,没有接完整的 DSH locale 服务。

适用场景

  • 使用 DSH Web 端、已配置模型 provider(默认 deepseek-official/deepseek-flash)。
  • 需要在每轮对话后快速接续上下文相关的句子。
  • 需要避免重复打字,同时保留手动编辑的灵活性。

小结

dsh-next-suggestion 在 DSH Web 输入框提供每轮回复后的下一句候选,支持点击、Tab、→ 接受,收起、换一批、关闭等操作。配置项包括候选条数、触发时机、降频策略、高级参数等,可热生效。插件本身无运行时依赖,测试覆盖了正常预测、非法 Origin、关闭开关、复读过滤等场景。适合需要减少重复输入、提升对话连贯性的 DSH Web 用户。

  • 目录页:https://www.skillhub.cn/plugins/xiaoxiaomoyu/dsh-next-suggestion
  • GitHub:https://github.com/xiaoxiaomoyu/dsh-next-suggestion
羽毛球分组比赛记分
小程序二维码

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

Xiaoye