Exploring and Registering a Local OpenAI-Compatible LLM as a DSH Model Provider

前言

在 DeepSeek Harness(DSH)里把模型提供商指到 http://127.0.0.1:1234/v1,看起来只是改一行地址,实际常会卡在两类问题上:Harness 自带的系统提示与工具 schema 在未输入用户内容前就约占 30,000 tokens,而本地服务若仍用 8192 的默认上下文,会直接拒绝请求;不少本地 chat 模板也不认识 OpenAI 扩展里的 developer 角色或 reasoning_effort,会返回 400。手工写 YAML 往往要在踩坑之后才知道该关哪些兼容开关。

下面介绍社区插件 dsh-local-llm(维护者 philo-max,分类:模型推理)。它在写配置之前探测端点能力,并把 LM Studio、Ollama、vLLM、llama.cpp server 等一切实现 OpenAI chat-completions 协议的本地服务,注册进 Harness 的 llm-pi-ai 配置。

这是什么

插件仓库:philo-max/dsh-local-llm。目录页:skillhub.cn/plugins/philo-max/dsh-local-llm。许可证 MIT,当前 package 版本 0.1.0。

一句话定位:检测、探测并注册本地 OpenAI 兼容 LLM 服务为 DeepSeek Harness 的 model provider。README 还列明可与 SGLang、KoboldCpp、text-generation-webui、Jan、LocalAI 等配合使用。

核心功能

上线前探测

插件针对两类常见失败做可检测的探针(在 local_llm_scan 中设置 probe: true 时):

  1. 已加载上下文长度:例如通过 LM Studio 原生 /api/v0/models 区分 loaded_context_length 与 max_context_length。
  2. 工具调用:用 get_weather schema 做真实往返,确认模型能输出可解析的 tool_calls。
  3. 兼容项:是否接受 developer 角色与 reasoning_effort;不支持的端点会带 warnings。

注册时只需写入端点实际需要的开关(例如 supportsDeveloperRole: false 会写入 compat.supportsDeveloperRole: false)。

Settings 面板

Bundle 在 Settings → Local LLM 提供界面:填写 host 与端口、扫描后每个端点以卡片展示厂商、已加载/最大上下文、是否支持 tool calling;选定模型后点 Register as provider,无需手写 YAML。面板通过 Host 上 ctx.webServer 注册的同源路由 /local-llm/scan 与 /local-llm/register 与 Host 通信(纯 JS Client 模块无法直接调 Host 服务)。

工具

local_llm_scan

探测常见端口上可达的服务。

参数 类型 默认 含义
ports integer[] 1234, 11434, 8000, 8080, 5000, 3000, 7860, 8888 要探测的端口
host string 127.0.0.1 探测目标主机
probe boolean false 是否运行能力探针
apiKey string — 需要 Bearer 的服务可填

local_llm_register

向 llm-pi-ai 配置写入可用的 provider 条目。必填:providerId(小写连字符路由名)、baseUrl(含 /v1 的 OpenAI 兼容 URL)、modelId(与服务端报告一致)。可选包括 displayName、contextWindow(应使用已加载上下文,而非模型最大值)、maxTokens(默认 8192)、apiKey、以及若干 supports* 与 dryRun。变更在下一次模型请求生效,无需重启 Harness。

插件通过 cordis.patch.yml 自行挂载;bundle 配置字段均可选,例如:

- id: local-llm
  name: 'dsh-local-llm'
  config:
    host: 127.0.0.1
    ports: [1234, 11434, 8000, 8080]
    probe: true
    timeoutMs: 5000

安装与启用

官方 README 给出的方式是克隆仓库后,将目录作为 bundle 安装到 Harness profile;插件会自动通过 cordis.patch.yml 挂载,无需手工改 profile:

git clone https://github.com/philo-max/dsh-local-llm

安装前请自行审阅源码与 MIT 许可证。插件在当前 DSH 进程权限下运行,会扫描本机端口并写入模型提供商配置,仅在信任环境与来源时使用。

DeepSeek Harness 生态强调「一切皆插件」;skillhub.cn 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

典型用法:LM Studio

先做扫描(含探针):

local_llm_scan { probe: true }

示例返回片段(字段以实际扫描为准):

{
  "baseUrl": "http://127.0.0.1:1234/v1",
  "vendor": "lmstudio",
  "models": ["gemma-4-12b-it-qat-uncensored-heretic-v3"],
  "context": { "loadedContext": 32768, "maxContext": 262144 },
  "tools": { "supported": true },
  "compat": { "supportsDeveloperRole": true, "supportsReasoningEffort": true }
}

再注册 provider;contextWindow 使用 loaded 值 32768,若声明 262144 的最大值,Harness 可能构造出服务端仍会拒绝的请求:

local_llm_register {
  providerId: "local-lmstudio",
  baseUrl: "http://127.0.0.1:1234/v1",
  modelId: "gemma-4-12b-it-qat-uncensored-heretic-v3",
  contextWindow: 32768
}

适用场景与注意

适合谁:在本机跑 OpenAI 兼容推理服务、希望 DSH Agent 直接走本地模型、又不想反复手调 YAML 与兼容开关的开发者。

README Gotchas 中值得留意的点(均为文档自述,非第三方案例):

  • 滑动窗口模型占用的 VRAM 可能远低于名义上下文;LM Studio 的 --estimate-only 按全注意力估算,可能高估 2–3 倍,应以真实加载为准。
  • 推理模型可能把输出预算全用在 chain of thought 上;文档示例中 max_tokens: 200 时 content 为空,建议输出侧至少留 1000–2000 tokens。
  • 方向性 ablation 需要全精度权重;.gguf 已量化,若需改模型应使用原始 safetensors。

结尾

dsh-local-llm 把「本地端点能不能扛 Harness 默认负载」从试错改成扫描与探针,再用工具或 Settings 面板写入 llm-pi-ai。需要细节与 issue 时见 GitHub:https://github.com/philo-max/dsh-local-llm;目录入口:https://www.skillhub.cn/plugins/philo-max/dsh-local-llm。

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

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

Xiaoye