dsh-judgment:在 DSH 里做批量结构化概率判断

前言

在 DeepSeek Harness(DSH)里做智能体,常见做法是让主模型在对话里「想一步、答一步」:选动作、估置信度、打分级。主模型擅长生成,但把领域判断拆成很多轮零散提问时,同一份状态会被重复发送,成本和延迟都会上去。社区插件目录里有一类「模型推理」插件,专门把判断能力接到外部决策模型上。dsh-judgment 走另一条路:一次调用带上一份状态和一批评名问题,拿回一批带概率的结构化答案;循环、阈值和重试留在你的 agent 侧。下面按安装、配置和消费方式说明它当前能做什么。

这是什么

dsh-judgment 由维护者 j62268781-alt 发布,归类为模型推理。它在 DSH 里注册 ctx.judgment 服务,不向模型暴露工具(零工具面);README 的表述是「它判断,消费者决定」——插件只做批量概率判定,不提供观察、寻址、loop 转移等循环逻辑。

一次判断调用的形状是:一份状态 + 一批命名问题 → 一批概率答案。状态每批只发一次;README 称相对「一次问一个问题」约有 38 倍量级的成本差异(以文档表述为准)。

当前实现的三种问题原语:

原语 语义 答案
noul 单个概率 p ∈ [0,1](是/否) { probability }
choice 2–255 个互斥候选单选 { optionId, probabilities }(完整分布)
score 2–10 个有序级别 { value, probabilities }(value 为级别位置,可为小数)

类型契约在包导出路径 dsh-judgment/contract,仅类型、零运行时依赖,便于消费方 import type 对齐接口。

核心功能(文档中的能力清单)

以下均来自仓库 README 的「诚实清单」,未标注为可用的不写入。

  • Service 与配置:ctx.judgment;连接层 × 用途层两层配置;设置页(增删改、密钥、自检按钮)。
  • 调用面:ask() 批量判断、health() 远端自检;README 写明已在 SystemOne 真端点实测(约 500ms 量级)。
  • 协议:system-one(noul)真网实测;openai-decisions(predicate)按公开文档核对,文档注明仍无真机。
  • 严格校验:答案集合一致、分布完整、归一化容差 0.02、argmax 1e-6、模型名快照等;失败即拒、不自动修复。
  • 校验失败信息:结构化字段(规则、候选数、Σp、容差)并记入 ledger,供消费方确定性决定如何缩候选重采。
  • 审计与计量:发包前落审计 ledger;记录 token、耗时、request_id、指纹;落盘失败不阻断判断。
  • 本地配额:连接层 / 用途层可选护栏,默认不限(0);文档强调这是本地护栏,不是账户额度。
  • 未实现:工具面 judgment/llm-face 为可选组件,默认关闭。

插件更新后需重启 DSH(host 半为 Node 侧模块,进程启动时加载一次);自检若报 HTTP 404 或 transport failure,多与 host 未重载有关。

安装与启用

安装命令以 README 为准:

# 从 npm(推荐;当前 0.1.0)
dsh plugin --profile <profile> add dsh-judgment@0.1.0

# 或从 GitHub 装(仓库根带 cordis.patch.yml,可直接作为插件包安装)
dsh plugin --profile <profile> add github:j62268781-alt/dsh-judgment

# 或本地路径(开发用;profile 名见 ~/.dsh/profiles)
dsh plugin --profile <profile> add /绝对路径/dsh-judgment

装完后重启 DSH,在 设置 → 决策 里配置连接;连接卡片右上角 ⋯ 菜单中有自检。许可证为 MIT(package.json)。

密钥不写进 YAML:通过 credentialRef 引用环境变量名(如 JUDGMENT_API_KEY_1),或在设置页填写;优先级为启动环境 > 存储文件 > 项目 dotenv > 用户 dotenv。运行中新增环境变量不会被读到,需在启动 DSH 前设好。

配置:连接与用途

配置可在设置页完成,也可写入 profile 的 cordis.patch.yml。连接层是一条 (协议, 地址, 模型, 凭据) 元组;用途层给消费者稳定的逻辑名,未知用途名直接报错,不静默换连接。

- id: judgment/provider
  name: dsh-judgment
  config:
    connections:
      typesafe-main:
        protocol: system-one        # system-one | openai-decisions
        baseUrl: https://api.typesafe.ai/v1/systemone
        model: typesafe/jev-1.13
        credentialRef: JUDGMENT_API_KEY_1
        timeoutMs: 10000
    purposes:
      browser.action: { connection: typesafe-main }
      compaction.retain: { connection: typesafe-main }
    defaultConnection: ''

第二套协议示例(端点 /v1/decisions,模型名以你账户为准):

    connections:
      openai-decisions:
        protocol: openai-decisions
        baseUrl: https://api.openai.com/v1/decisions
        model: gpt-6-luna
        credentialRef: JUDGMENT_API_KEY_2

README 注明:openai-decisions 官方可传消息数组与图片,本插件的 state 以 JSON 字符串发出,不支持图像输入;视觉判断应走主模型侧。

典型用法

README 给出的消费方示例(类型来自 dsh-judgment/contract):

import type { ApiVersion, Judge } from 'dsh-judgment/contract'

const EXPECTED: ApiVersion = 1
const judge = ctx.get('judgment') as Judge | undefined
if (!judge || judge.apiVersion !== EXPECTED) return useFallbackJudge()

const state = { page: 'a11y 摘要……' }
const questions = {
  action: {
    kind: 'choice',
    prompt: '哪一步最能推进当前任务?',
    options: { e0: '点击「搜索」', e1: '在输入框输入' },
  },
  goal_done: { kind: 'noul', prompt: '任务目标已经达成' },
  retain: { kind: 'score', prompt: '这段输出要逐字保留多少?', levels: ['丢弃', '截断', '保留'] },
}

const result = await judge.ask(state, questions, { purpose: 'browser.action' })

for (const [id, answer] of Object.entries(result.answers)) {
  if (answer.kind === 'abstain') continue
  if (answer.kind === 'choice') console.log(id, answer.optionId, answer.probabilities)
}

const now = judge.fingerprint(state, questions, { purpose: 'browser.action' })
if (now !== result.fingerprint) return 'stale_state'

文档列出的实战消费方包括 dsh-agent-browser:通过 ctx.get('judgment')、apiVersion 与 status().purposes[].usable 门控后再批量 ask。动作域用途预设 browser.action 建议 choice 候选数 ≤ 16;候选过多时可能触发 distribution-normalized 类校验失败,消费方应缩候选重采,而非指望插件放宽容差。

校验失败时可用 JudgmentError 的 invalid-response 与 validation 字段做确定性重试策略(provider 本身不重试)。

适用场景与注意

适合谁:需要在 agent 循环里把「选动作、是否完成、保留强度」等判断拆成结构化概率题,并接到 TypeSafe Jev、OpenAI Decisions(Luna)或兼容端点的团队;愿意自己实现循环、指纹比对和 invalid-response 重采逻辑。

权限与安全:插件以当前 DSH 进程权限运行,会访问你配置的远端 API 与本地 ledger;安装前请阅读源码与 MIT 许可证,自行评估凭据与出站请求。

生态说明:DSH 采用「一切皆插件」;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。GitHub 仓库当前星标数为 1(以目录页信息为准)。

结尾

dsh-judgment 把「领域判断」收敛成「状态 + 批量命名问题 → 概率答案」,用严格校验、审计 ledger 和用途层配置把推理端点接到 DSH 里,而把策略与循环留给 agent。若要查看简介与分类,可打开 SkillHub 目录页;源码与完整设计见 GitHub:j62268781-alt/dsh-judgment。

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

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

Xiaoye