🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型复核裁判 Aa728848/dsh-llm-verifier

DeepSeek Harnessv0.11.0
Aa7288486 天前有提交已提供中文文档扫描:含敏感能力

给 DeepSeek Harness 的独立裁判插件。

42.7/100
综合分
21
GitHub 星标
1,187
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-llm-verifier
npm 源 · dsh-llm-verifier 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · security
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-llm-verifier @ 0.11.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 22:57:44

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 70 处,展示前 64 条)
  • 读取本地文件
    lib/index.js:540
    return existsSync(candidate) ? candidate : void 0;
  • 读取本地文件
    lib/index.js:560
    if (override) return existsSync(override) ? override : void 0;
  • 读取本地文件
    lib/index.js:574
    for (const entry of readdirSync(profiles, { withFileTypes: true })) {
  • 读取本地文件
    lib/index.js:586
    files = readdirSync(dataDir).filter((name) => name.endsWith(".json"));
  • 读取本地文件
    lib/index.js:591
    mergeProviderDocument(file.slice(0, -5), JSON.parse(readFileSync(join(dataDir, file), "utf8")), table);
  • 发起网络请求
    lib/index.js:1736
    const response = await fetch(url, {
  • 读取本地文件
    lib/index.js:1771
    constructor(load = (path) => readFile(path, "utf8")) {
  • 写入本地文件
    lib/index.js:2550
    await mkdir(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/index.js:2552
    await writeFile(temporary, JSON.stringify(snapshot), "utf8");
  • 写入本地文件
    lib/index.js:2554
    await rename(temporary, this.file);
  • 删除本地文件
    lib/index.js:2556
    await unlink(temporary).catch(() => {});
  • 写入本地文件
    lib/index.js:4126
    await mkdir(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/index.js:4128
    await writeFile(temporary, JSON.stringify(snapshot), "utf8");
  • 写入本地文件
    lib/index.js:4130
    await rename(temporary, this.file);
  • 删除本地文件
    lib/index.js:4132
    await unlink(temporary).catch(() => {});
  • 删除本地文件
    lib/index.js:4345
    await unlink(temporary).catch(() => {});
  • 发起网络请求
    lib/client.js:4862
    const body = await (await fetch("/api/llm-verifier/statistics", {
  • 发起网络请求
    lib/client.js:4896
    const body = await (await fetch("/api/llm-verifier/statistics", {
  • 发起网络请求
    lib/client.js:4943
    const response = await fetch("/api/llm-verifier/statistics", {
  • 发起网络请求
    lib/client.js:6174
    const body = await (await fetch("/api/llm-verifier/statistics", {
  • 发起网络请求
    lib/caller-WKl-RXYy.js:153
    const send = (temp) => fetch(endpoint(route.baseURL), {
  • 写入本地文件
    lib/caller-WKl-RXYy.js:260
    await rename(temporary, target);
  • 读取本地文件
    lib/caller-WKl-RXYy.js:307
    const document = JSON.parse(await readFile(this.file, "utf8"));
  • 写入本地文件
    lib/caller-WKl-RXYy.js:374
    await mkdir(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/caller-WKl-RXYy.js:376
    await writeFile(temporary, JSON.stringify(snapshot), "utf8");
  • 删除本地文件
    lib/caller-WKl-RXYy.js:380
    await unlink(temporary).catch(() => {});
  • 读取本地文件
    lib/auto-DNZnQiuV.js:65
    const document = JSON.parse(await readFile(this.file, "utf8"));
  • 写入本地文件
    lib/auto-DNZnQiuV.js:124
    await mkdir(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/auto-DNZnQiuV.js:126
    await writeFile(temporary, JSON.stringify(snapshot), "utf8");
  • 删除本地文件
    lib/auto-DNZnQiuV.js:130
    await unlink(temporary).catch(() => {});
  • 写入本地文件
    lib/auto-DNZnQiuV.js:154
    await rename(temporary, target);
  • 读取本地文件
    src/config/criteria.ts:32
    constructor(private readonly load: (path: string) => Promise<string> = path => readFile(path, 'utf8')) {}
  • 读取本地文件
    src/engine/cache.ts:80
    const document = JSON.parse(await readFile(this.file, 'utf8')) as CacheDocument
  • 写入本地文件
    src/engine/cache.ts:128
    await mkdir(dirname(this.file), { recursive: true })
  • 写入本地文件
    src/engine/cache.ts:133
    await writeFile(temporary, JSON.stringify(snapshot), 'utf8')
  • 删除本地文件
    src/engine/cache.ts:134
    try { await replaceFile(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 写入本地文件
    src/engine/cache.ts:156
    await rename(temporary, target)
  • 发起网络请求
    src/judge/images.ts:65
    const response = await fetch(url, { redirect: 'error', headers: { accept: 'image/*' }, signal: signal === undefined ? AbortSignal.timeout(FETCH_TIMEOU
  • 读取本地文件
    src/judge/pricing.ts:133
    return existsSync(candidate) ? candidate : undefined
  • 读取本地文件
    src/judge/pricing.ts:154
    if (override) return existsSync(override) ? override : undefined
  • 读取本地文件
    src/judge/pricing.ts:168
    for (const entry of readdirSync(profiles, { withFileTypes: true })) {
  • 读取本地文件
    src/judge/pricing.ts:182
    files = readdirSync(dataDir).filter(name => name.endsWith('.json'))
  • 读取本地文件
    src/judge/pricing.ts:188
    mergeProviderDocument(file.slice(0, -'.json'.length), JSON.parse(readFileSync(join(dataDir, file), 'utf8')), table)
  • 发起网络请求
    src/judge/top-logprobs.ts:136
    const send = (temp: number | undefined) => fetch(endpoint(route.baseURL), {
  • 写入本地文件
    src/judge/top-logprobs.ts:208
    await rename(temporary, target)
  • 读取本地文件
    src/judge/top-logprobs.ts:250
    const document = JSON.parse(await readFile(this.file!, 'utf8')) as CapabilityDocument
  • 写入本地文件
    src/judge/top-logprobs.ts:325
    await mkdir(dirname(this.file!), { recursive: true })
  • 写入本地文件
    src/judge/top-logprobs.ts:327
    await writeFile(temporary, JSON.stringify(snapshot), 'utf8')
  • 删除本地文件
    src/judge/top-logprobs.ts:328
    try { await replaceFile(temporary, this.file!) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 读取本地文件
    src/process/process-selection.ts:751
    const document = JSON.parse(await readFile(this.file, 'utf8')) as ProcessStoreDocument
  • 写入本地文件
    src/process/process-selection.ts:822
    await mkdir(dirname(this.file), { recursive: true })
  • 写入本地文件
    src/process/process-selection.ts:824
    await writeFile(temporary, JSON.stringify(snapshot), 'utf8')
  • 写入本地文件
    src/process/process-selection.ts:825
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 删除本地文件
    src/process/process-selection.ts:825
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 读取本地文件
    src/telemetry/decisions.ts:212
    const document = JSON.parse(await readFile(this.file, 'utf8')) as Partial<DecisionsDocument>
  • 写入本地文件
    src/telemetry/decisions.ts:232
    await mkdir(dirname(this.file), { recursive: true })
  • 写入本地文件
    src/telemetry/decisions.ts:234
    await writeFile(temporary, JSON.stringify(snapshot), 'utf8')
  • 写入本地文件
    src/telemetry/decisions.ts:235
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 删除本地文件
    src/telemetry/decisions.ts:235
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 读取本地文件
    src/telemetry/statistics.ts:711
    const document = JSON.parse(await readFile(this.file, 'utf8')) as Partial<StatisticsDocument>
  • 写入本地文件
    src/telemetry/statistics.ts:731
    await mkdir(dirname(this.file), { recursive: true })
  • 写入本地文件
    src/telemetry/statistics.ts:733
    await writeFile(temporary, JSON.stringify(snapshot), 'utf8')
  • 写入本地文件
    src/telemetry/statistics.ts:734
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
  • 删除本地文件
    src/telemetry/statistics.ts:734
    try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-agent@deepseek-ai/dsh-session@deepseek-ai/dsh-llm@deepseek-ai/dsh-attachment@deepseek-ai/dsh-settings@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 配置LLM校验器
  • Web设置页

可配置的 DSH 原生 LLM 校验器,带 Web 设置页

v0.11.02026-10-24
· [DSH 0.2.1-rc.3 / 本机 master] 对齐宿主版本与新增会话边界 - engines.dsh 与 8 条 DSH peer 同步追加 || ^0.2.1-rc.3,全部 DSH 开发依赖精确锁定至 0.2.1-rc.3,pnpm 发布年龄豁免同步更新;Cordis 保持 4.0.5 - 审查本机 22ddee37924(rc.3 后 1533 个提交):工具执行器拆包、条件工具、会话写入收紧与图标 sprite 化未移除本插件消费的接口;新增 model/selection 不进入裁判证据 - 普通 fork 不再携带 parentSession,isSubagentSession() 明确以 origin: 'subagent' 为现行标识、仅为历史记录保留 parent 兼容读取;回归测试钉住无 parent/origin 的独立 fork 不会被误分类 - verify:release、peer 检查、宿主 engines/peer 回退兼容调用与构建产物加载均通过;本机 HEAD 的 Host/Client 调用面通过独立声明镜像类型检查 Full Changelog:
v0.10.12026-10-17
· [DSH 0.2.1-rc.1 / 0.2.1-rc.2] 对齐宿主预发布候选线与 vendor cordis 4.0.5 - engines.dsh 与 8 条 @deepseek-ai/dsh-* peerDependencies 同步追加 || ^0.2.1-rc.1 || ^0.2.1-rc.2,@deepseek-ai/cordis peer 追加 || ^4.0.5 - 全部 DSH 开发依赖精确锁定至 0.2.1-rc.1(与 0.2.1-rc.2 在消费的 16 个包上源码与类型逐字节一致,且已在 npm 全量就绪),@deepseek-ai/cordis 同步锁定至 4.0.5,pnpm peers check 全绿 - alpha.5 → rc.1 宿主仅晋升包版本号;rc.1 → rc.2 新增 ui-deepseek-model-label-1017 与设置开关后的 DeepSeek Search / Fetch API(web/web-deepseek-api、ui-settings-web-search),本插件消费的 16 个宿主包源码零改动 Full Changelog:
v0.10.02026-10-17
· [DSH 0.2.1-alpha.5] 对齐宿主并采用新版兼容声明 - 新增顶层 engines.dsh,供 0.2.1-alpha.3+ 宿主与插件市场优先读取;8 条 @deepseek-ai/dsh-* peer 保留为旧宿主回退,两套范围均覆盖 0.2.1-alpha.1–alpha.5 且由回归测试强制一致 - DSH 开发依赖精确锁定 0.2.1-alpha.5,避免 npm next 的 0.2.1-rc.1 被未审查地纳入类型门禁;@deepseek-ai/cordis 同步到 4.0.5-alpha.2,pnpm peers check 全绿 · [修复] 子 Agent 动态在途探针改用真实执行状态 - 不再把 subagents.listChildren() 的持久目录项误读为 kind/activity 活动记录;改用 AgentRegistry.list() 按父子关系发现运行中的后代,并以 visited 集合防环 - 旧 Job-backed 回退按宿主契约修正为 jobs.list(agent.id);新版 managed activation 继续复用既有启动回执与 subagent-settled 日志判定,不把所有后台 Job 纳入门控 · [新能力评估] 不为换新而替换稳定路径 - 话题侧车不迁到实验性的 appendPluginRecord();裁判传输不改写为 prepareCall();PTC 展示 meta 不作为模型证据;working-directory/change 不改变侧车归属 - index.test.ts 新增清单一致性与 Agent/Job 动态探针回归 Full Changelog:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH LLM Verifier 给 DeepSeek Harness 的独立裁判插件。 主智能体干活,另一个模型验收:比候选、看进度、判交付,并在宿主生命周期边界上自动门控。 它做什么 - 裁判不是主模型。判官在设置里任选服务商与模型,只看观测到的 stdout/stderr 与真实文件 diff,不看智能体的自我陈述。 - 五档能力:两个候选做比较、多个候选择优、长任务看进度、还没有候选时自己起草、整个会话判交付。 - 自动门控。smart / strict 策略在智能体准备停止时自行判断该复核什么,不通过就 steering 让智能体修复,而不是指望模型主动想起工具。 - 判决可解释。每次调用都有逐判据分数、实际走的评分通道、token 与费用,看板能回答「这次为什么没通过」。 - 数据不出本地之外的边界之外。证据先脱敏限长,只发给你选定的判官。 安装 dsh plugin --profile web add dsh-llm-verifier dsh web 打开 设置 → LLM Verifier,选判官模型即可。默认只启用显式工具;需要自动门控时把调用策略切到 smart。
展开完整文档(README 剩余 1 节)
DSH LLM Verifier

给 DeepSeek Harness 的独立裁判插件。

主智能体干活,另一个模型验收:比候选、看进度、判交付,并在宿主生命周期边界上自动门控。

它做什么

- 裁判不是主模型。判官在设置里任选服务商与模型,只看观测到的 stdout/stderr 与真实文件 diff,不看智能体的自我陈述。
- 五档能力:两个候选做比较、多个候选择优、长任务看进度、还没有候选时自己起草、整个会话判交付。
- 自动门控。smart / strict 策略在智能体准备停止时自行判断该复核什么,不通过就 steering 让智能体修复,而不是指望模型主动想起工具。
- 判决可解释。每次调用都有逐判据分数、实际走的评分通道、token 与费用,看板能回答「这次为什么没通过」。
- 数据不出本地之外的边界之外。证据先脱敏限长,只发给你选定的判官。

安装

dsh plugin --profile web add dsh-llm-verifier
dsh web

打开 设置 → LLM Verifier,选判官模型即可。默认只启用显式工具;需要自动门控时把调用策略切到 smart。

五个工具

| 工具 | 什么时候用 |
| verifier_compare | 恰好两个候选,需要一个独立判断 |
| verifier_select | 三个以上候选,需要排名 |
| verifier_track | 多步任务,想知道真实进度 |
| verifier_best_of_n | 还没有候选,且选错的代价高 |
| verifier_current_session | 显式验收当前会话 |

verifier_best_of_n 是唯一会自己生成候选的工具,也是最贵的;其余四个只在已有材料上判断。

文档

| 文档 | 说什么 |
| docs/ARCHITECTURE.md | 仓库形状、数据流、跨模块不变量 |
| docs/DESIGN.md | 评分、赛制与运行策略的取舍 |
| docs/HOST-COMPAT.md | 支持的 DSH 版本线、兼容读取点、升级流程 |
| docs/adr/ | 一条决策一页 |
| docs/CHANGELOG.md | 版本历史 |
| docs/NOTICE.md | 上游授权与致谢 |

开发

pnpm install
pnpm run build # 生成 lib/,宿主加载的就是这份产物
pnpm test # vitest,测试在 test/<域>/
pnpm run verify:release

提交前跑 pnpm run verify:release。其余约定见 CONTRIBUTING.md。

许可

MIT。算法移植自 llm-as-a-verifier,见 docs/NOTICE.md。
预览分享卡片长什么样 ↓Aa728848/dsh-llm-verifier
分享 · DeepSeek Harness Hub
Aa728848/dsh-llm-verifier

给 DeepSeek Harness 的独立裁判插件。

这是你的仓库?认领条目

回到顶部