dsh-local-trim:爲本地小模型在 DSH 裏做輕量 harness

前言

DeepSeek Harness(DSH)默認面向雲端大模型:一個裝了不少插件的 profile 一打開,工具列表和系統提示詞體量都很大。本地推理端點(llama.cpp、Ollama、vLLM、LM Studio 等)常見上下文只有 16K–64K,很容易觸發 CONTEXT_WINDOW_EXCEEDED;窗口夠用時,小模型被大量工具描述和長規則包圍,工具調用正確率也會下降。

DSH 側沒有「按模型裁工具」的獨立開關:dsh-tools 的 Config 只有 mode / maxParallel,agent-preset 只能聲明插件而不能等價於不註冊, dsh-purge 也沒有工具過濾字段。能用的原語是 tools.restrict({ allow }),隻影響當前 agent 及其子 agent。下面介紹社區插件 dsh-local-trim,把這一原語和提示詞、schema 層面的裁剪組合起來,且不改動雲端 provider 的請求內容。

這是什麼

dsh-local-trim(維護者 Leonlee114514)是 DSH 社區目錄中的「模型推理」類插件。一句話定位:給本地小模型一套輕量 harness——按 provider 收窄工具面、裁剪 system prompt 段落、替換注入的長系統提示爲短頁、截斷工具 schema 中的 description,雲端 provider 一個字節都不動。

倉庫:https://github.com/Leonlee114514/dsh-local-trim
目錄頁:https://www.skillhub.cn/plugins/Leonlee114514/dsh-local-trim

社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝前請自行查看源碼與許可證(MIT)。

核心功能

四層裁剪

插件在命中 routes 的本地 provider 上同時做四件事:

層 做什麼 手段
1. 工具面 只留本地真用得上的工具 tools.restrict({ allow }),allow = 實際可見名 ∩ 白名單
2. 提示詞面 丟掉本地用不到的大段 在 system-prompt/assemble 裏按段名過濾 sections / contexts
3. 注入面 整份系統提示詞換成一頁紙 替換 dsh-purge 注入段正文,保留頭 80 / 尾 96 字符
4. schema 面 截斷工具描述 遞歸截 description,type / properties / required 不動

第 3 層與宿主行爲有關:dsh-agent-loop 渲染 prompt 後會檢查 globalThis.__dshPurgeHungPrompt() 原文的前 80 字符和後 96 字符是否仍在渲染結果中;缺任一段會把整份原文再前置。替換注入時必須原樣保留這兩段取樣,否則省下的 token 會被加回去。

README 說明本地模型在裁剪後,ops_bash / ops_glob / ops_read_files 兩步串行工具調用實測未退化;具體省多少 token 取決於你的 profile 基線,需在裝與不裝之間各抓一次請求對比(README「驗證裁剪真的生效了」一節)。

按 provider 路由

routes 決定對誰生效:

寫法 含義
不寫 早期默認只認 local-qwen(建議顯式寫 [] 或具體名字)
[] 自動識別:baseURL 爲迴環/私有網段,或 provider 名帶 local / ollama / vllm / lmstudio 等
[my-provider, ollama] 只匹配列出的名字(精確匹配)

自動識別關注的 baseURL 包括 127.0.0.1、localhost、10.x、192.168.x、172.16–31.x 等。

provision:探測並寫入本地 provider(可選)

從 v0.2.0 起,插件可在啓動時探測本地 OpenAI 兼容端點,並把 provider 寫入 cordis.patch.yml(持久化)。provision 三態:

  • false:不探測,只做裁剪
  • true(或不寫):按順序探 8090(llama.cpp)→ 11434(Ollama)→ 8000(vLLM)→ 1234(LM Studio),命中第一個可用
  • 對象形式:可指定 endpoint、endpoints、provider、overwrite 等

已有可用本地 provider 時不會覆蓋手寫配置。探測失敗不影響裁剪,原因寫入默認日誌 ~/.dsh/local-llm/local-trim.log(可用環境變量 DSH_LOCAL_TRIM_LOG 改路徑)。

包聲明要求 DSH >=0.1.7-rc.1,Node >=20。

安裝與啓用

推薦:dsh plugin add

v0.1.1 起包已聲明 dsh.bundle,裝完默認自動生效(routes: [] 爲自動識別):

dsh plugin add github:Leonlee114514/dsh-local-trim

若不要自動識別,在 profile 的 cordis.patch.yml 裏把 local-tool-trim 的 routes 寫死,例如只裁一個 provider:

- id: local-tool-trim
  config:
    routes: [my-local-provider]

最小手工 insert

也可在 cordis.patch.yml 末尾 insert:

- insert:
    - id: local-tool-trim
      name: dsh-local-trim
      inject: [ tools, systemPrompt ]
      config:
        enabled: true
        routes: []          # 空數組 = 自動識別本地端點

需要探測並註冊 provider 時增加 provision: true(見 README 完整配置中的 promptTrim、dropSections、toolAllow 等字段;dropSections 應對應你 profile 裏實際存在的段名,照抄清單可能對不上會被靜默忽略)。

改源碼調試時,在 profile 目錄用 pnpm add link:../../../path/to/dsh-local-trim 登記依賴,並 insert 插件;不要只拷貝進 node_modules/,否則 pnpm install 可能清掉無主目錄。

典型用法

1. 只安裝插件,沿用已有 llm-pi-ai 配置

先把模型掛進 DSH 的 llm-pi-ai provider(OpenAI 兼容 baseURL),插件負責裁剪。以 llama.cpp 爲例,服務端:

llama-server -m model.gguf --mmproj mmproj.gguf \
  --host 127.0.0.1 --port 8090 --alias my-local \
  --jinja -c 65536 --n-predict 8192 \
  --cache-type-k q8_0 --cache-type-v q8_0

cordis.patch.yml 中 provider 需與 -c / --n-predict 對齊,並注意 README 強調的三點:apiKeyEnv(否則 llama.cpp 可能靜默返回空 completion)、thinkingFormat: chat-template 與 chatTemplateKwargs.enable_thinking: false、reasoningEfforts 與模型字段一致。改 defaultContextWindow 後需重啓 DSH 實例,HMR 不覆蓋 llm-pi-ai。

Ollama、vLLM、LM Studio 的端口與 YAML 示例見倉庫 README「四種本地後端的接入」。

2. 一步到位:provision 自動寫 provider

- insert:
    - id: local-tool-trim
      name: dsh-local-trim
      inject: [ tools, systemPrompt ]
      config:
        provision: true

本地已有可用 provider 時插件不會覆蓋;熱重載期間寫配置可能被 HMR 拒絕,插件會延後到下一次 agent/created 再寫。

適用場景與注意

適合誰:在 DSH 裏用本地 OpenAI 兼容端點跑 agent,希望雲端模型仍用完整工具與長 system prompt,本地模型單獨瘦身上下文。

權限與安全:插件以當前 DSH 進程權限運行,會讀寫 profile 配置、探測本機/局域網端口、寫日誌。安裝前應閱讀源碼與 MIT 許可證,確認 routes 不會誤裁你仍想用「全量 harness」的 provider 名。

配置別抄全套:README 中的 dropSections 示例對應「裝了很多插件」的 profile,應按自己已裝插件的段名刪減。

生態:DSH 理念是「一切皆插件」;本插件只解決本地端點的 harness 體積問題,不替代你在 llm-pi-ai 裏對模型、窗口、compat 的正確配置。

結尾

dsh-local-trim 把 tools.restrict 與 system prompt、purge 注入、tool schema 四層收窄綁在一起,並按 provider 路由,讓 llama.cpp / Ollama / vLLM / LM Studio 等在 DSH 裏更不容易頂滿上下文,同時可選 provision 降低本地 provider 的手工配置成本。

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

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

小夜