dsh-next-steps:按轮次投影的下一步建议

前言

在 DSH 里和模型多轮对话时,助手常常在结尾用几段文字列举「你可以接着做……」。读者需要自己复制到输入框,或者重新组织一句话再发。若同一话题聊了很多轮,历史回复里也没有可点的一键续聊入口。

dsh-next-steps 是 xiaoxiaolelang-ai 维护的工作流类插件:在每轮回复尾部渲染最多四条可点的下一步建议,且每一轮只显示该轮工具结果对应的按钮,不会把上一轮的建议带到新的一轮。下面介绍它的能力、安装方式、配置项和实现上的取舍。

这是什么

插件全名 dsh-next-steps,归类为工作流。它在会话界面里注册 conversation.chat.turnTail,并在 Host 侧注册 suggest_next_steps 工具;建议内容来自当轮模型调用该工具返回的结果,而不是插件本地生成的文案。

目录页:skillhub.cn 上的 dsh-next-steps
源码与说明:GitHub · xiaoxiaolelang-ai/dsh-next-steps

核心功能

按轮次投影

每个轮次尾部只读 (本轮起点, 本轮收尾] 区间内的 suggest_next_steps 工具结果。历史轮次各自定格在自己那一组按钮;新的一轮不继承上一轮;工具结果晚到时也会触发重渲染。README 写明:没有 Map、没有 render 副作用、没有跨组件传递。

2×2 版式与视觉

一次最多四条建议:1 条整宽、2 条一行、3 条末条跨列、4 条标准 2×2。超过 maxActions 上限时在 Host 侧直接截断,不显示「还有 N 条」。主推项用强调色与左座条;常规项与 stop 项分档叠底,颜色均来自主题令牌,浅色/深色跟随宿主。窄容器下(@container ≤420px)自动单列。

交互

  1. 普通点击:把该条的 prompt 作为消息发出(经输入框 setDraft → 落定 → submit)。
  2. Shift+点击:只填入输入框,不发送;若草稿里已有内容则换行追加。
  3. 仅当发送成功后才锁定已点按钮;提交失败会解锁并显示原因,可重试。
  4. 悬停可查看完整 prompt(长于按钮文案时)以及 Shift+点击说明。按钮组带 role="group" 与本地化标题(「下一步建议」/「Next steps」)。

常驻提示与工具

配置 prompt: always 时,插件在系统提示接近末尾(9899 位)注册常驻指令,要求模型每轮收尾调用 suggest_next_steps;纯确认且没有下一步的回复为例外。0.1.4 起提示词约 116 词、6 条规则,刻意不绑定 release、pipeline 等具体场景。README 说明:带提示的轮次里约 70% 会发起调用(0.1.3 之前实测),模型仍可能漏掉某一轮,此时该轮不显示按钮,也不会串用上一轮建议。

重启会话后的持久化

重放历史时节点形状可能与实时流不一致,插件可能认不出数据。因此实时渲染成功时会按「会话 + 该轮收尾 seq」写入 localStorage(键 dsh-next-steps:tails:v1,最多 400 条),用于补偿重放失败。清除站点 localStorage 后,历史轮次的建议会丢失,不影响新轮。

安装与启用

在终端执行官方 README 中的命令:

dsh plugin add dsh-next-steps

也可以在 DSH 插件管理器里添加 dsh-next-steps。

package.json 声明需要 DSH >= 0.2.2-rc.1、Node >= 20,许可证为 MIT。插件以当前 DSH 进程权限运行,安装前建议自行查看仓库源码与许可证。

若同一「轮次尾部」还有别的插件也往尾部放建议按钮,可能出现两排;README 建议同一时间只启用一个此类插件。

配置

在 profile 的 cordis.patch.yml 里,于本插件对应行的 config 下写入:

- id: next-steps
  config:
    maxActions: 4      # 1-4,默认 4
    history: latest    # latest=只在最新一轮显示(默认);all=每轮都显示当轮的建议
    prompt: always     # always=注册常驻指令;off=不注册

prompt: off 时不注册常驻提示,模型是否调用工具完全取决于对话内容。客户端不对配置做 schema 校验,非法取值按默认兜底。

典型用法

启用插件并保持默认配置后,正常使用对话即可:模型在轮次收尾调用 suggest_next_steps 后,回复下方会出现最多四格建议。想先改措辞再发时,对目标按钮 Shift+点击,在输入框里编辑后自行回车。

若希望在浏览历史时看到每一轮当时留下的建议,将 history 设为 all。若只想减少最新一轮下方的视觉干扰,保持 history: latest(默认)即可。

工具返回的动作经 Host 侧 normalizeActions 处理:按立场去重、只留一个推荐并置顶、stop 沉底、截断到上限。首条推荐在数据里标 recommended;label 是对话语言下的动作简述,prompt 是用户实际会发出去的那句话。

原理概要

  • Host:注册工具与可选常驻提示,清洗并截断动作列表,随工具结果交给客户端。
  • Client:挂接 turnTail,用 turn.start.seq / turn.end.seq 定位本轮工具结果;按数据段前缀深搜,认不出时降级采集器且仍只挂最新一轮。
  • 零依赖:不 import @deepseek-ai/* 包,工具用明文 JSON Schema 注册。

适用场景与已知限制

适合:需要把「接着做什么」变成可点操作、减少复制粘贴的 DSH 日常对话;写代码、查资料、做文档等通用场景(提示词不绑定单一工作流)。

注意:

  • 某轮没有按钮,通常是因为该轮没有 suggest_next_steps 调用结果,属模型与提示约束下的固有限制。
  • 工具结果里给客户端读的 JSON(前缀 dsh-next-steps/v1)也会进入模型上下文,每次约几百 token。
  • 若宿主某轮未提供 turn.start.seq,按轮定位可能退化为「截至本轮」,极端情况下未调用工具时可能沿用上一轮建议。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本插件为社区维护之工作流扩展。

包内提供 _test-next-steps.mjs、_test-normalize.mjs、_test-host.mjs、_test-actions.mjs 等自检脚本,可从任意目录执行,路径相对脚本自身解析。

结尾

dsh-next-steps 把「下一步」从纯文本结尾收拢成每轮独立的可点网格,用按轮投影避免状态串轮,用 Host 清洗与 Client 定位保证展示与数据一致。需要安装或提 issue 时,见 GitHub 仓库 与 skillhub 目录页。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye