如何在智能体执行前检查其操作:Rebuno 的策略文件方案
Checking agent actions before they run
Rebuno 提出把智能体权限从提示词和代码中移出,改为在外部策略文件里做执行前检查:每次工具调用先提交工具名和参数,由策略决定放行、需审批或拒绝。示例策略中 `git status`、`git diff`、`npm test` 直接放行,含 `rm -rf` 的命令被拒绝,其余 bash 命令需审批,规则按书写顺序首个匹配生效,改规则无需重新部署智能体。
2026年10月12日
给智能体添加护栏通常从它的提示词开始。比如“在生产环境中做任何更改前先询问”或“不要删除不是你创建的东西”。 智能体大多数时候会遵循这些指令,所以提示词看起来有效,直到有一天它忘记了一条规则。
提示词中的指令
智能体会在对话中连同其他所有内容一起读取指令,但有时它还是会违背指令行事。2025年7月,一个Replit智能体在代码冻结期间删除了生产数据库,而此前它已被明确告知未经批准不得进行更改。
指令也可能消失。当一段很长的对话被压缩时,摘要可能会遗漏某条规则。2026年2月,一个OpenClaw智能体就这样丢失了行动前需确认的指令,并开始删除邮件。
对于简单的智能体,提示词中的指令可能就足够了。当你让智能体访问更多工具和数据时,你需要一种更可靠的方式来强制执行其权限。
智能体代码中的检查
像LangChain、AI SDK、Mastra和Pydantic AI这样的智能体框架都支持在智能体代码中进行工具审批。你将某个工具标记为需要审批,每次调用它都会等待有人批准或拒绝。
对于你自己管理的单个智能体,这很有效。但随着智能体增多,尤其是由不同团队构建的智能体,规则会变得越来越难以追踪。要查找某个智能体的权限,就得阅读它的代码,而更改硬编码的规则则需要重新部署。
智能体外部的权限
你可以把规则移到智能体外部的策略文件中。在工具运行之前,智能体提交工具名称和参数以进行权限检查。策略决定该调用可以运行、需要审批还是被拒绝。
由不同团队或使用不同框架构建的智能体都可以经过同一套检查。你可以在策略中查看它们的权限,并更改规则而无需编辑或重新部署智能体。
工具调用在到达外部系统之前会经过权限检查。
检查参数
对某个工具要求审批是有效的,直到该工具是像bash这样通用的东西。那么git status和terraform apply就需要同样的审批。如果大多数命令都是常规操作,逐一批准就成了一件苦差事。
检查参数让你可以允许特定命令、阻止其他命令,并对剩下的命令要求审批。
每条命令都经过同一个bash工具。参数决定哪些命令需要审批。
一个策略示例
在Rebuno中,这些规则放在智能体的策略里。每次工具调用都被记录为一个步骤,内核在它运行之前会根据策略进行检查。
下面是一个带有bash工具的智能体的策略。三条命令无需询问即可运行,包含rm -rf的命令会被拒绝,其他所有bash命令都等待审批。
default_action: denyrules: - id: allow-safe when: target: bash arguments: command: one_of: ["git status", "git diff", "npm test"] then: decision: allow - id: no-rm-rf when: target: bash arguments: command: contains: rm -rf then: decision: deny reason: commands containing rm -rf are blocked - id: approve-other when: target: bash then: decision: require_approval reason: other commands need approval规则按书写顺序检查,第一个匹配的规则决定结果。git status匹配allow-safe规则并立即运行。rm -rf data/匹配no-rm-rf并被拒绝。terraform apply不匹配前两条规则,因此落到approve-other。
如果你后来决定让智能体无需询问即可运行git log,就把它添加到allow-safe的列表中。下一次git log运行时无需审批,且无需更改智能体的代码。
要了解更多关于Rebuno的信息,请阅读文档或访问GitHub上的仓库。
来源:Hacker News · rebuno.io