DeepSeek Harness (DSH) 插件:leaves615/dsh-llm-ctl

前言

DeepSeek Harness (DSH) 是一个插件化架构的智能体开发框架。在使用 Web Profile 进行 LLM 调用开发时,开发者常面临上游 Provider 限流导致请求失败、重试逻辑难以管理、以及模型清单混乱等问题。leaves615/dsh-llm-ctl 旨在解决这些痛点,它通过接管 llm/stream 和 agent/request-error 接缝,在请求发出前进行准入管制,并提供独立的请求恢复与模型管理能力。

核心功能

该插件主要包含以下四个方面的能力:

1. 限流排队

所有 llm/stream 调用(包括 Agent 主循环、标题生成等)在发出前会先获取 Provider 的并发槽位。
* 严格 FIFO:按照先进先出顺序放行请求。
* 冷却机制:当遇到上游 429 错误时,插件会根据 Retry-After 响应头或本地指数退避策略,让整个 Provider 进入冷却期。排队中的请求会等待冷却结束再执行,而不是直接报错。
* 等待预算:设置了 maxWaitMs 等待预算,若超过预算会直接报 QUEUE_TIMEOUT,避免长时间无效等待。

2. 独立自愈

在 agent/request-error 接缝上,插件会先登记冷却状态,再询问下游。
* 兜底重试:如果未安装 dsh-llm-retry 插件,该插件会启用有界预算重试(默认 3 次)。这意味着即使没有重试插件,第一个 429 错误也不会导致任务直接失败。
* 资源隔离:只有当下游没有接管重试逻辑时,本插件才会介入重试。

3. 模型隐藏

提供 Provider 和单模型两级开关,持久化到 llm-ctl 配置中。
* 持久化与恢复:配置保存在 DSH 的设置中,支持一键恢复所有隐藏。
* 过滤与回退:隐藏默认模型时,系统会自动回退到第一个可见模型。
* 菜单集成:在模型设置页显示开关,并在模型菜单中支持按 p: 前缀过滤。

4. 上游发现

提供对 Provider 模型清单的刷新能力。
* 重发现:在 Provider 卡片上点击刷新按钮,可重新获取上游模型列表。
* 安全机制:发现请求在服务端进行,使用保存的 Credential,不经过浏览器通道,避免了密钥泄露风险。

安装与启用

前置条件:DSH web profile,Node.js >= 22。插件在 @deepseek-ai/dsh-llm 0.1.2-rc.1 上测试通过。

1、执行以下命令安装插件:

dsh plugin --profile web add -w @leaves615/dsh-llm-ctl

2、重启 DSH Web 服务以加载插件:

dsh web

典型用法

安装完成后,使用默认配置即可直接运行。
* 查看开关:进入模型设置页,每个 Provider 会多出一张控制卡片。
* 排队控制:进入设置导航的 LLM 排队控制 分区,在此处调整并发上限、队列深度和等待预算。
* 菜单过滤:在模型菜单中输入 p:provider_name 可按 Provider 过滤模型。

注意事项

  • 权限与限制:本插件以当前 DSH 进程权限运行。插件本身不做计费统计、不做 Token 级限流、不做跨进程分布式队列,也不修改 Adapter 的协议逻辑。
  • 已知问题:服务端 session.modelCatalog 目前拦截不到隐藏规则(过滤仅在浏览器侧生效),且不写入自定义会话日志事件。
  • 生态关系:本插件定位为“门卫”,与负责执行重试的 dsh-llm-retry 插件互不冲突,与只搜索不隐藏的 dsh-model-search-plugin 协作共存。

结语

leaves615/dsh-llm-ctl 通过在 DSH 的关键接缝处增加逻辑,解决了 Provider 限流管理和模型可见性控制的问题,适合需要精细控制 LLM 调用流程和资源使用的开发者使用。

插件目录 | GitHub 仓库

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

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

小夜