前言¶
DSH 的智能体会话里,AI 每完成一轮回复后,用户常常还要手动想下一句:是继续执行、检查刚才的结果,还是从多个分支里选一个。这个环节并不复杂,但频繁出现时会打断节奏。
dsh-suggested-replies 是面向 DSH Web 的“预测回复”插件。它会在 AI 回复结束后,在聊天输入框上方生成几条用户下一步可能会发送的消息候选。点击候选只会把文本填入输入框或替换当前草稿,不会调用发送动作,也不会自动发送。
下面介绍它的位置、行为、安装方式、配置项,以及页面验收时要注意的点。
它是什么¶
dsh-suggested-replies 是一个 DSH Web 插件,npm 包名为 @anionex/dsh-suggested-replies,GitHub 仓库地址为:
https://github.com/Anionex/dsh-suggested-replies
它解决的问题是:在 AI 回复完成后,给当前用户一组可直接编辑的下一步消息候选。候选显示在输入框上方,点击后只进入草稿,由用户自行编辑或发送。
该插件以 Web 客户端插件形式工作,候选注册在 conversation.input.dock,位于 DSH 消息输入卡片上方,不使用 conversation.composer.dock。
核心行为¶
插件触发后,大致流程是:
1、AI 完成本轮回复。
2、插件为候选生成运行一个短文本内部 Agent。
3、内部 Agent 根据近期对话生成候选。
4、插件把候选状态写入插件自有的 suggested_replies_state domain。
5、Web 页面在 conversation.input.dock 显示候选行。
6、用户点击候选后,文本进入输入框草稿。
7、用户自行编辑或点击发送。
行为上有几个固定点:
- 候选行始终单行展示,宽度不足时横向滚动,不换到第二行。
- 候选优先覆盖下一步执行、验证/追问、决策/选择。
- 候选跟随最近对话语言,彼此去重,且可以直接作为草稿使用。
- 点击候选只调用草稿填充,不会创建下一轮,不会自动发送消息。
- 辅助模型没有返回规定 JSON 时,插件会按最近对话语言生成配置数量的保守候选,不把空数组当成成功结果隐藏整行。
- 辅助提示词只截取直接用户消息和 AI 回复,不把
AGENTS、运行时快照和 Skill 目录等注入上下文挤占最近对话窗口。 - 新用户输入、设置关闭、辅助调用超时或插件卸载,都会取消当前生成,避免旧结果在下一轮对话中回流。
- 父 Session 不追加插件自定义事件,也不修改
KNOWN_SESSION_EVENT_TYPES。 - 候选状态保存在插件拥有的
suggested_replies_statedomain。 - sidecar 状态按 Session id 存储,并校验 header 的
{ createdAt, cwd }。 - 页面刷新或 Host 重启后,仍可恢复当前候选。
- 卸载插件后,父 Session 仍能由原版 DSH reader 恢复。
成本方面,每个可生成候选的完成轮次都会额外运行一个短文本内部 Agent。默认会复用 Session 最新 request/header 中实际使用的 provider/model,并回退到 Agent 默认路由。关闭 enabled 后,不再运行该 Agent。
安装与启用¶
先从 npm 安装:
dsh plugin --profile web add @anionex/dsh-suggested-replies
如果是本地开发目录,可以使用绝对路径安装:
dsh plugin --profile web add /absolute/path/to/dsh-suggested-replies
安装或更新后,先重启正在运行的 dsh web 服务,再在浏览器硬刷新页面。经过上面的步骤后,新建或重新打开一个会话再进行验证。
启用开关在 Web 设置页的“下一步建议”分区。enabled 是总开关,它会写入:
$DSH_HOME/settings.yaml
中的 suggested-replies 区域。修改后下一轮立即生效。
设置与配置¶
除设置页的 enabled 外,其余部署参数可以在 cordis.patch.yml 或 profile overlay 中配置。
| 字段 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
是否生成候选;关闭后不再运行辅助 Agent |
suggestionCount |
3 |
每轮候选数量,范围 2-4 |
contextMessageCount |
4 |
传给辅助模型的最近可见消息数,范围 2-6 |
maxSuggestionChars |
160 |
单条候选保留的最大字符数,范围 32-300 |
maxTokens |
384 |
辅助调用的最大输出 token,范围 64-1024 |
timeoutMs |
15000 |
辅助调用最长时长,单位毫秒,范围 1000-30000 |
suggestionProvider |
未设置 | 可选,显式指定辅助调用 provider;省略时跟随当前会话模型 |
suggestionModel |
未设置 | 可选,显式指定辅助调用 model;必须与 suggestionProvider 同时提供 |
一个 overlay 示例如下:
- patch:
- id: suggested-replies
config:
suggestionCount: 4
maxSuggestionChars: 120
timeoutMs: 10000
suggestionProvider: deepseek-official
suggestionModel: deepseek-v4-flash
如果你只想限制候选数量和超时,不显式指定模型,也可以只配置:
- patch:
- id: suggested-replies
config:
suggestionCount: 3
maxSuggestionChars: 120
timeoutMs: 10000
注意,suggestionModel 不能单独使用。要显式指定 model,就必须同时提供 suggestionProvider。
典型用法与页面验收¶
先安装插件,然后重启 dsh web 并硬刷新浏览器。接着新建或重新打开一个会话,等待 AI 完成一轮回复。
页面验收时,可以按下面的点检查:
1、候选行位于 [data-composer-card] 上方。
2、点击候选后,textarea 草稿变为候选文本。
3、点击候选后不会创建下一轮,也不会自动发送消息。
4、候选行是单行展示,宽度不足时横向滚动。
5、关闭“下一步建议”的 enabled 后,下一轮不再触发生成。
6、页面刷新或 Host 重启后,当前候选状态仍可恢复。
如果你只想观察行为,不需要调整模型路由,保留默认 provider/model 复用即可。如果你需要控制候选长度和超时,再配置 maxSuggestionChars 和 timeoutMs。
适用场景与注意¶
这个插件适合在 DSH Web 里希望减少“下一步手动输入”的场景。它尤其适合以下情况:
- 对话经常进入“继续执行、检查、选择分支”的阶段。
- 希望 AI 回复结束后,快速看到几个可编辑的下一步选项。
- 希望候选只进入草稿,不自动发送,保留人工确认。
- 希望在 Web 端以插件方式扩展,不修改父 Session 的插件自定义事件。
需要注意:
- 插件会额外运行短文本内部 Agent,会产生模型调用成本。
enabled关闭后不再运行该 Agent。- 辅助调用受
timeoutMs、maxTokens等配置约束。 - 点击候选不会自动发送,最终发送仍由用户操作。
- 插件许可证为 MIT。
- 插件以当前
dsh进程权限运行。安装前建议检查源码与许可证,再决定是否启用。 - 本项目为独立实现,致谢
dsh-external/dsh-auto-blame的双端 Web 插件组合思路,但未包含该项目的源代码、图像或品牌资产。
相关链接¶
GitHub:
https://github.com/Anionex/dsh-suggested-replies
可参考的插件目录页:
https://www.skillhub.cn/plugins/Anionex/dsh-suggested-replies
该目录页可作为资料入口参考,不代表官方应用商店。