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 智能体的每一次工具调用增加可审计、可配置的本地二次意见。

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

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

Xiaoye