前言¶
智能体跑起来之后,真正难查的往往不是「它会不会调工具」,而是「这一轮到底观察过哪些事件」。DeepSeek Harness(dsh)把模型、工具、会话、沙箱和界面都做成可替换插件,一次 turn 里会连续发出工具结果和会话事件。若把提示词、参数和结果原文都落盘,审计方便,泄漏面也跟着变大;若不留任何轨迹,事后又无法回答:智能体当时看到了什么类别的事件、顺序是什么、记录有没有被改过。
qiushi-dsh-evidence-audit 走的是第三条路:只观察、不改行为,把规范化后的观察值打成 SHA-256 哈希链,写成本地 JSONL。明文提示词、工具参数、工具结果和会话 ID 默认不入库,但事件类型、工具名这类稳定审计类别会保留可读。
DeepSeek Harness 的官方定位是「一切皆插件」,目前处于 developer preview,兼容性破坏变更是预期内的。社区站点 DeepSeek Harness 插件库 收录了一批扩展,它是独立运营的目录,与 DeepSeek / 幻方没有从属、背书或赞助关系。本文按该目录详情页、GitHub README / package.json / dsh.plugin.json、npm 发布页,以及 DeepSeek Harness 官方仓库 交叉核对后整理。
这是什么¶
qiushi-dsh-evidence-audit 是一款会话与消息类插件,由 030611 维护,许可证 MIT,主要语言 TypeScript。目录页给它的定位是:DeepSeek Harness 的只读哈希链证据存证——不改变行为,就能审计智能体到底做了什么。
仓库 README 写得更具体:它是一个只观察(observe-only)的 Profile Bundle,监听官方扩展点 tools/result 与 session/event,向 JSONL 追加确定性的哈希链 evidence receipt。它不会注册模型可见工具,不会改提示词,不会转换工具结果,也不会向会话追加事件。npm 包名同样是 qiushi-dsh-evidence-audit,当前发布版本 0.1.0(2026-08-13)。截至 2026-08-18,目录页与 GitHub 均显示 5 颗星。
维护者在 README 里明确写了:这是社区项目,不是 DeepSeek 官方产物。同一作者还维护了相关 trust-layer 插件 dsh-telemetry-redactor、dsh-verification-receipt 与 dsh-context-provenance。后两者一个做逐轮启发式摘要、一个做上下文可证明性报告,都不是哈希链账本;不要把它们和本插件的能力混为一谈。
核心功能¶
只观察,不改模型体验¶
两个监听器都是 contained observer:不返回 waterfall decision,也不修改回调参数。receipt 序列化或追加失败只记日志并隔离,工具 outcome 与会话发布继续原样走下去。启动失败则相反——输出路径无效或已有哈希链损坏时,插件会明确拒绝加载,避免静默丢审计记录。
因此,提示文本、工具 schema、token、模型请求、结果和 KV-cache 行为都不会被它改掉。运行时成本是 canonical 序列化、SHA-256、每条记录的同步追加 I/O,以及启动时整链验证。
本地哈希链,不明文存正文¶
默认文件是 $DSH_HOME/evidence-audit/evidence-receipts.jsonl;DSH_HOME 未设置或为空时用 ~/.dsh/evidence-audit/evidence-receipts.jsonl。插件不会默认写到当前工作目录。操作系统支持 POSIX mode 时,默认目录权限 0700、文件权限 0600。
每一行都包含 schemaVersion、sequence、collectedAt、previousRecordHash 和 recordHash。recordHash 是对除自身以外全部字段的 canonical JSON 做 SHA-256;下一行用 previousRecordHash 提交上一行的哈希,首行的前序哈希为 null。启动时会验证整个已有文件,行、序号、记录哈希或前序链路任一无效,就拒绝继续追加。
两类 receipt 的字段不同:
session-event:会话 ID 哈希、事件类型、事件序号与时间、事件数据哈希,以及可选的ignorable标记。tool-result:工具名、调用 / 根调用 / 会话 ID 哈希、参数哈希、最终 outcome 哈希、错误标志、父调用存在标志,以及可选错误码。
事件类型和工具名保持明文,因为它们是稳定的审计类别。eventDataHash、argumentsHash、outcomeHash 不是脱敏、加密或数字签名:JSONL 不存原文,但对低熵候选值仍可离线撞哈希。receipt 文件应按敏感的假名化数据保护。
两个 feed 不做去重。DSH 可能先通过 tools/result 发布一次工具结果,随后再作为持久化的 tool/result session/event 发布;插件会有意写成两张 receipt,表示两次观察。不要把它们加总成「执行了两次工具」。
它能证明什么,不能证明什么¶
README 把边界写得很窄:
- 验证已有文件时,能检测:保留记录被改、未改写的前缀被删、链路断裂、尾部半行。
- 能说明:这个观察器在某个本地顺序里看到了哪些事件类别和哈希。
- 不能证明:命令执行正确、结果真实、文件由谁生成;也发现不了「有效后缀被整段删掉」。
- 整份文件被删后重建,没有外部锚点时,和首次使用无法区分。
- 攻击者若改写并重算后续所有哈希,自包含的无密钥 SHA-256 链挡不住。
哈希不能当作者身份证明,也不是外部 checkpoint。writeSync 成功不等于 fsync;断电或存储故障可能丢掉最后一条。多个 dsh 进程不得并发写同一个文件——没有跨进程锁,检测只发生在之后的验证,也不等于自动恢复。
兼容性是固定 commit,不是 semver 承诺¶
仓库只声称在 2026-08-13 针对 deepseek-ai/deepseek-harness commit 47f943859bef60e4160492346772ded9b24f765a 实现并测试。该 checkout 把包版本标为 0.1.0-rc.5,但验证时 npm 上还没有这个版本。因此这是 commit-pinned 声明,不代表支持 npm 上的 0.0.1-rc.1、后续 DSH commit,或某个 semver 范围。
官方安装器读取的是 package.json#dsh.bundle.patch。仓库里的 dsh.plugin.json 只是带本地 schema 的补充元数据,固定 DSH commit 不会读这个文件。前置条件为 Node.js ^22.19.0 || >=24.0.0,以及从上述已测试 commit 构建的 DSH。package.json 把 @deepseek-ai/cordis 4.0.1 列为 peer,运行时依赖 @deepseek-ai/schemastery 3.18.1。
组合烟测没有跑依赖模型的完整 DSH turn:固定浅克隆没有装工作区依赖,也没有 API 凭据。已覆盖的是真实 Cordis runtime,以及官方 bundle patch 的解析 / 应用语义。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:
dsh plugin add github:030611/qiushi-dsh-evidence-audit
需要可复现安装时,目录页的写法是把 commit 哈希接到仓库后面:
dsh plugin add github:030611/qiushi-dsh-evidence-audit#commit
把 #commit 换成实际提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
仓库 README 另外提供了从 npm 装到指定 profile 的方式(包名 qiushi-dsh-evidence-audit,当前 0.1.0):
dsh plugin --profile <profile> add qiushi-dsh-evidence-audit
dsh --profile <profile> --dump-config
把 <profile> 换成实际 profile 名,例如 README 示例里的 web。配置输出里应出现 id 为 qiushi-evidence-audit、name 为 qiushi-dsh-evidence-audit 的条目。若从 DSH 源码目录运行,按官方文档把 dsh 换成该 checkout 的 pnpm dsh。
卸载:
dsh plugin --profile <profile> remove qiushi-dsh-evidence-audit
典型用法¶
装好并确认 dump-config 里有上述条目后,插件在挂载之后开始观察实时发布。构造阶段 DSH 故意不往 session/event 打的 seed / replay 事件不会被回填。
默认 receipt 路径见上一节。若要改输出位置,覆盖值必须是绝对路径。后续 profile patch 会整行替换 config,因此要保留 name 并给出完整配置。README 中的示例是:
- id: qiushi-evidence-audit
name: qiushi-dsh-evidence-audit
config:
outputPath: 'D:\private-audit\evidence-receipts.jsonl'
自定义目标由操作者负责:插件不会改父目录权限,也不会处理链接安全。应放到其他用户写不进去的私有目录。每个进程 / profile 使用独立文件,不要让两个 dsh 实例追加同一条链。
读文件时注意:
- 用
sequence和previousRecordHash看顺序,不要按行数直接当「工具调用次数」。 - 同一逻辑工具结果可能对应一张
tool-result和一张session-event,这是两次观察,不是两次执行。 - 工具名、事件类型可读;会话 ID、参数和结果只有哈希。
- 启动失败、哈希对不上或尾部半行,说明已有文件已经不完整或被改过,先停追加再查文件,而不是手动补一行。
适用场景与注意事项¶
适合已经在本地跑 DeepSeek Harness、需要事后核对「观察器看见过什么」的开发者和运维:例如对照工具调用顺序、确认日志文件有没有被改写前缀或掐掉半行。它不适合当作合规审计的最终证据、作者身份证明,或「命令确实执行成功」的凭证。
使用前建议先接受这些限制:
- 插件与当前
dsh进程同权。安装前检查 GitHub 源码与 MIT 许可证;需要可复现安装时固定 commit。 - receipt 是假名化数据,不要贴到公开 Issue。低熵值仍可能被离线撞哈希。
- POSIX
0700/0600表达不了完整的 Windows ACL,敏感部署要单独核对 ACL。 - 启动验证成本与已有文件大小线性相关,同步
writeSync会给事件发布者增加延迟。 - 社区插件目录不是官方应用商店;本插件的兼容声明只钉在上面那个 DSH commit,升级 Harness 后应重新验证。
小结¶
qiushi-dsh-evidence-audit 把「留下轨迹」和「不落明文」拆开:监听 tools/result 与 session/event,写成可本地验证的哈希链 JSONL,同时不改智能体行为。它能发现保留记录被改、前缀被删和尾部半行,但不能证明结果为真,也挡不住整文件删除或重算后的重建链。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/qiushi-dsh-evidence-audit/
GitHub:https://github.com/030611/qiushi-dsh-evidence-audit
npm:https://www.npmjs.com/package/qiushi-dsh-evidence-audit