dsh-sampling-sliders:给 DSH 加一个随时可调的采样参数面板

前言

做智能体开发时经常遇到这种情况:模型默认的 temperature 或 maxTokens 不合适,想临时改一下对比效果,但每次都要去改配置文件、重启服务。如果只是想在做某次对话时把 temperature 从默认值调到 0.2,现有做法要么改全局配置影响所有会话,要么没有入口可改。

DeepSeek Harness(DSH)的理念是「一切皆插件」,这类需求正适合做成插件。下面介绍的 dsh-sampling-sliders 就是这样一个插件:在输入栏加一个「采样」按钮,点开就能用滑杆调整 temperature 和 maxTokens,对每次模型调用生效。

这是什么

dsh-sampling-sliders 是由 Semidia 维护的 DSH 插件,当前版本 0.1.0,采用 MIT 许可证。它的定位一句话可以说清:输入栏「采样」按钮弹出 temperature / maxTokens 滑杆,经 agent/request 钩子微调每次模型调用的采样参数。

它作用于所有 Provider,包括官方 DeepSeek 和第三方接入,因为拦截发生在 Provider 路由之前——不管请求最终路由到哪个模型,采样参数都会被应用。

核心功能

插件的已核实能力如下:

1、输入栏「采样」按钮,位于 conversation.input.right 插槽,点击弹出采样面板。

2、两个滑杆,各带一个「覆盖」开关:

  • temperature:范围 0–2,步进 0.05;
  • maxTokens:范围 512–32768,步进 256。

不勾选「覆盖」时该字段跟随模型默认值,不会注入。

3、热调 / 持久化两种模式:

  • 持久化:值写入 settings,长期生效,重启后仍在;
  • 热调:值仅在本次运行期间生效,下次启动自动清除。

工作原理

插件分为 Host 和 Client 两部分。

Hostsrc/index.ts)通过 inject: ['settings'] 注入 settings,注册名为 sampling-sliders 的 settings 命名空间,schema 为 { mode, temperature?, maxTokens? }。它同时监听 agent/request 瀑布事件:先 await next() 拿到机器本来会使用的 LlmCallConfig,如果命名空间里有数值,就把它们合并进返回的替换配置。启动时如果发现残留的 mode: 'hot' 值,会将其清空——这就是热调模式「下次启动自动清除」的实现方式。

Clientdist/client.js)是一个通过 window.__ModuleLoader__.load({ id, factory }) 注入的浏览器 bundle,经 connection.api.settings.describe/update/replace 读写命名空间,负责渲染按钮和弹层。

之所以滑杆只有 temperature 和 maxTokens 两个字段,是因为 LlmCallConfig 抽象层只暴露 temperature / maxTokens / stop,没有 top_p,插件没有做超出抽象层的猜测。

安装与启用

这是一个 Out-of-tree bundle,从 GitHub 直装即可,不需要 npm 账号,也不需要 npm publish。本包自带 dsh.client 元数据与 exports["./client"],客户端 bundle 会随页面加载自动注入。

完整步骤如下:

# 1. 构建
npm install && npm run build

# 2. 装进 profile(本地目录方式)
dsh plugin --profile web add link:D:/path/to/dsh-sampling-sliders

# 3. 组合挂载(两种任选其一)
#    a. 加入 profile package.json 的 dsh.profile.bundles
#       (会应用本包 cordis.patch.yml 里的 insert 行)
#    b. 在 profile 的 cordis.patch.yml 里手动加:
#       - insert:
#           - id: sampling-sliders
#             name: dsh-sampling-sliders

# 4. 重启
dsh --profile web      # 或重启 web 服务

第 1 步把 TypeScript 源码编译为 Host 产物并生成 Client bundle;第 2 步把本地目录链接进 web profile;第 3 步的两种方式效果相同,选一种即可;第 4 步重启后插件生效。

典型用法

启用后使用流程很简单:

1、在输入栏找到「采样」按钮,点击弹出采样面板。

2、拖动 temperature 或 maxTokens 滑杆到目标值,勾选对应的「覆盖」开关。两个字段可以只覆盖其中一个,未勾选的字段跟随模型默认。

3、选择模式:需要临时调试就选热调,重启后自动清除;确认这组参数要长期使用就选持久化,值会写入 settings,重启后仍然生效。

之后每次模型调用都会应用这组参数,无论请求路由到哪个 Provider。

适用场景与注意

适合的场景:

  • 调试阶段想临时压低 temperature 观察输出稳定性,改完即弃;
  • 某类任务确实需要更大的 maxTokens 上限,希望长期生效;
  • 同时使用官方 DeepSeek 和第三方接入,希望一组采样参数对所有 Provider 统一生效。

使用前有几点需要注意:

1、拦截器只在插件运行期间生效。值通过 settings 持久化,但卸载插件后不会再注入,配置也就不起作用了。

2、滑杆只有 temperature 和 maxTokens 两个字段,这是 LlmCallConfig 抽象层的边界,不是插件偷工。

3、插件以当前 dsh 进程的权限运行。安装第三方插件前,建议先阅读源码(本仓库的 Host 源码就在 src/index.ts,可以逐行核对上面描述的拦截逻辑),确认许可证与自身使用场景兼容。

结语

dsh-sampling-sliders 解决的问题很具体:让采样参数的调整从「改配置、重启」变成「点按钮、拖滑杆」,并且用热调 / 持久化两种模式区分了临时实验和长期配置两类需求。拦截点选在 Provider 路由之前,也让它对混合接入的场景同样有效。

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

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

小夜