前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,雲端模型夠用,但本地 llama.cpp、ComfyUI、腳本往往各自佔顯存、各自啓停。顯存一緊就容易 OOM,多會話同時推進還會互相搶卡。DSH 已有記憶、上下文等插件,並不替你統一管「這張卡上現在還能塞什麼、這一步該誰先跑」。metagalaxy-crystal 維護的 dsh-local-orchestrator 定位爲工作流類插件:在消費級單卡(README 實測環境爲 RTX 5060 Laptop 8GB / 32GB RAM)上,給 agent 提供資源調度運行時,而不是再造一套 agent 框架。
這是什麼¶
插件倉庫:metagalaxy-crystal/dsh-local-orchestrator。當前 package.json 版本爲 0.14.1,許可證 MIT,運行環境要求 Node.js >= 20。
一句話:把 LLM、生成式工作流(ComfyUI)、一次性腳本收進一張顯存預算表,用 十個單步工具 + 任務狀態機 把「決策」留在 DSH 會話、「執行」放在插件裏,並支持跨會話暫停與恢復。
官方明確其不是新的 agent 框架:不實現 LLM 循環、不做工具調用協議、不管會話與記憶。它主要回答:卡上還剩多少、這一步該誰先跑、跑完如何記賬、異常時如何收尾。記憶、RAG、瀏覽器等仍由 DSH 其他插件與會話模型負責;本地探測、註冊、加載卸載與顯存預算由本插件負責。
社區目錄頁:SkillHub 插件頁(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。
三個核心物件¶
| 物件 | 作用 |
|---|---|
預算表(lib/budget.js) |
LLM / 工作流 / 腳本 / MCP 共用一本賬,按科目合計佔用,判斷新負載是否放得下 |
單步工具(lib/steps.js、lib/tools.js) |
一次工具調用只推進一步;local_step 與後臺 worker 共用同一套 StepRunner |
任務狀態機(lib/tasks.js) |
狀態如 queued → running → waiting_decision → done;落盤、可恢復,暫停可真正打斷 |
設計原則:決策權在宿主(DSH 會話模型),執行權在插件,狀態是雙方唯一的契約。
提供的工具與界面¶
lib/tools.js 暴露 10 個工具,命名空間大致爲:local_resources、local_assets、local_chat、local_service、local_delegate、local_generate、local_audio、local_task、local_step、local_env。
重啓 DSH 後,Web 端會出現 「本地調度」 頁籤,含總覽、任務池、任務、輸入輸出、用量、資產、設置等子頁。總覽可看顯存三段條(已用 / 可調度 / 保留);資產頁可登記模型並查看配套組件與缺文件提示;任務池展示步驟樹與租約;用量頁統計 token 與上下文佔用。
底層對接 runtimes/ 下的 llama.cpp、ComfyUI 與通用進程,並通過 hardware.js 讀取 CPU、內存與 nvidia-smi 顯存。
安裝與啓用¶
官方 README 給出的安裝步驟如下(路徑可按你的環境替換):
git clone https://github.com/metagalaxy-crystal/dsh-local-orchestrator.git
cd dsh-local-orchestrator
dsh plugin add .
說明:dsh plugin add . 表示把當前克隆目錄註冊爲 DSH 插件;若你使用的 DSH 版本文檔要求其他方式,以本地 DSH 說明爲準。安裝完成後重啓 DSH,確認會話頂部出現「本地調度」頁籤。
本插件以當前 DSH 進程權限 在本機啓停模型進程、讀寫配置與任務狀態。安裝前請自行審閱倉庫源碼與 MIT 許可證,確認路徑、端口與自動卸載策略符合你的安全預期。
一次性環境配置¶
模型與運行時集中在同一根目錄時,可用一條 setup 命令派生並寫入 models / llama.cpp / ComfyUI / scripts / output 等路徑:
npm run setup -- --base D:\models
也可在對話裏用 local_env 的 JSON 動作逐項配置,例如:
{"action":"set-base","dir":"D:\\models"}
{"action":"doctor"}
{"action":"vendor-llama"}
{"action":"link-comfy","dir":"D:\\models\\ComfyUI"}
doctor 全爲 [ok] 再繼續;出現 [x] 時按該行給出的 fix 執行,避免從日誌猜測。全綠之前可先不登記資產。
登記本地資產¶
三種入口:
- 資產頁「從目錄導入」(模型都在同一根目錄時最快);
- 資產頁「+ 添加資產」;
- 對話 JSON,例如:
{"action":"add","asset":{"id":"my-qwen","kind":"llm","gguf":"text/my-qwen/model.gguf","ctx":8192}}
{"action":"list"}
list 可查看每個資產的配套組件與「缺文件」警告。
典型用法¶
下面示例均摘自 README,可按你的資產 ID 與路徑替換。
本地對話(自動加載,用完可自動卸載):
local_chat {"prompt":"用一句話解釋什麼是顯存預算"}
local_chat {"asset":"qwen36","prompt":"看這張圖裏有什麼","imagePath":"D:\\x.png"}
出圖 / 視頻 / 音樂(經 ComfyUI 等工作流):
local_generate {"prompt":"一隻橘貓在窗臺上,寫實照片","kind":"image"}
local_generate {"asset":"minimax-h3-t2v","prompt":"夜景城市航拍","kind":"video"}
local_generate {"prompt":"輕鬆的鋼琴配樂","kind":"music"}
多步任務(可暫停、可恢復):
local_task {"action":"create","goal":"給新品寫三條文案並評估","steps":[
{"goal":"寫三條文案","kind":"llm"},
{"goal":"按“是否具體、是否有賣點”評估上一步","kind":"evaluate","dependsOn":[0]}
]}
local_step {"action":"run","taskId":"task-xxx"}
local_task {"action":"pause","taskId":"task-xxx"}
語音與轉寫:
local_audio {"action":"tts","text":"你好,這是本地合成。"}
local_audio {"action":"asr","audioPath":"D:\\x.wav"}
查看狀態與排障:
local_resources {"verbose":true}
local_env {"action":"doctor"}
local_resources 可彙總算力、資產、24h 用量與最近事件;doctor 對 llama.cpp、ComfyUI、模型路徑等問題給出逐項結論與可執行修復建議。
調度策略要點(8GB 默認取向)¶
README 列舉的默認策略面向約 8GB 顯存調優,理解這些有助於預判行爲:
- GPU 槽互斥:同一時刻只有一個喫顯存的資產(LLM / ComfyUI / 語音等),切換時先停後起。
- 顯存預算:在預留比例與固定預留之後計算可調度顯存;放不下時按未固定、低優先級、最久未用等規則淘汰。
- CPU 槽併發:embed、rerank、零顯存 MCP 等可並行,不佔 GPU 槽。
- 實測學習:加載後回寫真實顯存佔用到資產畫像。
- 自動調參:可讀 GGUF 元數據,在可用顯存內選
ctx、ngl、KV 量化等(scheduler.autoTune)。 - 空閒回收與任務結束釋放:如
idleUnloadSec、releaseAfterTaskSec(默認 30 秒)等;pinned: true的資產不受普通空閒卸載規則約束。
核顯、虛擬顯示器等邊界條件在 README 中有單獨說明;獨顯調度以 nvidia-smi 可見部分爲準。
可復現的基準數字¶
無需加載模型即可在本機跑基準(結果與具體 GPU 型號無關的部分):
node scripts/bench.mjs
README 記載的當前指標包括:任務恢復率 100%(20/20,含崩潰中 5 個);跨會話公平性爲最大連續獨佔 1 步;單步開銷約 2.6 ms/步(含任務落盤)。工具調用臺賬校驗:
npm run verify
顯存估算誤差(README 稱 <6%)需真機;詳細設計見倉庫內 docs/OVERVIEW.md 與架構文檔。
適用場景與侷限¶
較適合:單機 NVIDIA 顯卡、已用 llama.cpp 跑 GGUF、用 ComfyUI 出圖/視頻,希望 agent 按任務自動加載/卸載,把簡單、批量、隱私、離線的活交給本地算力。
不適合指望它替代:記憶、RAG、瀏覽器、完整 agent 循環——這些仍依賴 DSH 生態其他能力與你會話裏的模型。
任務池邊界(README 摘要):決策環在宿主;執行環在插件且 local_step 一次一步;後臺 worker 在需要判斷或失敗時會 schedule 喚醒所屬會話,不打擾其他會話。
結尾¶
dsh-local-orchestrator 把本地 LLM、ComfyUI 與腳本納入統一顯存賬本,並用可恢復的任務狀態機對接 DSH 工具調用,適合在顯存緊張的單品工作站上做 agent 側「用起來、用得省、用得穩」。