DeepSeek Harness 插件:dsh-next-suggestion

前言

在 DeepSeek Harness(DSH)中与智能体对话时,经常会遇到“下一句该说什么”的犹豫——尤其是长对话或需要连续追问的场景。如果能在输入框里预览“我接下来最可能说的那句话”,就能更快地敲出回复。dsh-next-suggestion 就是为此设计的插件:它通过模型预测你的下一句,并在输入框中以灰色幽灵文本(ghost text)展示,按 Tab 即可填入草稿。

插件定位

  • 名称:dsh-next-suggestion
  • 维护者:msun1999
  • 分类:客户端
  • 简介:在 DeepSeek Harness 的对话输入框中,以灰色文字预测你下一句最可能的回复,按 Tab 一键填入草稿。
  • 亮点:理解上下文(最近 5 条消息)、零打扰(仅草稿为空时显示)、纯 JS 无需构建。

核心功能

  • 上下文感知预测:读取当前会话最近 5 条消息,根据对话语言和口吻生成建议。
  • 幽灵文本展示:回复结束后,输入框内浮现灰色文字,盖住 placeholder。
  • 一键接受:按 Tab 键或点击灰色文字,建议变为可编辑草稿,支持 Ctrl+Z 撤销。
  • 自动隐藏:草稿有内容时自动隐藏,不弹窗、不抢焦点。
  • 快:Host 侧订阅 turn/end 事件,回复结束后立即开始预测,通常 2–3 秒出现。
  • 省钱:按“会话 + 日志序号”缓存,每轮最多生成一次;单次输出上限 700 tokens。
  • 纯 JS:Host 半为 ESM 模块,Client 半为浏览器直接加载的单文件。

安装与启用

以下安装方式来自插件 README。

方式一:本地目录

git clone https://github.com/msun1999/dsh-next-suggestion.git

在 DeepSeek Harness 中,将该目录作为 bundle 安装(通过 plugin_manager 的 install_bundle,target 指向该目录的绝对路径)。安装后,插件会以 include:next-suggestion 出现在 profile 中,重启 GUI 后依然生效。

方式二:直接从 GitHub 安装

在 profile 目录下执行:

pnpm add github:msun1999/dsh-next-suggestion

方式三:手动接入 profile

  1. 将包加入 profile 的依赖:pnpm add <路径或包名>。
  2. 在 profile 的 cordis.patch.yml 中添加:
- insert:
    - id: next-suggestion
      name: 'dsh-next-suggestion'
  1. 刷新 Web UI 页面。

要求:Web 形态的 GUI(dsh.client.platform = "web")与内置的 @deepseek-ai/dsh-client-ui-conversation(对话界面)插件。

典型用法

  • 什么都不做:灰色建议在输入框内显示,随时可接受。
  • 按 Tab:接受建议,写入草稿(可 Ctrl+Z 撤销)。
  • 点击灰色文字:同样接受建议。
  • 开始打字:灰色建议消失,正常输入。
  • 发送或切换会话:该位置的建议被消费,不再重复出现。

工作原理

一轮回复结束后,流程如下:

  1. Host 侧订阅 session/event.turn/end 事件。
  2. 根据最近 5 条消息与指令,使用当前会话的模型生成预测(llm.stream,reasoningEffort=low),结果按 (sessionId, seq) 缓存。
  3. Client 每 800ms 轮询 GET /dsh-next-suggestion/get?sessionId=…。
  4. 在 conversation.input.overlay 插槽中绘制 ghost text,盖住 placeholder。
  5. 按 Tab 时调用 inputActions.captureInsertion() + insertText(text, span),发送 POST /consume 标记已接受。

Host 路由

  • GET /dsh-next-suggestion/get?sessionId=:返回 { text }。&refresh=1 丢弃缓存重新生成;&debug=1 只读返回诊断字段(不触发生成)。
  • POST /dsh-next-suggestion/consume:接收 { sessionId },标记该位置的建议已被接受/丢弃。

可调参数

index.js

常量 默认值 含义
KEEP_MESSAGES 5 喂给模型的最近消息条数
MAX_MESSAGE_CHARS 300 单条消息截断(助手侧)
MAX_USER_CHARS 400 单条消息截断(用户侧)
MAX_TRANSCRIPT_CHARS 3200 整段对话总长度上限
MAX_SUGGESTION_CHARS 120 建议句最大长度
CACHE_LIMIT 200 缓存会话数上限
TIMEOUT_MS 25000 单次生成超时
STABLE_MS 1200 没有状态事件时的静默判定阈值
maxTokens / reasoningEffort 700 / 'low' 生成预算与思考强度

注意:maxTokens 不要压太低,否则可能出现“思考写完但正文为空”的空建议。

client.js

常量 默认值 含义
POLL_MS 800 轮询建议的间隔
PROBE_MS 300 测量输入框位置与空状态的间隔

已知限制

  • 只在草稿为空时提示;已有内容不显示。
  • 同一轮里反复改草稿不会重算,需等下一轮回复结束才更新。
  • 依赖输入框实现为 contenteditable="true",且 placeholder 写在属性上;若对话界面大改,需重新校准 pickEditor() 与背景取色。
  • 预测走当前会话所用的模型;若该模型思考很长,出现时间会相应变慢。
  • 建议可能不准——它只是“一句话级”的猜测,接受前请自己过一眼。

开发与调试

修改 index.js / client.js 后,在 profile 中关闭再打开 include:next-suggestion 即可重载(ESM 缓存会被重置、Client bundle 版本号会更新);若仍不生效,刷新浏览器页面。

诊断接口示例:

curl "http://127.0.0.1:<gui-port>/dsh-next-suggestion/get?sessionId=session-xxxx&debug=1"

返回字段包括:sessionFound / seq / tailRole / ready / busy / inflight / cachedSeq / lastMs / lastRaw / lastError / target / text,可用于确认会话命中、生成状态、耗时与原始输出。

适用场景与注意

  • 适合在 DSH Web GUI 中使用,配合 dsh.client.platform = "web" 与 @deepseek-ai/dsh-client-ui-conversation 插件。
  • 插件以 DSH 进程的权限运行,安装前建议阅读源码与许可证(MIT)。
  • 建议接受前自行核对,确保建议符合你的真实意图。

小结

dsh-next-suggestion 为 DeepSeek Harness 的对话界面提供了一键“下一句预测”能力,通过上下文感知的幽灵文本与 Tab 快捷键,减少打字犹豫、提升交互效率。如需了解更多细节或查看源码,可访问项目目录页或 GitHub 仓库。

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

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

小夜