Перейти к основному содержимому
X

dsh-decision-layer

xbzbing/dsh-decision-layer

A structured decision layer for the DeepSeek Harness agent loop: a danger-call gate, output self-check, tool narrowing, and loop guard backed by a pluggable adjudication model.

Установка

dsh plugin --profile web add github:xbzbing/dsh-decision-layer

README

dsh-decision-layer

English | 简体中文

DeepSeek Harness(DSH)的结构化裁决插件。它把有明确判断标准的问题交给同协议的裁决后端,供 agent 在需要时使用,并在 agent loop 上接入危险门控、产出自检、工具收窄和防循环等自动介入。

0.5.5 是体验版。 插件功能已可用,但裁决介入能带来多少实际价值仍在探索中——各决策点的阈值都是未经验证的启发式默认值,建议先以观察心态体验,别当成经过验证的效果保证。功能与后续进度以 ROADMAP.md 为准。

安装

已发布到 npm 与 GitHub。

从 npm 安装(补 @latest):

dsh plugin --profile web add dsh-decision-layer@latest

或从 GitHub 安装(不带版本,跟随分支或 tag;仓库已含构建产物 lib/client.js):

dsh plugin --profile web add github:xbzbing/dsh-decision-layer

也可从源码本地构建后用 file: 安装:

npm ci --ignore-scripts
npm run build:client
dsh plugin --profile web add file:/绝对路径/dsh-decision-layer

安装或更新后需重启 dsh web 服务再刷新页面:host 与 client 两半在服务启动时生成挂载与 bundle 清单,仅刷新页面可能看不到变化。插件管理 API 只接受本机 loopback Web 服务上的同源请求;把 DSH Web 绑定到所有网卡时该接口会拒绝请求。不要在未确认目标地址和数据流向前填入生产 Key。

功能

  • 手动裁决:decision_evaluate 工具与 decision-layer skill 支持显式提交 noul、score、choice 问题,decision_check_connection 做连通测试。手动调用和连通测试不计入自动裁决指标,也不改变 agent 行为。
  • 可配置后端:默认 https://api.typesafe.ai、jev-latest,URL、Key、model 可逐字段覆盖;仅支持相同的结构化裁决协议。未配置 Key 时不发送请求。自定义 HTTP 地址需针对实际目标确认明文传输风险,地址变更须重新确认。
  • 危险门控:破坏性工具调用执行前用脱敏摘要请后端裁决,采用两档模型——只有模型高置信判定「拒绝」时才经监控守卫单调拦截该调用;其余情况(高置信放行 / 询问、低置信、后端失败或响应不合法)一律不介入,按宿主原路径执行。门控只做「确信危险才拦」的安全网,不替宿主授权、不降级审批。危险规则可增删配置。
  • 产出自检:回合结束用评分量表给最终产出打分(0–2,按各档位概率加权,可能是小数)。默认只提示、不打断;可开启「低分补完」,得分偏低且模型有把握时以你的名义追加一次补完提示,同一回合最多补一次。
  • 任务完成核对:当用户明确列出多个交付条件(编号 / 项目符号 / 多命令)时,回合结束前用单选逐项判定「已满足 / 未满足 / 证据不足」,工具证据优先、回复自述不算证据;确定性提取、不推断隐含期望。默认只观察、可配 steer,与产出自检并存、指标分列。
  • 产出质量趋势告警:建在自检数据上的只读提醒。连续多次高置信低分时,把输入框旁触发按钮的图标从灰变橙、变红,hover 提示可能是任务变难或模型波动、建议调整 prompt 或更换模型。纯提示、不驱动自动干预;高置信门槛 / 连续轮数 / 严重档三个阈值可配(默认 0.6 / 3 / 5),偏保守、待实测校准。
  • 工具收窄:回合开始时用 noul 逐个判断可选工具与本轮任务的相关性,摘掉用不上的(相关性概率低于摘除阈值,默认 0.3、可配),只在宿主已允许的集合内取交集、不扩权。默认真正生效,可切到「仅观察」只记录不改工具集。三重保护:核心工具(读写、编辑、Shell、检索、待办,以及问用户、目标、技能、交付、后台作业、协作等 agent 元能力)始终保留、不参与判定;可选工具超过候选上限(默认 20,可配)时自动降为仅观察;保留下来不足 5 个时视为判定不可信、跳过。保留工具前缀白名单里的工具(默认含 mcp__openviking、team_task_)也始终保留、不参与判定,适合记忆 / 检索、协作这类常驻、按需触发的工具。
  • 防循环:确定性判断,不走后端;同一调用连续重复超过阈值即拒绝,打断死循环。始终生效,不在决策点开关范围内。
  • 会话面板:输入框下方的 dock 触发器弹出面板,展示自动裁决指标(评估数、失败回退、模型建议与实际结果分列)、会话总开关和决策日志;无自动裁决时显示空态。总开关关闭只暂停自动介入,不影响手动裁决。
  • 决策分析页:会话内「决策分析」tab(conversation.view,与对话/轨迹平级、天然按会话隔离),基于已落盘日志做只读聚合,展示过程画像(各决策点触发数与结果分布、自检平均分)、质量趋势阈值回测、判断准确度汇总,并可对每条决策标注「判对 / 判错 / 说不准」。标注与介入面板同源:任一处标注都写入同一份日志、按决策 id 关联、取最新。只读日志、只追加标注,不改任何决策行为。
  • 决策点开关:详情页配置里,危险门控、产出自检、工具收窄各有独立开关,默认全开;关掉某个决策点就不再对应地介入。防循环不在此范围。
  • 决策日志落盘:决策记录在内存面板之外,还按会话全量落盘到 ~/.config/dsh-decision-layer/logs,供研究回看。文件按运行实例端口和日期滚动切分(decisions-<端口>-YYYY-MM-DD.jsonl),批量写入,保留 30 天。写盘为尽力而为,失败只丢当批、不影响决策路径。

安全边界

自动介入只减不增:门控只拒绝、收窄只删工具,都不给 agent 新权限。危险门控采用两档模型,只在模型高置信判定拒绝时拦截;后端失败、低置信或响应不合法时一律不介入、按原路径执行,不因裁决故障阻断,也不替宿主放行。自检、收窄与防循环异常则跳过介入。发送到后端的危险摘要只含工具名与命令 / 路径并对疑似密钥脱敏,不含文件内容。

开发

服务端使用 Node.js >=20.11(.mjs,无需构建);客户端用 TypeScript + esbuild 构建。npm test 跑本地测试,npm run build:client 生成 lib/client.js。改动客户端后需重建并连同 lib/client.js 一起提交,否则 GitHub 安装拿到的是旧 bundle。0.5.5 为体验版:介入能力已可用,但实际价值与阈值仍在探索,欢迎反馈决策日志观察到的误判与体感。

Похожие плагины