dsh-local-model:在 DeepSeek Harness 中启动、停止并检查本地推理服务

前言

DeepSeek Harness(DSH)的插件体系让智能体可以通过工具与外部能力交互。但在本地运行大模型时,常见的做法是在终端手动启动服务,再在配置中写死端口与路径。这种方式依赖脚本、配置分散,且不便于在对话中动态切换。dsh-local-model 插件通过声明式配置,把本地推理服务的管理能力集成到 DSH 的工具与命令体系里,让智能体可以直接通过名称启停服务,并拿到可用于路由的 provider/model 引用。

插件定位

dsh-local-model 是一个 DeepSeek Harness 插件,由 miloye7711-dotcom 维护。它通过 DSH 的 subprocess 能力,接管本地推理服务(如 Strata、Ollama、llama.cpp 等)的进程生命周期,并提供状态查看、启停切换与诊断能力。插件本身不负责路由,只是负责把服务拉起来,再把 provider/model 引用交给模型路由使用。

核心功能

  • 声明式服务配置:在 YAML 中列出要启动的服务,包括命令、参数、工作目录、端口、路由名称等。
  • 进程生命周期管理:通过 start、stop、toggle 等动作启停服务,支持 exclusive 模式避免资源冲突。
  • 健康检查:通过 HTTP 请求(默认 /v1/models)探测服务是否可用,当服务列出至少一个模型时视为“已就绪”。
  • 命令行与 UI 两种控制方式:可通过 /local-model 命令或 Composer 面板中的快捷芯片进行操作,支持全局快捷键(Ctrl+Shift+L / Cmd+Shift+L)。
  • 诊断日志:diag <text> 会把带时间戳的日志写入 ~/.dsh/local-model/client-diag.log。

安装与启用

目前该插件尚未发布到 npm。需要从源码构建后,通过本地路径或 pnpm link 集成到 Harness 工作区中。

  1. 克隆仓库并安装依赖:
git clone https://github.com/miloye7711-dotcom/dsh-local-model.git
cd dsh-local-model
pnpm install
pnpm run build
  1. 将构建产物挂载到 Harness:
    - 通过绝对路径挂载:将 lib/ 和 client/ 复制到 Harness 期望的位置,或使用 file: 依赖将其打包进 profile 的 node_modules。
    - 使用 pnpm link:在 Harness 工作区中执行 pnpm link,将插件链接到 Harness 的加载路径。

  2. 在 Harness 的配置中声明该插件,并在 profile 的依赖中指向插件入口(lib/index.js)。

典型用法

声明服务

在 Harness 配置中声明要管理的本地服务。以下示例包含 Ollama 与 Strata 两个服务:

- id: local-model
  name: 'dsh-tool-local-model'
  config:
    default: strata        # 默认服务,bare toggle 与 composer chip 使用
    exclusive: true        # 启动一个服务时停止其他服务
    servers:
      ollama:
        command: 'ollama'
        args: ['serve']
        cwd: '%USERPROFILE%'
        port: 11434
        provider: 'ollama-local'

      strata:
        command: 'D:\Strata\.venv\Scripts\python.exe'
        args:
          - 'D:\Strata\serve\server.py'
          - '--engine'
          - 'strata'
          - '--config'
          - 'D:\Strata\strata-iq2_xs.json'
          - '--port'
          - '8080'
        cwd: 'D:\Strata'
        port: 8080
        provider: 'strata-local'

    startTimeoutMs: 900000   # 冷启动超时(默认 15 分钟)
    probeTimeoutMs: 5000     # 就绪探测超时(默认 5 秒)

命令行操作

  • 查看状态:
/local-model status
  • 查看当前运行的服务:
/local-model list
  • 启动 Ollama:
/local-model start ollama
  • 停止所有插件管理的服务:
/local-model stop all
  • 切换默认服务(启动或停止):
/local-model toggle

通过 Composer 控制面板

  • 在对话编辑器 dock 中,本地模型 芯片用于切换默认服务。
  • 点击 ▾ 打开 272px 宽的面板,显示所有已配置服务的状态(● 表示运行,○ 表示未运行),并为每个服务提供 用 <provider/model> 按钮,用于在模型路由中选择对应引用。
  • 状态文本也会通过宿主命令输出到对话记录中。

在路由中使用

插件启动服务后,会在输出中给出 provider/model 引用,例如:

→ ollama: answering on port 11434 - ollama-local/qwen2.5:7b

在模型路由配置中,使用该引用作为 provider:

- id: llm-pi-ai
  name: '@deepseek-ai/dsh-llm-pi-ai'
  config:
    providers:
      ollama-local:
        api: openai-completions
        baseURL: http://127.0.0.1:11434/v1
        headers: { Authorization: 'Bearer ollama' }
        models:
          - id: qwen2.5:7b
            name: 'Qwen2.5 7B (Ollama)'
            contextWindow: 32768
            maxTokens: 8192

诊断日志

/local-model diag <text>

会将带时间戳的文本追加到 ~/.dsh/local-model/client-diag.log,便于排查连接与就绪问题。

适用场景与注意事项

  • 适用场景:
  • 需要在对话中动态启停本地推理服务的智能体开发。
  • 需要统一管理多种本地推理后端(Ollama、Strata、llama.cpp 等)的开发环境。
  • 希望通过声明式配置替代脚本与硬编码的服务启动方式。

  • 注意事项:

  • 插件以当前 Harness 进程的权限运行,安装前应检查源码与许可证(MIT)。
  • 插件仅管理自己启动的进程,对于已在外部启动的服务,stop 会拒绝操作。
  • exclusive 默认为 true,避免多个本地引擎竞争设备内存,如需同时运行多个服务,需显式设置为 false。
  • 服务就绪的判断基于 HTTP GET <modelsPath>(默认 /v1/models),仅当服务列出至少一个模型时才视为可用。

小结

dsh-local-model 把本地推理服务的管理流程抽象为配置与工具调用,让智能体可以通过名称启停服务,并获取 provider/model 引用用于路由。它不引入新的能力边界,而是通过现有 subprocess 能力实现进程生命周期控制,并通过健康检查保证服务就绪状态,适合在本地开发与调试环境中使用。

  • 插件目录页:https://www.skillhub.cn/plugins/miloye7711-dotcom/dsh-local-model
  • GitHub 仓库:https://github.com/miloye7711-dotcom/dsh-local-model
羽毛球分组比赛记分
小程序二维码

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

Xiaoye