前言¶
在 DeepSeek Harness(DSH)里和智能体多轮对话时,助手回复结束后,你往往还要想「下一句怎么问」。有的产品会在空输入框里用浅色文字提前猜你可能要发的内容,按 Tab 采纳、Esc 关掉。DSH 本身不自带这一套;社区插件 dsh-composer-prediction(维护者 Amir-Bazylkhanov)把类似 ChatGPT Composer 的 composer predictions 接到 Harness 上:每次助手回合结束,用相对便宜的聊天模型推断你下一条消息,画在空输入框的幽灵文本里。
这是什么¶
dsh-composer-prediction 是 DSH 的客户端类插件(npm 包名同仓库名)。它在每次 assistant 回合从 running: true 变为 false 之后,在配置好的延迟后请求预测;仅在输入框为空且你没有在打字时展示建议。分类上属于 SkillHub 目录里的「客户端」插件;仓库在 GitHub 上 MIT 许可,当前资料中的版本为 0.7.7,要求 DSH 引擎 >=0.2.0-rc.2 <0.3.0-0。
核心功能¶
下面按 README 中的行为表归纳,便于对照使用。
展示与快捷键¶
- 预测以幽灵文本叠在空 composer 上;overlay 会测量真实的
[data-composer-input]并克隆字体度量,换行和高度跟原生输入框一致。 - Tab:整段建议写入草稿,不会自动发送。
- Esc:撤回本次建议,且该回合不再重复请求。
- 直接开始打字、或附加文件:建议隐藏;清空草稿后,同一回合可再次显示。
- 无「加载中」占位:就绪后出现幽灵文本;失败或空结果会在输入区显示原因(如
no prediction: no-model-route),直到你打字、Esc、切会话或关功能。
何时请求、何时不请求¶
| 情况 | 结果 |
|---|---|
| 助手回合结束 | 在 delayMs 静默后请求预测 |
| 输入框非空或正在输入 | 不请求、不展示 |
IME 组字中(data-composer-composing) |
本回合不请求并隐藏,组字结束后再说 |
| 打开已有助手回复的会话 | 对最新回合预测一次,按会话+回合去重 |
| 切走再切回会话 | 最多缓存 40 个会话,立即恢复缓存,不重复请求 |
| 切会话且需要新预测 | 等待聊天 store 切换(节点列表变化,上限 400 ms),避免带上上一会话 transcript |
| 关功能再开 | 清掉该会话的 offer 与「已问过」标记,立即再预测 |
| 采纳、Dismiss、新回合、关功能 | 丢弃 offer,取消进行中的请求 |
| 迟到或旧回合的响应 | 丢弃,不能覆盖或复活更新的 offer |
模型与推理成本¶
默认走 Harness 自带的 ctx.llm,与当前会话同一路由和凭据(例如订阅路由 deepseek-account、Kimi 等可无需单独 API Key)。provider / model 留空时使用部署默认(ctx.agentDefaultModel,如 deepseek-flash)。推理强度固定为模型 advertised 的最便宜一档(model.reasoning.efforts[0]),避免为「猜下一句」花思考预算;输出默认上限 maxTokens 64。仅当组合里没有 ctx.llm 时才会走 baseUrl + apiKey 的直连 HTTP(正常 DSH 安装一般不经过这条路径)。
设置入口¶
插件通过 settings.section 贡献 Settings → Predictions(内置 Plugins 页为只读,开关和细项在这里)。总开关与 composer-predict.json 里的 enabled 同步。
安装与启用¶
从 npm 安装¶
dsh plugin --profile <your-profile> add dsh-composer-prediction
包声明了 dsh.bundle,dsh 会把包链入 profile 并追加到 dsh.profile.bundles。安装后需重启应用(仅刷新页面只重载浏览器侧)。
不启动完整应用也可检查层是否 compose 成功:
dsh --profile <your-profile> --dump-config
应能看到 # == dsh-composer-prediction 层和 composer-predict 行。
卸载:
dsh plugin --profile <your-profile> remove dsh-composer-prediction
从本地目录安装¶
dsh plugin --profile <your-profile> add ./dsh-composer-prediction --config.auto-install-peers=false
Discover 市场索引¶
在 Plugins → Discover 开启 Custom plugin markets,添加索引源:
https://raw.githubusercontent.com/Amir-Bazylkhanov/dsh-composer-prediction/main/market/index.json
发布后可于仓库内用 npm run market 重新生成 market/index.json。
配置¶
配置写在 $DSH_HOME/composer-predict.json,并由插件 host 半侧合并、原子写入;同时可在 Settings 页面编辑。
| 键 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
provider |
"" |
空则用部署默认路由 |
model |
"" |
空则用部署默认模型 |
maxTokens |
64 |
预测输出 token 上限 |
temperature |
0.8 |
采样温度(仅直连 HTTP) |
delayMs |
0 |
回合结束后等待多久再预测 |
maxSuggestionChars |
200 |
展示建议的字符硬上限 |
contextMessages |
10 |
传给预测器的尾部消息条数 |
maxContextChars |
6000 |
transcript 字符预算 |
baseUrl |
https://api.deepseek.com |
无 harness LLM 时的回退 |
apiKey |
"" |
回退用;可来自 DEEPSEEK_API_KEY 或 $DSH_HOME/.credentials.yaml |
预测失败时,Settings 卡片与浏览器控制台会输出 [composer-predict] …,不再静默吞掉原因。
典型用法¶
- 安装并重启 DSH,在 Settings → Predictions 确认已开启。
- 与助手完成一轮对话,保持输入框为空;稍等(若设置了
delayMs则再等对应毫秒)后出现浅色下一句建议。 - 若建议合适,按 Tab 写入草稿后继续编辑或发送;不合适则 Esc 或直接打字覆盖。
- 需要更短、更晚出现的建议时,可调
maxSuggestionChars、delayMs;需要更少上下文时可减contextMessages/maxContextChars。
开发或调试时,客户端暴露 window.__composerPredict,可在控制台手动试 overlay(README 示例):
__composerPredict.suggest('Add a regression test for the empty-input case.')
__composerPredict.state()
适用场景与注意¶
适合:长期在 DSH Web 客户端里多轮对话、希望减少「下一句怎么写」停顿的用户;已配置好 Harness LLM 路由、希望预测与主会话共用凭据的场景。
注意:
- 插件以当前 DSH 进程权限运行,安装前请阅读源码与 MIT 许可证,确认接受其行为(会向模型发送最近若干条对话尾部用于预测)。
- 每次预测仍是一次 LLM 调用,虽默认压低推理档位和
maxTokens,频繁对话会产生额外请求;可用enabled或 Settings 关闭。 - 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;生态原则是「一切皆插件」,本包是独立维护的客户端增强。
结尾¶
dsh-composer-prediction 把「助手回合结束 → 猜下一条用户消息 → 幽灵文本 + Tab/Esc」这条链路接到 DSH 上,配置与状态集中在 Predictions 设置和 composer-predict.json。若要查看详情、提 issue 或对照行为表,见 GitHub 仓库:https://github.com/Amir-Bazylkhanov/dsh-composer-prediction;目录介绍见 https://www.skillhub.cn/plugins/Amir-Bazylkhanov/dsh-composer-prediction。