dsh-quorum:大型项目启动前的虚拟内阁多 Agent 评审

前言

在 DSH(DeepSeek Harness)里用多个 Agent 讨论需求时,常见三类问题:辩论过程又长又碎,全量写入主上下文会挤掉真正要做的任务;多个 Agent 各说各话,缺少可复现的裁决机制;方案在辩论中越辩越大,成本难以收束。把一整段多轮对话直接交给主工作流,上下文污染和过度设计往往同时出现。

dsh-quorum 是维护者 oobitoooo 发布的工作流类 DSH 插件(目录页,GitHub)。它在正式启动大型项目前拉起「虚拟内阁」:三席(ProductManager / RedTeam / Architect)在各自沙箱里辩论,主工作流按相关性、可行性、经济性打分并动态调权,最多 3 轮熔断,出口只回传一份 Markdown 摘要,而不是把辩论全文灌回主上下文。

这是什么

插件当前版本为 0.4.1(见仓库 package.json),许可证 MIT,运行时要求 Node ≥ 18。它面向「需求评审」场景:输入一条需求简报,输出结构化评审报告;可选主席把结论收敛成 ≤600 字的执行摘要。与生态里同主题的 fufengyuan/dsh-council(历史人物议会形态)不是同一实现,README 明确不建议装进同一个 profile。

核心机制

编排主流程

主工作流(Orchestrator)按固定步骤运转:

  1. 为三席各建独立 messages 数组(互不可见,system 只写一次)。
  2. 每轮按权重排序,低权席位静默,并行生成(各自只读自己的上下文)。
  3. 评审团(Critic)对席位发言做匿名化(A/B/C),从相关性、可行性、经济性三维打分,并产出阻断项。
  4. Hedge 调权:高分加权、经济性驳回重罚;权重影响下一轮发言顺序、静默名单与 token 配额。
  5. 熔断:按共识、最优解、无进展、预算、3 轮上限等条件提前结束。
  6. 可选主席(Chairman)仅基于结构化材料写执行摘要。
  7. 出口经 buildReport() 生成 Markdown;辩论全文可选落盘到 $DSH_HOME/quorum/runs/<runId>.json,不回传主上下文。

三条不变量(代码层保证)

不变量 含义
隔离 任两席不共享 messages 数组或消息对象
单向入站 外部文本只能经 brief() 进入,且为编排器构造的简报
出口收窄 报告里出现连续 90 字原文即报错(允许 ≤72 字短引用)

评分、调权与熔断

三维打分(critic.js,0–10):相关性(任务词汇召回、空洞与水字惩罚、席位职责加分)、可行性(结构密度、具体动作词;含糊措辞扣分)、经济性(「从零自研 / 重写整个 / 手搓」等表述压到红线以下;复用、增量、PoC 加分)。

权重更新(weights.js):质量 5 分为中性点,经济性驳回或质量过低会乘性惩罚;投影到单纯形后权重下限 8%、上限 60%,并即时作用于发言顺序、静默(低于均分 55%)与 token 配额(0.6–1.6 倍)。

评审防偏:匿名互评;未配置独立 criticModel 时 LLM 评分权重从 0.6 降到 0.4;主席拿不到辩论全文,只能看结构化材料。

熔断(breaker.js,按顺序判定)包括:max-rounds(3 轮硬上限)、consensus、optimal、no-progress、budget(累计 token ≥ 9000)、all-rejected。

暴露的工具

工具 用途
quorum_debate 跑一场评审,返回 Markdown(json: true 可回元数据)
quorum_rules 打印席位职责、评分口径、权重与熔断规则
quorum_score 对一段发言做确定性评分(零模型,便于调提示词对齐口径)
quorum_status 本会话最近几次运行的轮次、终止原因、最终权重
quorum_panel 本机控制面板(127.0.0.1),可改人设、开评审、看过程与翻译

控制面板通过 quorum_panel(action="start"|"status"|"stop") 启停,默认地址 http://127.0.0.1:7845/。写操作需页面内嵌 token(x-quorum-token);仅监听本机回环地址。

安装与启用

配置优先级为:工具参数 > apply(ctx, config) > 环境变量 > 默认值。

README 给出的 DSH 安装示例(link 安装,源目录不宜移动):

dsh plugin --profile desktop add "C:\Users\17359\Documents\deepseek-harness\plugins\dsh-quorum"

安装后需重启客户端,由宿主在启动时挂载插件。不同机器请把路径换成你本机插件目录的实际位置。

不安装 DSH 也可直接运行(纯 ESM、零额外构建依赖):

node bin/quorum.mjs "为插件设计多 Agent 辩论评审,两周内交付" --scenario=converge-r2

仓库 npm test 串联 smoke、edge、http、panel、adversarial 等多套测试,用于验证隔离、调权、熔断、出口与面板等行为。

配置要点

典型 YAML 片段(字段以 README 为准):

dsh-quorum:
  provider: http            # auto | mock | http | harness
  baseUrl: https://api.deepseek.com/v1
  model: deepseek-chat
  apiKeyEnv: DSH_QUORUM_API_KEY
  maxRounds: 3
  earlyStop: true
  anonymize: true
  criticModel: ''
  chairman: auto
  weights: { eta: 0.9, min: 0.08, max: 0.6 }
  thresholds: { consensusQuality: 6.8, consensusSpread: 1.6, economyReject: 3.0 }
  budget: { perAgentTokens: 700, totalTokens: 9000 }
  returnTranscript: false

provider 为 auto 时:有 baseUrl 与 key 走 http;否则有 ctx.llm 走 harness;否则使用 mock 确定性剧本(如 converge-r2、never、overbudget),便于离线验证整条编排。API key 只从环境变量读取,不应写进配置文件明文。

典型用法

在 DSH 会话中调用 quorum_debate,传入需求描述即可触发一轮虚拟内阁评审,主上下文只收到 Markdown 摘要。调参或排查时可用 quorum_rules 对照席位与熔断规则,用 quorum_score 对单段发言做离线打分对齐。

需要可视化调人设或回看逐轮过程时,先 quorum_panel(action="start"),在浏览器打开本机面板;人设保存到 $DSH_HOME/quorum/personas.json,下一场辩论按新人设执行。席位内容可改,结构(id、数量归一化,最多 6 席)由插件约束,避免权重与沙箱因缺字段分支失控。

独立 CLI 演示可加 --scenario= 选择 mock 剧本,例如 README 中的 converge-r2,在不配模型时也能走通编排链路。

适用场景与注意

适合在动手做大型功能、插件或重构之前,用固定席位(提案、红队攻击、架构评估)做一次有评分、有熔断、有经济性红线的需求评审,并把结论以短摘要形式回到主任务上下文。

安装与运行前建议自行阅读仓库源码与 MIT 许可证。插件以当前 DSH 进程权限运行;配置 HTTP 提供方时通过 apiKeyEnv 注入密钥,避免把密钥写入版本库。控制面板虽只绑定 127.0.0.1,仍会在本机暴露写接口,不宜在不可信环境中长期开启。

DSH 社区插件目录(如 skillhub.cn)由社区维护,与 DeepSeek / 幻方无官方从属关系;星标与版本以 GitHub 仓库实时信息为准。

结尾

dsh-quorum 把多 Agent 辩论收成「沙箱隔离 + 三维打分 + 动态权重 + 多条件熔断 + Markdown-only 出口」的一条工作流,减轻主上下文污染,并为「谁该多说话、何时该停」提供可测试的机械规则。进一步了解与安装说明见 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜