三贤人 Tri-Sages:强制选边、异议留痕的 DSH 判决插件

前言

让大模型做决定时,容易出现三种结构性失败:和稀泥(信息增加但决定没有)、许愿机(顺着提问者偏好给结论)、无法自证(同一问题两次回答不同)。DSH(DeepSeek Harness)的多智能体判决插件「三贤人」把纪律写进机制,而不是写进提示词的好意。它强制三台人格单元独立判断、互不可见,每一条判决都必须有明确的「反对理由」,并把少数派的异议逐字存档。

它是什么

三贤人(tri-Sages)是 DSH 的一个工作流插件,由 youran0faust 维护。它为 DSH 提供了一套决策支持机制:三份人格单元各自判断同一件事,必须选边(无弃权);投赞成必须写出「什么观测会推翻我」,否则系统记为反对;重大事项要求三票一致,僵局只有最年长者能签字降档。

核心功能

必须选边,反对要写理由

三台人格单元不会给出「中立」「不确定」的答案。每台都必须给出赞成或反对,落在判断域之外也要给出保留意见。投赞成的一方必须写出「可推翻」的观测条件,写不出来则该票自动记为反对。

三种判决类型

系统返回三种判决类型:APPROVED(赞成)、REJECTED(反对)、VETO(否决)。三台人格都没有回话时返回 ERROR,不会伪造判决。

异议逐字存档

每一次表决的完整记录(三份原话、投票结果、异议、人格哈希、引擎版本)会被追加写入本地 JSONL 文件。少数派的理由原样落盘,不进入摘要,不可覆盖。这使判决具备可复核性。

降档要签字

当三票不一致时,会出现僵局。只有最年长的那台人格单元可以再被问一次,由她签字把僵局改为多数决。权力转移必须留名,且会保留在账本中。

人格与契约是外部 Markdown

三份人格(少女·黄金、成女·乳香、熟女·没药)以及公共输出契约以 Markdown 文件形式放在 personas/ 目录。每次表决时现读,修改后下一次即生效,无需重启插件。

三台是什么

单元 自我描述 只问一个问题
少女 · 黄金 还没做过 这件事可能成立吗
成女 · 乳香 正在做 这件事办得成吗,代价谁付
熟女 · 没药 已经做过太多 三十年后还剩什么

每台还带一条自查,能把自己刚写下的赞成翻成反对。熟女的自查问题是:「把时间尺度缩到一代人之内,这个判断还成立吗?」

安装与启用

前置要求:DSH(@deepseek-ai/dsh)0.2.0-rc.2(清单中通过 peerDependencies 声明)+ Node.js ≥ 20。

方式 A:本地挂载(推荐)

把本目录放进 profile,在 profile 的 cordis.patch.yml 里添加:

- insert:
    - id: tri-sages
      name: ./tri-sages/index.mjs
      config:
        llmMode: live

方式 B:装成包

dsh plugin --profile <名> add <本目录路径>

装好后可通过斜杠命令或工具调用。

典型用法

斜杠命令

输入 作用
/sages 要不要把旧表删掉 跑一次表决,档位自动判断,命中敏感词自动升到重大
/sages critical 要不要现在就动手 强制按重大判:三票一致才过,任一反对即否决
/sages normal 中午吃什么 强制按日常判:多数决
/sages history 翻账本(最近 10 次)
/sages ts-000001 取回某一次完整记录(含三台原话)
/sages personas 看当前生效的三份人格
/sages help 用法

若 / 菜单里没列出它,手打完整字符串即可(和 /permission、/cache-report 一样,命令是注册好的)。

工具调用

模型侧可直接调用工具:

工具 用途
sages_vote(question, context?, criticality?, label?) 发起表决。返回票数、判决、三份原话与账本 id
sages_history(limit?, key?) 翻账本;key 可按 id(ts-000003)或 label 取回某一次
sages_personas(action?, unit?) 看当前生效的人格(sha256/字数);action:"text" 取全文

数据来源与隐私

表决时发出去的内容包括:三台各自的 system prompt(人格 + 公共契约)+ 同一份「议题 + 背景」。没有会话历史、没有工具定义、没有文件内容。三台人格不能读写文件、不能执行命令、不能调用任何工具,只能说话。

账本保存在本机 JSONL 文件 <DSH_HOME>/tri-sages/ledger.jsonl,追加写、不覆盖。除了那次模型调用,它不联网,不上传账本、不连第三方服务、不读你的会话日志。

怎么读它的判决

三条实用规则

  1. 看异议,不看票数。 一致通过说明不了什么;少数派的理由才是这套系统真正产出的东西。
  2. 只有重大事项才用 critical。 它要求三票一致、任一反对即否决;日常事用它只会得到一堆 VETO。
  3. 读 caveats。 那里装着每一台自己都不太信的部分——保留 字段通常比 理由 更接近真相。

容易读错的地方

陷阱 说明
单次读数不是结论 逐字相同的输入曾给出不同票面(同题两跑:一次 2:1、一次 3:0)。把一次结果当判断用之前,先复跑
3:0 不等于「必然对」 它只等于「三份自我在这三条轴上没有分歧」。三条轴都偏保守,所以一致通过也可能是集体盲区
confidence 不是把握度 那是那一台自己报的数,没有校准过;同一台在同一题上会在 0.56–0.86 之间漂
看报告顶部的 ⚠ 有台没回话时,它那一票是系统代投的反对,不是它的判断(账本保留该台的原始返回)
降档要看谁签的字 僵局被改成多数决,是最年长那一台签的;她的理由往往比判决本身更值得读

适用场景与注意

三贤人适合用在需要强制选边、异议留痕、不可逆决策的场景,例如是否执行某项删除操作、是否批量改写配置、是否装卸插件等。它要求使用者具备一定的审计意识:票数不是概率,一致不是正确,少数派的异议才是真正的产出。

插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。它不是法律或医疗意见,洞穴奇案在这里是测量工具,不是要它判对。

局限

  • 三台共用同一套权重。「独立」是人格层面的独立,不是参数层面的。
  • 单次读数不是结论。逐字相同的输入曾给出不同的票面;把一次结果当判断用之前,先复跑。
  • 仪器会漂移。同一个 provider/model 名可能被换成不同的后端,导致输出契约违规率与延迟发生变化。
  • 失败按保守默认处理。某一台没回话时,它那一票会被记为反对(安全优先)。
  • 实测是小样本。6 个议题 × 3 轮 + 同题复跑,不足以宣称任何统计意义上的稳定性。

卸载

dsh plugin --profile <名> remove tri-sages

本地挂载的话,删掉 profile 的 cordis.patch.yml 里那条 insert 条目即可。账本不会自动删除,位置见配置项 ledgerDir(默认 <DSH_HOME>/tri-sages/)。

结尾

三贤人把「和稀泥」「许愿机」「无法自证」三种失败形式,通过机制设计强制转化为可复核的投票过程。它不提供正确答案,只提供三份彼此不同的自我判断,以及少数派的异议留痕。如果你正在 DSH 中做需要强制选边、异议可审计的决策,可以尝试这套插件。

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

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

Xiaoye