用 qiushi-dsh-evidence-audit 給 DeepSeek Harness 留下可本地核驗的哈希鏈存證

前言

智能體跑起來之後,真正難查的往往不是「它會不會調工具」,而是「這一輪到底觀察過哪些事件」。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/resultsession/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-redactordsh-verification-receiptdsh-context-provenance。後兩者一個做逐輪啓發式摘要、一個做上下文可證明性報告,都不是哈希鏈賬本;不要把它們和本插件的能力混爲一談。

核心功能

只觀察,不改模型體驗

兩個監聽器都是 contained observer:不返回 waterfall decision,也不修改回調參數。receipt 序列化或追加失敗只記日誌並隔離,工具 outcome 與會話發佈繼續原樣走下去。啓動失敗則相反——輸出路徑無效或已有哈希鏈損壞時,插件會明確拒絕加載,避免靜默丟審計記錄。

因此,提示文本、工具 schema、token、模型請求、結果和 KV-cache 行爲都不會被它改掉。運行時成本是 canonical 序列化、SHA-256、每條記錄的同步追加 I/O,以及啓動時整鏈驗證。

本地哈希鏈,不明文存正文

默認文件是 $DSH_HOME/evidence-audit/evidence-receipts.jsonlDSH_HOME 未設置或爲空時用 ~/.dsh/evidence-audit/evidence-receipts.jsonl。插件不會默認寫到當前工作目錄。操作系統支持 POSIX mode 時,默認目錄權限 0700、文件權限 0600

每一行都包含 schemaVersionsequencecollectedAtpreviousRecordHashrecordHashrecordHash 是對除自身以外全部字段的 canonical JSON 做 SHA-256;下一行用 previousRecordHash 提交上一行的哈希,首行的前序哈希爲 null。啓動時會驗證整個已有文件,行、序號、記錄哈希或前序鏈路任一無效,就拒絕繼續追加。

兩類 receipt 的字段不同:

  • session-event:會話 ID 哈希、事件類型、事件序號與時間、事件數據哈希,以及可選的 ignorable 標記。
  • tool-result:工具名、調用 / 根調用 / 會話 ID 哈希、參數哈希、最終 outcome 哈希、錯誤標誌、父調用存在標誌,以及可選錯誤碼。

事件類型和工具名保持明文,因爲它們是穩定的審計類別。eventDataHashargumentsHashoutcomeHash 不是脫敏、加密或數字簽名: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 實例追加同一條鏈。

讀文件時注意:

  1. sequencepreviousRecordHash 看順序,不要按行數直接當「工具調用次數」。
  2. 同一邏輯工具結果可能對應一張 tool-result 和一張 session-event,這是兩次觀察,不是兩次執行。
  3. 工具名、事件類型可讀;會話 ID、參數和結果只有哈希。
  4. 啓動失敗、哈希對不上或尾部半行,說明已有文件已經不完整或被改過,先停追加再查文件,而不是手動補一行。

適用場景與注意事項

適合已經在本地跑 DeepSeek Harness、需要事後覈對「觀察器看見過什麼」的開發者和運維:例如對照工具調用順序、確認日誌文件有沒有被改寫前綴或掐掉半行。它不適合當作合規審計的最終證據、作者身份證明,或「命令確實執行成功」的憑證。

使用前建議先接受這些限制:

  • 插件與當前 dsh 進程同權。安裝前檢查 GitHub 源碼與 MIT 許可證;需要可復現安裝時固定 commit。
  • receipt 是假名化數據,不要貼到公開 Issue。低熵值仍可能被離線撞哈希。
  • POSIX 0700 / 0600 表達不了完整的 Windows ACL,敏感部署要單獨覈對 ACL。
  • 啓動驗證成本與已有文件大小線性相關,同步 writeSync 會給事件發佈者增加延遲。
  • 社區插件目錄不是官方應用商店;本插件的兼容聲明只釘在上面那個 DSH commit,升級 Harness 後應重新驗證。

小結

qiushi-dsh-evidence-audit 把「留下軌跡」和「不落明文」拆開:監聽 tools/resultsession/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

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

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

小夜