前言¶
在 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¶
- 将包加入 profile 的依赖:
pnpm add <路径或包名>。 - 在 profile 的
cordis.patch.yml中添加:
- insert:
- id: next-suggestion
name: 'dsh-next-suggestion'
- 刷新 Web UI 页面。
要求:Web 形态的 GUI(
dsh.client.platform = "web")与内置的@deepseek-ai/dsh-client-ui-conversation(对话界面)插件。
典型用法¶
- 什么都不做:灰色建议在输入框内显示,随时可接受。
- 按 Tab:接受建议,写入草稿(可 Ctrl+Z 撤销)。
- 点击灰色文字:同样接受建议。
- 开始打字:灰色建议消失,正常输入。
- 发送或切换会话:该位置的建议被消费,不再重复出现。
工作原理¶
一轮回复结束后,流程如下:
- Host 侧订阅
session/event.turn/end事件。 - 根据最近 5 条消息与指令,使用当前会话的模型生成预测(
llm.stream,reasoningEffort=low),结果按(sessionId, seq)缓存。 - Client 每 800ms 轮询
GET /dsh-next-suggestion/get?sessionId=…。 - 在
conversation.input.overlay插槽中绘制 ghost text,盖住 placeholder。 - 按 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