dsh-assistant-optimization:摺疊模型輸出、增強提示詞的 DSH web 插件

前言

用 DSH(DeepSeek Harness)的 web profile 起服務後,有幾個問題幾乎每天都會碰到:

  • 一些 OpenAI 兼容 API 沒有獨立的 reasoning_content 通道,思維鏈直接混進正文流,DSH 把整段當普通文本渲染,答案埋在一大段思考裏;
  • 一個回合跑完,思考行、工具調用行、中間說明堆滿屏幕,真正要看的往往只有最後的回覆;
  • 手動點了 Stop 或者會話報錯,想接着跑只能自己重新組織輸入;
  • 模型輸出 mermaid 圖表時,界面上只有一段代碼文本。

dsh-assistant-optimization 把這些問題打包處理。下面按功能、安裝、配置的順序介紹。

這是什麼

dsh-assistant-optimization 是 qianshe 維護的 DSH web profile 插件,當前版本 1.8.0,MIT 許可證,共七個能力,即裝即用。它不替換任何官方渲染:插件以 shadow 方式接管 DSH 組件後再把渲染委託回去,Markdown、工具卡片、圖片、表格保持原樣。

核心功能

Reasoning fold:摺疊誤渲染的思考內容

部分提供方把思維鏈直接寫進普通文本流,形如:

The user wants to know about X, I should explain Y first...
</thinking>

Here is the answer to your question...

插件在可配置的分隔符處拆分內容,把思考部分折進原生的 “Think” 摺疊塊,只保留答案可見。分隔符默認爲 ["</thinking>"],支持配置多個,在 Settings → General → Thinking Tag Markers 管理。

Mermaid 圖表內聯渲染

mermaid 代碼塊內聯渲染爲交互式 SVG。工具欄按鈕提供縮放與重置,滾輪可縮放,鼠標或觸摸拖拽可平移。

Tool-call grouping:工具調用行合併

連續的工具調用行摺疊爲一行 # bash · N tools 頭部。調用之間的推理行不會打斷分組,會被合併進去:摺疊組把推理行一併收起,展開組則像成員一樣縮進顯示。

Prompt enhance:一鍵潤色草稿

發送按鈕左側有一個 ✨ 按鈕,點擊後用輸入框當前選中的模型把草稿重寫爲更清晰的指令。它只發一個普通聊天請求——不建會話、不入日誌——然後原地替換草稿,Ctrl/Cmd+Z 可撤銷。

運行中顯示旋轉弧線和「增強中」;成功顯示綠色對勾;失敗時圖標閃紅、原因放在 tooltip 裏,草稿不會被清空。tooltip 會同時報告上次調用實際收到的上下文量——重寫效果不理想時先查這一項。

Resume-from-breakpoint:從斷點續發

會話異常停止——用戶點 Stop 或會話出錯——後,發送按鈕變成 ▶ 播放鍵,懸停顯示「斷點續發」提示,樣式與 DSH 原生按鈕 tooltip 一致。點一下即通過宿主路由發送續發信號,代理從斷點接着跑,使用輸入框當前選中的模型。

幾個細節:

  • 門控邏輯讀取 session.chat.timeline 中最後一個閉合回合的 turn/end 原因,只有 aborted(用戶停止)和 error(會話錯誤)觸發播放鍵;正常完成和 max-tokens 不觸發;
  • 在草稿裏輸入任何內容,或代理開始運行,按鈕立即恢復爲普通發送/停止鍵,不會卡在播放圖標;
  • 續發標記進入記錄時,插件把空白氣泡和複製按鈕替換爲一條「已從中斷處繼續」提示行;
  • 實現上採用 CSS 覆蓋層:通過 data-dsao-resume 屬性隱藏官方按鈕的 SVG,旁邊放置播放 SVG,不打擾 React 的重渲染週期。

Turn folding:回合結束自動摺疊過程

回合運行中一切保持可見,原生的「Deep diving…」狀態與時鐘就是運行指示。回合完成(最終答案落地)的那一刻,該回合的過程內容——思考行、工具調用、中間文本——摺疊爲一行「已完成 · 時長」頭部;出錯或被停止的回合則顯示 已出錯/已停止。運行中的插話隨回合一起摺疊,頭部顯示「· N 條插話」計數。

始終可見的是:你的提問、最終的總結回覆及其操作行(複製等)。點擊頭部可展開完整過程,再點收起。展開/收起的選擇只存在內存裏,刷新頁面後重新摺疊。

兩點實現說明:

  • 摺疊方案完全由會話快照計算:用 chat.locations 分組回合,用回合的 turn/end 原因判斷完成狀態,用官方 turn-tail 節點的 closing 指針定位總結回覆,用回合起止時間戳算時長(與原生時鐘同一套數字);
  • dsh 0.1.2+ 自帶回合折疊(Settings → Conversation display → Compact)。本插件會接管該設置:Turn Folding 開啓時強制內置模式爲 Normal,避免雙重摺疊;關閉則把欄目交還給內置 Compact。任意一側切換都會使兩邊對齊。

開關在 Settings → General → Turn Folding,默認開啓。

一個主機端工具,面向模糊、說不清的搜索:傳入自然語言描述,返回匹配的文件、行範圍和代碼。它基於 fast-context 方法運行一個 agentic 搜索循環,由 Windsurf key 驅動。

key 門控是設計重點:只有在 Windsurf key 解析成功時,工具及其一行提示引導纔會註冊;沒有 key 就什麼都不註冊,模型不會被告知一個它無法調用的工具。

key 按以下順序解析,命中即停:

  1. WINDSURF_API_KEY 環境變量;
  2. Settings → General → Windsurf API Key 手動填寫,存於 ~/.dsh/dsao-windsurf-key,權限 0600
  3. 自動讀取已登錄的 Windsurf/Devin 編輯器的 state.vscdb;設置 DSAO_FC_AUTO_KEY=0 可禁用自動讀取。

非官方協議說明見 lib/fast-context/NOTICE.md

安裝與啓用

dsh plugin --profile web add github:qianshe/dsh-assistant-optimization
dsh web

打開 http://127.0.0.1:3080 ,插件自動激活。安裝、更新、卸載之後都需要重啓。

其餘管理命令:

# 從本地源碼安裝
dsh plugin --profile web add .
# 更新
dsh plugin --profile web update dsh-assistant-optimization
# 卸載
dsh plugin --profile web remove dsh-assistant-optimization

配置

插件共三個配置項:

配置項 默認值 說明
Thinking Tag Markers ["</thinking>"] 分隔思考與正文的字符串,支持多個,在 Settings → General 編輯
Turn Folding 回合完成後把過程摺疊爲一行頭部,在 Settings → General 編輯
Windsurf API Key context_search 的憑據,無 key 則工具不註冊

適用場景與注意

適合日常通過 DSH web profile 聊天和跑智能體任務、希望界面乾淨一點的開發者。使用前注意:

  • 需要帶 web profile 的 DSH;
  • 插件只在出現圖表時通過 mermaid.js CDN 訪問網絡,其餘時候不聯網;
  • Edit diff counts 模塊已在 v1.8.0 退役:dsh 0.1.2+ 已原生渲染 Write/Edit 行的 diff 統計,該模塊僅爲舊版本宿主保留,在當前版本上不註冊任何內容;
  • context_search 依賴外部 Windsurf 憑據,自動讀取編輯器數據庫的行爲可用 DSAO_FC_AUTO_KEY=0 禁用;
  • 插件以當前 dsh 進程的權限運行,安裝前建議檢查源碼與許可證(MIT)。

結尾

dsh-assistant-optimization 的做法是在不替換官方渲染的前提下,補齊輸出摺疊、圖表渲染和幾處交互,讓 DSH web 界面保持原生觀感的同時更好用。如果你每天用 DSH web profile,值得一試。

  • 社區目錄頁(獨立站點,與 DeepSeek、幻方無官方從屬關係):https://www.skillhub.cn/plugins/qianshe/dsh-assistant-optimization
  • GitHub:https://github.com/qianshe/dsh-assistant-optimization
羽毛球分组比赛记分
小程序二维码

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

小夜