shuiiiiimu/dsh-selfharness ↗★ 0
dsh-selfharness
Harness 层递归自我改进:把 Harness 物化成可版本化的 Harness Pack,从真实会话轨迹里挖缺陷、提议改进、在留出集上配对评测,只有过门控的候选才会生效。 适合需要对Harness进行自动化缺陷挖掘、版本评测与自进化的高级用户。
Install
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:shuiiiiimu/dsh-selfharnessREADME
Read the full README ↗3. 配置
所有字段可选,写在 profile 的 cordis.patch.yml 里:
- id: selfharness
config:
enabled: true
toolApproval: mutating # always | mutating | never
pinnedRev: 0003-a1b2c3 # 钉住一个已知可用的版本
agentModel: { provider: deepseek-official, model: deepseek-flash, reasoningEffort: high }
budgets:
maxRoundsPerDay: 4
maxRolloutsPerRound: 400
autoPauseAfterConsecutiveNoImprovement: 3
phaseShares: { screen: 0.1, confirm: 0.8, recheck: 0.1 } # 轮内预算按阶段硬闸
noiseCalibrationTarget: 4 # 同一 rev 的基线样本数,够了才允许能力通道
noiseCalibrationRepeatsPerRound: 2 # 每轮最多花几次基线重复来标定 δ
gates:
screenK: 1
confirmK: 3
noiseFloor: auto # auto = 由 (rev,model,suite,split,k) 池标定
capabilityFloorTolerance: 0.03 # τ_cap:非劣边界(≠ δ_noise)
capabilityAlpha: 0.05 # 单侧显著性水平
minDiscordantPairs: 5 # 达不到就只能说「证据不足」
targetMde: 0.05 # 面板上的 MDE 目标
risk: { requireHumanApprovalFor: [tool-policy, doctrine, skills, permissions, self-modification, request-policy, proposer-policy] }
crossModel: { enabled: false, arm: { provider: xiaomi, model: mimo-v2.6-pro },
critic: { provider: xiaomi, model: mimo-v2.6-pro }, required: false }
taskFactory: { enabled: true, stabilityRuns: 3, mainTaskTarget: 30 }
population: { archiveLimit: 200, routingEnabled: false }
requestPolicy: { enabled: false, audit: true } # 审计始终开;策略默认关
selfModification: { enabled: false, minStableRounds: 5 }
| 字段 | 默认 | 说明 |
|---|---|---|
rootDir | /.dsh/selfharness | Pack 仓库 + 台账;这个目录本身是一个 git 仓库 |
dataDir | $DSH_HOME/storages/selfharness | selfharness.db |
enabled | true | 全局 kill switch:false 时读面照常、写面拒绝 |
toolApproval | mutating | 只读工具不申请批准;花钱/改 Harness 的三个(run / maintain / decide)强制申请。headless 部署把它设成 never(等于「这个部署自己有闸门」) |
pinnedRev | 无 | 钉住一个版本,忽略 ledger/active.json |
budgets.maxRoundsPerDay | 4 | 每日轮次上限;熔断只挡写操作 |
gates.confirmK | 3 | 阶段 2 每任务重复次数 |
gates.minEvidenceCount | 3 | 缺陷成案所需的独立证据条数 |
gates.noiseFloor | auto | auto = 由 (packRev, model, suite, split, k) 基线池标定;给数字可钉死(复现实验用) |
gates.capabilityFloorTolerance | 0.03 | τ_cap:非劣边界(2–5pt)。它与 δ_noise 是两个旋钮:δ 回答「有没有变好」,τ_cap 回答「有没有明显变坏」 |
gates.capabilityAlpha / minDiscordantPairs | 0.05 / 5 | 预注册的单侧能力检验;不一致对数不够时判决是 insufficient-evidence 而不是 reject |
budgets.phaseShares | 0.1/0.8/0.1 | 轮内 rollout 按阶段硬分配;超限抛 BudgetExhausted,候选记 insufficient-evidence |
budgets.noiseCalibrationTarget | 4 | 同一 rev 的基线样本少于它时,能力通道被禁用,本轮最多只能 defer |
crossModel.* | 关闭 | F1:异族迁移臂 + 异族审查者。enabled 不等于泛化成立——无数据时门控报 undetermined |
population.routingEnabled | false | F3:按任务族路由到不同 rev。默认关闭时行为与单 pack 完全一致 |
requestPolicy.enabled | false | 面 D:按任务族覆盖 reasoningEffort/maxTokens。关闭时行为逐字节不变 |
evalPreset / proposerPreset | selfharness-eval / selfharness-proposer | 打在这两类会话上,经验采集据此排除它们 |
预算、门控、路径与预设都是插件 Config,不是运行时状态:改它们要编辑 cordis.patch.yml
并重启 Harness,面板只做只读投影。