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 的手工配置成本。

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

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

小夜