前言¶
在 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