前言¶
在 DeepSeek Harness(DSH)里跑带工具的 agent,常见问题是:模型在回合结束时给出的结论,和本回合实际读过的 tool 输出对不上——漏读、误引或过度概括都会发生。事后人工对日志很慢,单靠正则又抓不全语义层面的错误。
下面介绍的 dsh-second-angle 是社区维护的工作流类 DSH 插件:在一个 Harness 回合结束后,用该回合已读到的 tool 输出作为证据,审计回答里的主张;证据矛盾时可引导修正,证据不足则标记。0.2 起还增加不调用模型的 ACTIONS 确定性模式检查(可选在 RED 模式于 tool 调用前拦截)。插件以 Harness bundle 形式安装,需 DSH >=0.2.1-rc.2 <0.3.0。
这是什么¶
dsh-second-angle(GitHub:rootsbymenda/dsh-second-angle)由 rootsbymenda 维护,在 SkillHub 插件目录 归类为「工作流」。一句话定位:给「已结束的 Harness 回合」第二个视角——对照本回合读过的 tool 输出检查回答主张,并在配置允许时用矛盾证据 steer 修正或 flag 无依据主张。
当前发布版本 0.2.1(MIT)。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 等为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
主张审计(Claims)¶
插件把审计器喂入本回合实际读过的 tool 输出,默认关闭 auditor 的 reasoning effort(auditorReasoningEffort: 'off'),并在调用模型前先做无模型的绝对词等扫描。若回合没有任何 tool read,则不会把该回合送去模型审计(memoryTurns 等门控);README 说明:仅看证据、不含 reads 的审计会把真主张也全部 flag,因此设计上避免这种路径。
审计结果可写入 Session 日志(plugin:second-angle/verdict)、stderr、Harness logger,并可注入 notice(flagNotice 等,见配置表)。
ACTIONS(0.2,默认不调用模型)¶
ACTIONS 用确定性模式观察已提交的 tool 请求、暴露的 reasoning 与可见文本;默认 report(actionsMode: flag)。设为 block 时,可在 tool 运行前拒绝 RED 类 action 模式(SAID-VS-DID 仍为仅报告)。设 claimsEnabled: false 可关闭主张审计,只保留免费的 ACTIONS 路径。
同步与 steer¶
mode: sync(默认):在回合关闭前等待裁决,矛盾时可在同一回合 steer 修正(steer,且requireQuoteForSteer默认要求引文能在 tool 输出中找到)。mode: async:回合先结束,裁决稍后附上;矛盾可通过asyncContradicted配置为 notice、followup 或 flag。
README 中的私有 bench 描述(非用户案例):在 thinking off、短 facts-and-limits card 下,对含 3 个已知错误与 3 个真主张的答案,5/5 次 run 标出全部 3 个错误,单次约 16 秒;开短 thinking 约慢 9–11 倍且未更准确。这些数据来自维护者自述测试,非第三方统计。
安装与启用¶
插件是 harness bundle(package.json 中 "dsh": { "bundle": … })。示例使用随 Harness 提供的 headless profile;若用 npx @deepseek-ai/dsh 运行,将命令中的 dsh 替换为 npx @deepseek-ai/dsh。dsh plugin 使用 PATH 上的 pnpm。
要求:DeepSeek Harness >=0.2.1-rc.2 <0.3.0(engines.dsh);Node ^22.19.0 || >=24.0.0。旧版 0.1.x Harness 可能装包但不加载。安装前请将 Harness 升到兼容范围。
从 release tarball(预构建,无需 build)¶
curl -LO https://github.com/rootsbymenda/dsh-second-angle/releases/download/v0.2.1/dsh-second-angle-0.2.1.tgz
dsh plugin --profile headless add ./dsh-second-angle-0.2.1.tgz
从 GitHub 固定 commit¶
dsh plugin --profile headless add github:rootsbymenda/dsh-second-angle#<commit>
从 Git 安装会触发 prepare(tsc -p tsconfig.build.json)。首次 add 可能因 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 中止;按终端提示在 profile 的 pnpm-workspace.yaml 的 allowBuilds 中加入 pnpm 打印的 key(长行换行需无空格拼接),再执行同一 add。Git 安装会先拉取约 105 MB 构建工具;tarball 无需 build。
验证安装:
dsh --profile headless --dump-config
配置树中应出现 # == dsh-second-angle layer。运行任务:
dsh headless "<task>"
配置¶
在 profile 的 cordis.patch.yml(默认 $DSH_HOME/profiles/<profile>/ 或 ~/.dsh/profiles/<profile>/)中覆盖插件行;patch 会替换整行 config。新 profile 若文件为 [],需改为包含插件条目。
示例(字段均可选):
- id: second-angle
config:
mode: sync # sync | async
maxLatencyMs: 45000
auditorReasoningEffort: 'off'
# cardFile: /path/to/house-facts.txt # 每行一条事实,追加到 card
flagNotice: true
常用项摘要:
| 字段 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
claimsEnabled |
true |
主张审计;false 仅 ACTIONS |
actionsMode |
flag |
flag / block(RED 预拦截)/ off |
mode |
sync |
同步等裁决或异步附加 |
maxLatencyMs |
45000 |
超时放弃审计 |
steer |
true |
矛盾时引导修正 |
flagRecord |
true |
写入 Session 记录 |
flagStderr |
true |
headless 下诊断走 stderr |
完整字段见 GitHub README Configure 节。cardFile 指向的文件在加载时读取;缺失会导致插件无法激活(启动警告 1 entry did not activate)。
典型用法¶
- 升级 Harness 到
>=0.2.1-rc.2 <0.3.0,用 headless(或其它 profile)安装 0.2.1 tarball 或 pinned GitHub commit。 - 用
--dump-config确认dsh-second-anglelayer 已加载。 - 对会调用 tool、且回答依赖 tool 输出的任务运行
dsh headless "<task>";在 stderr / Session log /(若开启)notice 中查看plugin:second-angle/verdict与plugin:second-angle/actions。 - 若只需 ACTIONS、完全不走模型审计,在 patch 中设
claimsEnabled: false;若要在危险 action 模式执行前拦截,设actionsMode: block并配置actionsAllowedHosts等。
适用场景与注意¶
适合:你在 DSH 里开发或运行多步 tool agent,希望在回合结束(或 tool 调用前,block 模式)自动核对「说了什么」与「读到了什么」,并把结果进日志或 UI notice。
注意:
- 插件与当前 dsh 进程同权限运行;安装前请阅读仓库源码与 MIT 许可证,确认审计模型路由、证据截断(
maxEvidenceChars默认 48000)与 host 策略符合你的部署安全要求。 - 审计默认可能调用与主回合相同或单独配置的 LLM(
auditorProvider/auditorModel);ACTIONS 路径本身不调用模型。 - 社区目录页星标等元数据以站点为准;仓库 README 为安装与行为的主要依据。
结尾¶
dsh-second-angle 把「本回合读过的 tool 输出」当作 ground truth 来源,在 Harness 工作流里补一层主张与 action 的复核,减少 tool 已给出证据仍答错的情况。目录与源码: