前言¶
在 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 时):
- 已加载上下文长度:例如通过 LM Studio 原生
/api/v0/models区分loaded_context_length与max_context_length。 - 工具调用:用
get_weatherschema 做真实往返,确认模型能输出可解析的tool_calls。 - 兼容项:是否接受
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。