DeepSeek Harness (DSH) 的插件生態強調模塊化。在開發涉及敏感信息的智能體時,會話日誌、終端 UI 和工具執行通常保留真實值,而真實數據一旦發出網絡請求,即存在泄露風險。dsh-llmasking 旨在解決這個問題:它在數據離開進程之前對其進行脫敏,確保模型只能看到佔位符,而會話日誌、UI 和工具執行看到的仍是實時還原的真實值。
插件簡介¶
名稱: yolorouter/dsh-llmasking
類別: admin-security
許可: MIT
維護者: yolorouter
該插件運行在 DSH 的 llm/stream 水平面。它會攔截每一次模型調用,構建一個不可變的脫敏副本發送給模型;同時包裝響應流,將佔位符在流中實時還原回真實值。這實現了“日誌保留真相,傳輸攜帶掩碼”的安全模型。
安裝與啓用¶
安裝前請確保環境滿足要求:Node >= 22,DSH >= 0.1.0-rc.6(最後驗證日期 2026-08-16)。
- 安裝插件:
dsh plugin --profile my add dsh-llmasking
- 啓動 Harness:
dsh --profile my
- 驗證插件狀態:
dsh --profile my --dump-config | grep -A1 "id: llmasking"
或者在 Web UI 的設置中檢查插件狀態,應爲 **active**。
核心功能¶
- 傳輸層脫敏:敏感值僅在從 DSH 進程到模型提供商的傳輸過程中被掩碼,絕不離開進程。
- 通用檢測器:支持郵箱、銀行卡(含 Luhn 校驗)、IP、URL、國際電話、密鑰家族(雲密鑰/PEM/JWT/Git Token/高熵密碼)。
- 區域規則:
- CN:手機號、ISO 7064 校驗的身份證號、固定電話。
- US:SSN、電話。
- 自定義關鍵詞:支持添加額外的字面量關鍵詞進行脫敏。
- 會話一致性:同一個值在當前會話中始終映射爲同一個佔位符。
- 單向刪除:脫敏後的佔位符(如
[SECRET_1])無法逆向映射回原始值。 - 流處理:攔截
llm/stream水平面的每一次調用,處理佔位符跨 SSE 邊界被分割的情況(在塊結束處 flush 並拼接)。 - 零開銷透傳:對於不含敏感數據的請求,走零開銷 passthrough 路徑。
- 失敗安全:
- 掩碼失敗:拒絕發送請求(Fail Closed)。
- 恢復失敗:在日誌中發出警告後放行(Fail Open)。
配置¶
默認配置已足夠,通常無需修改。配置通過 cordis.patch.yml 進行,採用行替換而非深度合併。
- replace:
- id: llmasking
config:
keywords: ["acme-corp-token"]
regions: ["CN", "US"]
maskSystem: true
teachModel: true
配置項說明:
* mode (默認 enforce):enforce 強制掩碼;monitor 爲影子模式,僅計數不掩碼,用於建立信任。
* keywords (默認 []):額外需要掩碼的關鍵詞。
* regions (默認 all):啓用的地理規則包(如 CN, US)。
* maskSystem (默認 true):是否掩碼系統提示詞槽位。
* teachModel (默認 true):是否在系統提示詞中添加佔位符說明,要求模型逐字復現。
使用與監控¶
Slash 命令¶
/llmasking:查看當前會話的脫敏狀態、模式、檢測器配置及統計信息。/llmasking verify:本地運行哨兵值通過真實的脫敏管道,顯示原始值 -> 佔位符的結果,用於驗證管道是否生效。/llmasking status:同/llmasking。
日誌記錄¶
每次掩碼操作會在 DSH 日誌中寫入一條收據行(僅記錄數量和類型,不記錄具體值):
llmasking: 3 value(s) masked on the wire this turn (PHONE, EMAIL, SECRET)
權限與數據¶
- 文件訪問:無。插件不讀寫用戶文件,僅讀取自身包清單以獲取版本號。
- 網絡調用:無。插件不調用任何端點、遙測或第三方服務,僅轉換 DSH 已發出的請求。
- 憑證訪問:無。API 密鑰通過適配器頭部傳輸,插件位於適配器上方,無法接觸到密鑰材料。
生態背景¶
DeepSeek Harness 的理念是“一切皆插件”。dsh-llmasking 作爲社區維護的插件,遵循 MIT 許可證,可在其 GitHub 倉庫查看源碼與目錄:https://github.com/yolorouter/dsh-llmasking