dsh-ollama-tool-guard:用本機 Ollama 在每次工具調用前做風險判定

前言

DeepSeek Harness(DSH)裏的智能體可以讀文件、跑命令、按沙箱規則拉 URL。能力越大,誤操作或越界調用的成本越高。常見做法是依賴沙箱邊界或事後審計,但無法在「即將執行」這一刻給出可讀的二次判斷。

dsh-ollama-tool-guard 在每次工具調用真正執行前,用本機 Ollama 上的決策模型打分;普通調用靜默放行,高風險調用變成需要你確認的審批提示;若模型不可達,則全部拒絕(fail closed),不會在無審查的情況下放行。

這是什麼

維護者 Yersi88,npm 包名 dsh-ollama-tool-guard,社區分類爲 admin-security。插件通過 Cordis patch 掛在 DSH 工具調用鏈上,對每一次 harness 發起的 tool call 請求本地決策模型,再按閾值與效果類別決定是否彈出審批。

與「只靠沙箱默認策略」相比,多了一層可配置的語義判斷和顯式確認;與把調用內容發到雲端審查相比,默認本地模型路徑下,審查請求只發往本機 Ollama。

核心功能

逐調用審查

每個 tool call 都會先經過 guard。模型認爲風險可接受時,調用照常進行;需要人工介入時,界面會出現一行結構化說明,例如:

tool-guard · DELETING · outside workspace · hard to undo · bash · rm -rf /srv/data

從左到右依次是:模型推斷的操作類型(READING、WRITING、MODIFYING、DELETING、SYSTEM CHANGE)、是否在工作區內、用 plain words 說明的標記原因、工具名與簡短摘要。審批通過才執行,拒絕則阻斷;提示打開期間不會執行任何調用。

Fail closed

Ollama 或配置的模型無法連接時,工具調用不會被悄悄放行。README 中說明:此時會出現「每次調用都被拒絕」類現象,拒絕信息會指出模型名與修復方向(例如確認 ollama list 已拉取模型、檢查 Settings 中的 endpoint)。

運行時可調

在 Settings → Plugins → Tool guard 中可調整層級、閾值、連接、模型調用方式,並查看近期決策;修改對下一次調用生效,無需重啓 harness(插件代碼變更除外,見下文故障表)。

模型與隱私邊界

評判模型由本機 Ollama 提供,默認推薦 clef-flash(約 9B、磁盤約 6 GB)。也可選用 clef(更大、更謹慎)或 clef:cloud(經 Ollama 提供商,每次審查的調用會離開本機)。默認本地模型下,審查請求不離開本機;審計日誌記錄決策結果,不記錄調用正文。細節見倉庫 SECURITY.md。

配置與審計位置

用途 路徑
配置文件 ~/.dsh/tool-guard.json(每次調用重讀,改文件即生效)
審計日誌 ~/.dsh/tool-guard-audit.jsonl(每次調用一行)
圖形設置 Settings → Plugins → Tool guard

Connection 頁提供 Test saved config,發送探測問題並報告延遲或錯誤信息。

環境與依賴

  • DeepSeek Harness 0.2.x
  • Ollama 0.35.1 或更新(使用 :cloud 模型時需 0.40.6+),插件使用其 System One decision API
  • 默認模型約需 6 GB 磁盤

當前 package 版本爲 0.5.1,許可證 MIT,Node.js >= 20。

安裝與啓用

先做模型拉取(一次性,約 6 GB):

ollama pull clef-flash

再安裝插件:

dsh plugin --profile web add dsh-ollama-tool-guard

然後重啓 dsh web,並打開 Settings → Plugins → Tool guard。

若 Settings 裏看不到插件,說明「安裝 npm 包」與「註冊 bundle」是兩步:在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 中加入 "dsh-ollama-tool-guard",再次重啓 dsh web。

典型用法與界面行爲

  1. 按上一節完成安裝並在 Settings 中確認連接與模型(必要時點 Test saved config)。
  2. 正常使用 DSH Web 智能體;當某次 tool call 觸發規則,會出現上述格式的審批句。
  3. 對誤報:在 Settings 中提高對應閾值,或取消勾選相應 effect class;提示中會說明是哪條規則觸發。
  4. 無人值守或 headless、無審批界面時,可能出現 the user rejected tool "…" 且你從未被詢問——會話沒有 approval surface。此類場景應使用 skip 或 enabled: false(見 README 故障表)。

插件 client 面向 web profile,並注入 @deepseek-ai/dsh-client-ui-settings-plugins 以提供設置頁。

適用場景與注意

適合誰: 在本機跑 DSH Web、希望每次工具調用多一道本地語義門禁、且能接受延遲與 Ollama 運維成本的開發者或管理員。

權限與安全: 插件以當前 dsh 進程權限運行,與 harness 同等信任邊界。安裝前應在 GitHub 倉庫 閱讀源碼、SECURITY.md 與 MIT 許可證,瞭解保護範圍與已知缺口。

故障速查(摘自 README):

現象 原因與處理
每次 tool call 都被拒 guard 連不上模型;檢查 ollama list 與 Settings endpoint
顯示用戶拒絕但從未彈窗 無審批界面; unattended 時關閉 guard 或使用 skip
無害操作也頻繁彈窗 調閾值或 effect class
改插件代碼不生效 宿主緩存模塊;重啓 dsh web

DSH 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

延伸閱讀

倉庫內 ARCHITECTURE.md 說明分層、提問方式與閾值設定;CONTRIBUTING.md 覆蓋開發、測試與發佈。更多背景與鏈接:

  • 目錄頁:https://www.skillhub.cn/plugins/Yersi88/dsh-ollama-tool-guard
  • GitHub:https://github.com/Yersi88/dsh-ollama-tool-guard

經過上面的步驟,你可以在保持調用數據默認留在本機的前提下,爲 DSH 智能體的每一次工具調用增加可審計、可配置的本地二次意見。

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

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

小夜