Back to home@0231071

llm-as-a-verifier

LLM-as-a-Verifier plugin for DeepSeek Harness (DSH): best-of-N 候选并行生成 + 概率枢轴锦标赛(PPT)验证器择优, 官方样式设置卡片, lav_status/lav_set 会话工具 | DSH 插件: 让 AI 回答经过多候选验证器选优

Stars
0
Language
JavaScript
Created
Aug 25, 2026
Updated
Aug 25, 2026

Introduction

LLM-as-a-Verifier — DSH 插件

DeepSeek Harness(DSH)的 LLM-as-a-Verifier 插件:拦截 llm/stream 瀑布,对每条用户请求并行生成 N 个候选回答,再用「概率枢轴锦标赛(PPT)」让一个验证器 LLM 对候选做两两评分,选出最优候选作为最终回复。附带设置页卡片(官方 PluginCard 样式)与 lav_status / lav_set 会话工具。

工作原理

一次用户请求(numCandidates=3, repeats=2 时):

主请求 ──拦截──┬─> 候选 A ─┐
              ├─> 候选 B ─┼─> PPT 锦标赛:环赛 3 对 + 枢轴赛 3 对,
              └─> 候选 C ─┘   每对由验证器按 1-20 分打分(repeats 次取均值)
                              └─> Bradley-Terry 胜率累计 → 最高分候选流式返回
  • 验证器默认复用被拦截请求的 provider/model(可用 verifierProvider/verifierModel 覆盖)。
  • numCandidates <= 1enabled=false 时完全直通,零额外开销。
  • 会话工具:
    • lav_status —— 查看全局配置、计数,以及当前会话的生效状态
    • lav_set —— 运行时热调全局参数
    • lav_session —— 按会话开关{"enabled": false} 只关闭当前会话(覆盖全局默认,持久化到 $DSH_HOME/llm-verifier-sessions.json,重启保留);无参数调用读取当前状态。对 AI 说"关闭本会话 verifier"即可。

目录结构

├── src/index.ts                  # Host 半侧:llm/stream 拦截 + PPT + lav 工具 + 设置命名空间
├── src/client/                   # Browser 半侧:设置卡片(官方 PluginCard 样式)
│   ├── index.ts                  #   入口:注册 settings.plugin.item 卡片
│   ├── LlmVerifierCard.tsx       #   卡片主体(标题/下拉框/输入框)
│   ├── PluginCard.tsx/.module.css#   官方风格可折叠外壳
│   ├── fields.tsx/.module.css    #   字段控件(Checkbox/Select/Input)
│   └── card-form.ts              #   staged 表单(dirty/save/reset)
├── lib/                          # 预构建产物(与本仓库源码对应,可直接安装)
├── llm-verifier.patch.yml        # --patch overlay 模板
├── install.mjs                   # 一键安装(跨平台 Node 脚本,幂等,自动备份)
├── install.sh                    # 等价 bash 版(macOS/Linux)
└── docs/                         # 测试与验证报告

安装(其他 DSH 用户)

前置:已安装 DSH 并至少成功运行过一次 dsh web(存在 ~/.dsh/profiles/web)。

方式一:一键安装(推荐,Windows/macOS/Linux 通用)

tar xzf llm-as-a-verifier-v0.1.3.tar.gz && cd llm-as-a-verifier
node install.mjs                  # 默认 ~/.dsh;DSH_HOME=/path node install.mjs 指定其他 home
# macOS/Linux 也可用等价的 bash 版:./install.sh

脚本幂等且自动备份(.backup/<时间戳>/)。完成后按提示重启:

launchctl kickstart -k gui/501/com.hanks.deepseek-harness-web   # launchd 部署
# 或手动重启你的 dsh web 进程

然后浏览器强制刷新(⌘⇧R),在 设置 → 插件配置 里即可看到带标题、带下拉框的 LLM-as-a-Verifier 卡片。

方式二:手动

  1. 把本包(含 lib/)放到 ~/.dsh/profiles/web/plugin-packages/ui-llm-verifier/,并复制一份到 ~/.dsh/profiles/web/node_modules/@deepseek-ai/dsh-client-ui-llm-verifier/
  2. ~/.dsh/profiles/web/cordis.patch.yml 追加 llm-verifier.patch.yml 的 insert 块;
  3. ~/.dsh/settings.yaml 加入:
llm-verifier:
  repeats: 2
  enabled: true
  numCandidates: 3
  verifierProvider: ""
  verifierModel: ""
  1. 重启 dsh web(Windows 直接重启你的 dsh web 进程/服务),强刷浏览器。

配置

生效值 = settings.yamlllm-verifier: 命名空间 覆盖 行级 config(两处保持一致最稳)。设置页卡片改的就是命名空间。

默认说明
enabledtrue总开关;false 时完全透明
numCandidates10=禁用 1=单候选直通 2..5=best-of-N
repeats2每个有向对的验证器评审次数
verifierProvider / verifierModel留空复用请求路由;可指向其他已配置路由
seed0PPT 环赛洗牌种子

成本提示:N=3/r=2 时一条消息 ≈ 3 条候选流 + 12 条评审流;实测约 3-4 分钟(评审并行)。时延敏感场景建议 N=2 或 repeats=1。

会话级开关:全局 enabled 是默认值;单个会话可用 lav_session 覆盖(例如日常聊天关掉、重要任务开着)。优先级:会话覆盖 > 全局设置。子 agent(subagent)会话目前跟随全局默认。

验证

  • 启动日志:grep "repo plugin started" <web 日志> 应出现 {"enabled":true,"numCandidates":3,...}
  • 会话内调用 lav_status 观察 total/selected 计数;lastError 非空说明锦标赛异常(会自动回退首个候选)。
  • 详细测试报告见 docs/

从源码构建(开发者)

依赖 deepseek-harness 仓库的共享 tsdown preset 与类型环境:

# 1) 克隆 harness 仓库并完成 pnpm install
# 2) 用本包的 src/ 覆盖 harness 仓库内 packages/client/ui-llm-verifier/src/
cp -R src/* <harness>/packages/client/ui-llm-verifier/src/
#    (client 入口约定为 src/client/index.ts;若卡片是 .tsx 请加一层 re-export 包装)
# 3) 在 harness 仓库根目录:
pnpm exec tsc -b tsconfig.client.json
pnpm --filter @deepseek-ai/dsh-client-ui-llm-verifier bundle
# 4) 产物在 packages/client/ui-llm-verifier/lib/ —— 用它替换本包 lib/ 后重新 install.sh

注意:两条 tools.register(...) 语句之间不要让后一条以 ( 开头(ESI 合并陷阱,见 git 历史);已用 const tools = ... 规避。

已知限制

  • 浏览器半侧(原版官方样式卡片)的源码是从旧构建产物的 sourcemap sourcesContent 逐字节恢复的,与 lib/client.js 完全对应;
  • 验证器评分依赖模型自觉输出 <score_A>/<score_B> 标签,解析失败按 0.5 中位处理;
  • 引擎与卡片同包名同命名空间(llm-verifier),不可与其他实现并存。