跳到正文
Hacker News· urvader·· 9 天前AI 评分66

Berget AI 开源 guardrails-md,用决策模型拦截编码智能体的 Bash 命令

Safeguard agents in plain English with decision models

AI 导读

Berget AI 开源 guardrails-md,在编码智能体执行 Bash 命令前用决策模型对命令打分,超过默认阈值 0.7 即拦截并把原因返回给智能体,判断耗时约 100 ms。

正文 · AI 翻译

一个拥有 Bash 访问权限的编码代理可以摧毁你的数据库、打印你的机密信息,或者无视你团队的规则,而这一切都是在遵循指令的情况下发生的。今天以开源形式发布的 guardrails-md 是一道闸门,它会在任何命令运行之前,根据你仓库中的 GUARDRAILS.md 对每条命令进行评分。如果某条命令超过了阈值,该调用就会被阻止,并告知代理原因,以便它可以选择另一条路径。判断过程大约需要 100 毫秒。

上面的两分钟讲解展示了整个流程。简要版本如下。

流程

在会话开始时,闸门会读取一次 GUARDRAILS.md(仅前 2,000 个字符)并将其冻结。代理之后可以像编辑其他文件一样编辑该文件,但更改只会在下一个会话中生效,并且要像其他编辑一样经过审查。

当代理调用 Bash 时,钩子会在任何内容运行之前进行拦截。它构建一段状态文本:命令本身、它所指向的任何脚本文件的内容,以及冻结的护栏规则。然后它在一次请求中向决策模型提出四个固定问题:

  • destructive. 该命令是否会不可逆地破坏数据、数据库或基础设施?
  • credentials. 它是否包含、打印或发送机密信息、密钥或令牌?
  • guardrails_violation. 它是否违反了团队的 GUARDRAILS.md?
  • policy_exception. 护栏文本是否明确将该命令列为允许?

每个答案都是 0 到 1 之间的分数,与阈值(默认 0.7)进行比较。超过阈值时,该调用会被阻止,原因会作为工具结果返回给代理:

为什么使用决策模型

模式拒绝列表知道 rm -rf;它不知道你的策略。让第二个 LLM 审查每条命令确实知道策略,但它可以被说服,而且每条命令都要花费一次完整的生成。闸门改为使用 berget/bev,即我们在推出 System One 时描述过的 System One 决策模型:固定问题输入,分数输出,一次前向传递。它判断的是命令和规则,而从来不是导致这些命令的对话。无论驱动模型被说服了什么,闸门都会根据命令本身的是非曲直来看待它。

不可协商的部分

  • 破坏性和凭据是底线。guardrails_violation 可以通过在 GUARDRAILS.md 的 MAY 部分中列出该命令来解除;破坏性和凭据则无法解除,无论文件中写了什么。
  • 重试有代价。每次阻止都会使下一次判断前的等待时间加倍:起初是几秒钟,到第 20 次阻止时达到一个半小时。同一命令的变体也无济于事。
  • 闸门故障时关闭。故障时关闭是刻意为之:如果端点无法访问,命令会被阻止,直到它再次响应。交互式用户可以通过 SYSTEMONE_FAIL_OPEN=1 选择退出。没有快速路径,没有前缀允许列表,没有代理可以写入的覆盖文件。
  • 有些文件受到完全保护。文件编辑工具拒绝触碰 GUARDRAILS.md 和 harness 配置。这种拒绝是确定性的:没有模型调用,没有阈值,没有冷却时间。

覆盖权属于人类

要更改策略,请在拉取请求中编辑 GUARDRAILS.md;这是对误报的持久修复。要调整闸门,请提高阈值。要在没有它的情况下运行一个会话,请使用 SYSTEMONE_GATE=off 重启 harness。这三件事都是人做的,而重启会重新读取策略并重置冷却时间。

在提交时也是如此

同样的判断也可以作为 git 预提交钩子使用:每个暂存的差异在进入仓库之前都会被评分。个人数据(GDPR)和机密信息会被阻止;你团队自己的名字出现在署名和作者字段中则可以通过。

诚实的局限

这个门控是一个训练好的模型,而不是规则引擎。它在我们的留出测试上得分约为 96%,但在红队命令上只有 74%,而且它偶尔会在两个方向上判断错误,要么拦截了安全的内容,要么放行了有风险的内容。它不会解码编码后的载荷。请把它视为作用域凭证、沙箱和人工审查之外的一层防护,而不是沙箱本身。完整的评估表和方法论都在仓库里。

试一试

三步,大约一分钟。

  1. 在你的仓库中添加一个 GUARDRAILS.md,说明你的团队允许什么:

  2. 在你的 harness 中安装这个门控:

    • OpenCode:将 "plugin": ["@bergetai/guardrails-md"] 添加到 opencode.json
    • Pi:在你的终端中运行 pi install npm:@bergetai/guardrails-md
  3. 如果你已经在 OpenCode 或 Pi 中登录了 Berget AI,则无需密钥。否则请设置 BERGET_API_KEY 并重启 harness。

完整设置、配置以及 pre-commit 钩子都在 README 中。命令由 Berget AI API 进行判定,评分内容不会被存储(零数据保留)。门控调用足够小,因此 €5 的免费额度可以用很久。

来源:Hacker News · berget.ai