前言¶
在 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)自動單列。
交互¶
- 普通點擊:把該條的
prompt作爲消息發出(經輸入框setDraft→ 落定 →submit)。 - Shift+點擊:只填入輸入框,不發送;若草稿裏已有內容則換行追加。
- 僅當發送成功後才鎖定已點按鈕;提交失敗會解鎖並顯示原因,可重試。
- 懸停可查看完整
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 目錄頁。