dsh-flow-queue:在 DSH 右側欄裏畫流程圖,讓每一步只在輪次邊界執行

前言

DSH 裏 /model 是立刻生效的:一輪還在跑(比如正在等待斷聯後重試)時切模型,重試就會按新模型發出去,於是「這一輪」被悄悄換成了它開始時不是的那個模型。對於希望每一輪由哪個模型服務都可控、且可復現的工作流來說,這是個隱性的坑。

下面介紹的 dsh-flow-queue 就是針對這個問題的插件:它把提示詞投遞、模型切換、命令執行、分支、循環都變成一張圖裏的節點,引擎只在 turn/end 落盤、且該會話的 Agent 空閒時才推進,所以切換永遠落在兩輪之間。這個插件由 Eclipse-NotFound 維護,屬於社區目錄裏的「工作流」分類,許可證是 MIT。

這是什麼

一句話定位:給 DeepSeek Harness(DSH)的可視化流程圖編輯器,整張畫布就住在右側欄裏,沒有獨立窗口。

把提示詞、切換模型、執行命令、條件分支、循環、斷點、子代理扇出、跨會話發送/等待畫成一張有向圖,按連線順序執行,並且只在輪次邊界執行;其上再疊一層「編制視圖」(Fleet),管理工作區裏協作的會話。

解決的問題:

  • 在途請求與它的每一次重試,始終保持它開始時的模型,不會被中途切換打斷;
  • 模型切換隻發生在兩輪之間,語義上就是「下一個輸入之前」;
  • 圖上的順序等於執行順序,跑到哪一步、結果如何,畫布上實時可見。

核心功能

九種步驟節點。 每種一步,都在第二行按鈕裏點一下加到畫布:

  • 提示詞:投遞一條用戶消息,可帶圖片與文件附件,也可爲這一步單獨指定模型;
  • 切換模型:在輪次邊界把會話切到指定模型,模型聲明瞭思考強度檔位時可一併指定;
  • 執行命令:運行斜槓命令(/compact、/plan 等,走 commands.execute);
  • 條件分支:按條件選「是 / 否」兩條路;
  • 循環:滿足退出條件或到達最多輪數時走「退出循環」,否則走「再循環」;
  • 斷點:停下等人按「繼續」;
  • 扇出子代理:把同一條提示詞發給最多 8 個一次性子代理(spawn 後端),每路可強制自己的模型/強度,留空則沿用會話路由;收齊後聚合。聚合方式有三種:全部完成、前 k 個完成(夠了就取消慢的)、首個完成。父輪次不受影響,扇出是在輪次邊界旁邊等,不是跨過它;
  • 發送消息:把一條消息投給編制裏的另一個會話(先落盤、退避重試、同目標嚴格保序,死信擋住隊列直到人工重試);可附帶本會話本輪改動的文件清單(僅文件工具寫入,盲區如實標註);
  • 等待會話:等目標在等待開始後完成一輪並空閒,或等目標最近一輪輸出包含標記(默認 [[FLOW:REPORT)。

條件怎麼判。 條件對最近一次產出求值:提示詞節點看該輪助手輸出的文本與工具失敗記錄;命令節點看命令結果。可選的條件包括 總是成立、正則匹配上一輪輸出(多行模式)、包含文本、包含完成標記(默認 [[FLOW:DONE]])、上一輪有工具失敗、上一步失敗、模型判斷(自然語言條件,執行到該步時發起一次極簡判定輪,指令約 40 token + 條件原文,要求模型首行只答 YES 或 NO,答不出判該步失敗 no-decision),每條都可取反。模型判斷不註冊全局工具、不改任何會話的工具表;循環裏每一輪都重新判定,不復用舊結論。

提示詞塊的附加能力。 多行文本之外,還可以帶圖片附件(讀爲 base64,經宿主 attachments.saveImages 落盤後作爲 image content part 發出)與任意文件附件。提示詞編輯框沿用了輸入框的兩個習慣:行首輸入 / 彈出可用命令與技能目錄,輸入 @ 彈出工作區文件引用(@path 語義與原生一致,是文本引用而非內容注入,模型自行讀取)。整段文本恰好是一行宿主命令(如只寫 /compact)的提示詞步驟,執行時按命令運行而不是發給模型。圖片/文件單步最多 8 個。

運行狀態與安全行爲。 狀態有 未運行 / 運行中 / 等待繼續(斷點) / 已暫停 / 已完成 / 出錯。三個設計取捨值得一提:

  • 不會有幽靈成功:輪次以 error/aborted/interrupted 結束時,該步記失敗;
  • 不會卡死:提示詞被接受但 30 秒內沒有新輪次,該步 no-turn 失敗、整輪標記出錯;
  • 重啓安全:進程重啓時仍標記爲執行中的步驟顯示爲 interrupted,運行狀態轉爲「已暫停」,不會自己偷偷接着跑。

每個步驟卡片顯示狀態、耗時、實際服務它的模型(取自該輪 request/header)、錯誤與命令結果。

流程包。 ⋯ → 流程包 可以把當前圖存到 $DSH_PROFILE_DIR/flow-queue/packages/*.json,在任意會話裏載入或刪除,存的是節點與連線,不含運行狀態。流程包可以聲明參數變量:在提示詞 / 扇出 / 發送文本里寫 {{task}},載入時逐個填空;沒填的佔位符原樣保留,絕不會悄悄變成空提示詞。內置兩個流程包(只寫一次、永不覆蓋):report-protocol(四態輪末標記的 worker 提示詞模板 + 配套等標記步驟)與 superagent-review(superagent 全生命週期一張圖:worker 派發 → 四態標記分支驗就緒 → 獨立 reviewer 評審 → 有界跟進迴環 ≤3 輪 → 通過纔到交付門,載入填 {{task}} 與 {{ticket}} 兩個參數)。

安裝與啓用

官方安裝命令就是一條(來自 README,不要憑包名拼接其他形式):

dsh plugin --profile web add github:Eclipse-NotFound/dsh-flow-queue

裝完要重啓 Harness web 運行時(bundle 在啓動時組裝),再刷新頁面。版本要求爲 DSH >=0.2.1-rc.1 <0.3.0(package.json 的 engines.dsh 字段寫的也是這個範圍)。

驗證。 左側欄底部(設置旁)出現插件圖標,懸停顯示「打開流程隊列」。點這個圖標,或點右側欄開始頁裏的「流程隊列」卡片,右側欄會出現「流程隊列」標籤頁,畫布就在標籤頁裏。標題旁有「流程」和「編制」兩個視圖切換,本插件大部分日常操作留在「流程」頁。

插件在同源下注冊 /flow-queue/api/… 路由(如 GET /flow-queue/api/state?sessionId=…、GET /flow-queue/api/models、POST /flow-queue/api/command 等),全部經 ctx.connection.requestRejection 准入,只有已認證的頁面能調用。它只保存你自己在每會話裏創建的內容(圖與流程包目錄),不向任何地方發送數據。

典型用法

README 給了一個五分鐘可跑通的最小流程:提示詞 → 切換模型 → 條件分支。步驟如下。

1、加三張卡片。 依次點第二行的 +提示詞、+切換模型、+條件分支。最先加入的「提示詞」就是流程起點。

2、填寫三個步驟。 單擊卡片(按下後不拖動)會在畫布下方打開檢查器抽屜,表頭是「編輯步驟」。前提詞框裏寫一條可判定的提示詞,例如「用一句話確認你收到這條消息,然後另起一行只輸出:FLOW-OK」,按 Ctrl/⌘ + Enter 保存(失焦也會保存),「模型」保持「不設置(沿用當前)」。切換模型卡從「模型」下拉里選目標模型。條件分支裏把條件設爲「包含文本」,匹配內容填 FLOW-OK。此時三張卡片正文分別顯示提示詞首行、提供商 / 模型、包含文本 · FLOW-OK。

3、連線。 從提示詞卡片右側的圓點拖到切換模型卡片(或點圓點再點目標卡片),再把切換模型連到條件分支。分支有兩個輸出圓點「是」「否」。想看清走向,可以再點 +斷點 加一張斷點卡,把「是」連過去。

4、運行。 點頂欄「開始」。提示詞作爲一條真實用戶消息投進當前會話;那一輪結束之後、下一個輸入之前,會話才切到新模型;然後分支對提示詞那一輪的回覆求值。運行狀態先變「運行中」,整條跑完變「已完成」。添加了斷點的情況下,回覆包含 FLOW-OK 就走「是」停在斷點,狀態變「等待繼續」,點「繼續」收尾;不包含則走「否」,流程直接「已完成」,斷點卡片保持「待運行」。

兩句運行紀律要記住:改圖必須在未運行時(運行中會被拒絕,要先點「暫停」或「停止」);再點一次「開始」會清掉各步狀態、從頭重跑。DEBUG 與恢復時可以單步卡片上直接跑:抽屜表頭有「從此步開始」,點 ↓ 收起抽屜。

想複用整條流程時用 ⋯ → 流程包 保存。

適用場景與注意

適合誰:

  • 想把多步智能體操作(提示詞、切模型、跑命令、分流)一次性畫好並反覆運行,而不是每次手敲;
  • 需要嚴格控制「哪一輪由哪個模型服務」的流程,例如帶重試的長輪次不能被中途換模型;
  • 想讓一步「停下來等人確認」混進自動化流程的(用斷點節點);
  • 需要把同一個會話的操作發給多個一次性子代理並行處理(扇出節點);
  • 多會話協作場景下要把消息從一個會話投給另一個、等它回話再繼續(發送消息 / 等待會話)。

注意事項:

  • 插件以當前 dsh 進程的權限運行,包括對會話、命令和文件系統的訪問能力。安裝前,請先讀一遍源碼(倉庫公開,main 分支下的 index.js、client.js、cordis.patch.yml)和 MIT 許可證,再決定是否啓用;
  • 它只在 DSH >=0.2.1-rc.1 <0.3.0 範圍內聲明兼容,版本超出這個區間需要自行驗證;
  • 插件依賴於宿主命令行,只有客戶端彈窗的命令(如 /model 選擇器)不會出現在 / 菜單裏;
  • 目前尚未實現:圖片附件縮略圖預覽、拖拽排序、多選/框選、撤銷重做、超過 8 路的扇出、面板內同屏同時看畫布與檢查器(窄欄下是二選一,選中步驟時用 ← 返回畫布)。

結尾

dsh-flow-queue 的價值在於把流程的結構和執行時機都顯式化:圖上順序即執行順序,所有事只在輪次邊界發生。整個插件由 Eclipse-NotFound 一人維護,體量不大,單文件代碼結構清晰,安裝即得一個右側欄標籤頁。若它能滿足你的工作流需求,源碼和安裝方式都在下面。

  • 社區目錄頁:https://www.skillhub.cn/plugins/Eclipse-NotFound/dsh-flow-queue
  • GitHub:https://github.com/Eclipse-NotFound/dsh-flow-queue
羽毛球分组比赛记分
小程序二维码

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

小夜