首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >#WorkBuddy# 给 AI 助手装个"机械刹车":用 PreToolUse Hook 拦住危险命令

#WorkBuddy# 给 AI 助手装个"机械刹车":用 PreToolUse Hook 拦住危险命令

原创
作者头像
用户12814938
发布于 2026-10-15 06:20:27
发布于 2026-10-15 06:20:27
200
举报

#WorkBuddy# 给 AI 助手装个"机械刹车":用 PreToolUse Hook 拦住危险命令

场景

我平时让 AI 助手在电脑上批量干活:跑脚本、起进程、管文件。提示词里写过无数遍"这个别删、那个别动",但用久了发现一个扎心的事实:提示词管不住高压下的 AI。任务一急、重试一多,它该犯的还是犯——不是它"叛逆",而是长对话里规矩会被冲淡、会在几十轮工具调用之后被忘掉。吃过几次亏之后我下定决心:不能只靠"嘱咐",得装一个物理刹车。

过程

我的 AI 工具链支持 PreToolUse hook:每次 AI 要执行 Bash 或 PowerShell 命令之前,系统先把命令原文喂给我指定的脚本,脚本退出码 0 就放行,退出码 2 就直接拦截,命令根本不会执行。这等于在 AI 的手和电脑之间加了一道闸:规则从"它记得的事"变成了"程序判定的事"。

我先拿最小可用版练手:拦截递归删除命令;另一类高危操作需要"用户当日授权"才放行——本地放一个授权文件,首行等于今天的日期才有效,过期作废。写好配置挂上 hook,拿五类用例实测:普通命令放行、递归删除拦截、未授权启动拦截、写入当日授权文件后放行、把授权文件改成昨天的日期再跑又拦截。五发五中,刹车装好了。

坑一:拦截规则太粗,误伤一片

第一版规则图省事,看到关键字就拦。结果正常的文件查看命令也被拦了——参数里恰好包含被拉黑的词。教训:拦截必须区分操作类型,同一个词出现在"删除"和"查看"里风险完全不同。规则要对准真正危险的命令形态(递归删除、强制覆盖这类组合),只读操作一律放行,否则 AI 干活处处碰壁,最后被叫停的反而是刹车本身。

坑二:matcher 挂漏,拦了个寂寞

第二版上线后测危险命令,照样跑过去了。排查发现是配置里的 matcher 只写了 Bash 一个工具名,AI 换了个 shell 工具执行同样的命令就绕过去了。教训:matcher 必须覆盖所有能执行命令的工具,而且上线前要把"同类命令换不同工具执行"作为标准测试用例——不实测等于没装。

坑三:授权逃生门差点变成永久后门

受控操作总得有个放行通道,否则用户亲自要求的操作也会被卡死。我最初图方便做成了"文件存在就放行",几天后发现这个文件忘了删,刹车对这类操作等于永久失效。改成首行必须是当天日期之后,授权天然只管 24 小时,第二天自动重新锁上。逃生门一定要带时效,这是整套装甲里最容易漏的一环。

总结

这套机械刹车跑下来,我的感受可以归成三句话:

  1. 提示词是法律法规,hook 是物理刹车:法律法规靠自觉,刹车不靠。AI 的"自律"会随着对话变长而衰减,机制不会;
  2. 规则要窄而准:只拦真正的高危形态,放行只读操作,否则误伤会拖垮整个流程;
  3. 上线必须实测,逃生门必须带时效:挂错 matcher、授权文件忘删,都是"以为装了刹车其实没装"的典型。

最后附上本次实测用到的关键配置和测试命令,可直接复制:

代码语言:txt
复制
:: settings.json 里挂载 PreToolUse hook(匹配所有命令类工具)
{ "hooks": { "PreToolUse": [ { "matcher": "Bash|PowerShell",
    "hooks": [ { "type": "command", "command": "python gate_demo.py" } ] } ] } }

:: 闸门脚本约定: stdin 收 JSON, 退出码 0=放行, 2=拦截
:: 模拟一次调用(危险命令应被拦)
echo {"tool":"Bash","command":"rm -rf ./build"} | python gate_demo.py
echo 退出码 %ERRORLEVEL%      :: 输出 2 = 已拦截

:: 逃生门: 授权文件首行必须是今天, 过期自动失效
powershell -NoProfile -Command "Set-Content unlock.txt -Value (Get-Date -Format yyyy-MM-dd)"

把"下不为例"变成"跑不过去",AI 自动的安全感才算真正落地。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • #WorkBuddy# 给 AI 助手装个"机械刹车":用 PreToolUse Hook 拦住危险命令
    • 场景
    • 过程
    • 坑一:拦截规则太粗,误伤一片
    • 坑二:matcher 挂漏,拦了个寂寞
    • 坑三:授权逃生门差点变成永久后门
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档