同事让 Agent 批量改文件名,结果把备份目录也扫进去了——工具路径白名单复盘

25 阅读3分钟

上周四,研发组的阿杰把我叫到他屏幕前,脸色不太好看。

juejin-1.jpg 他说:“我只让它把『项目交付』文件夹里的截图,按日期改成统一前缀。结果备份目录里的旧文件名也被改了。”

juejin-2.jpg 我问:“你当时怎么跟它说的?”

juejin-3.jpg 他把对话翻给我看。大意是:帮我把这个目录下的 png 批量改名,格式是日期加原名。他贴了一个路径,但没写清楚“只许动这一层、不许进子目录、不许碰叫 backup 的文件夹”。

Agent 很听话地递归扫下去了。备份目录正好在旁边,名字里还带着“交付”两个字,就被一并处理了。幸好我们还有上一周的整盘备份,能回滚;但那一下足够让人心跳漏拍。

对话核心:权限比能力更重要

阿杰问我:“是不是 Agent 不适合碰文件?是不是以后别用了?”

我说:不是别用,是别给它“整盘漫游权”。批量改名这类工具,默认就该先问三件事:

  1. 允许动的根路径是哪几个?
  2. 是否允许进入子目录?
  3. 改之前要不要先出清单、等人点确认?

我们后来给工具加了路径白名单:只认事先登记过的目录;名单外一律拒绝。再加一条“干跑”模式——先列出将要改的文件清单和预览名,不真正写入;阿杰盯完清单,再说执行。

提示词里我们也写了“禁止进入含 backup、旧版、归档字样的目录”,但说实话,提示词只是提醒。真正拦人的是白名单和干跑,不是一句礼貌的嘱咐。

我是怎么验的

验收不靠感觉,靠故意挖坑:

  • 在白名单目录旁放一个名字很像的备份夹,看它会不会越界。
  • 白名单里只放一层,故意塞深层子目录,看递归开关是否生效。
  • 干跑清单里混入一个不该出现的路径,必须能一眼发现。
  • 真正执行后,抽查十个文件:新名符合规则,旧名可追溯(我们留了改名日志)。

改完之后,阿杰又试了一次真实任务。干跑清单里只有他指定的那一层,备份目录一次都没出现。他才松了口气。

几条办公室能落地的规矩

我们现在约定:

  • 涉及改名、移动、删除的工具,默认干跑,默认白名单。
  • 一次任务只给一个根路径,做完再换,不图省事一次塞三个盘符。
  • 出事前能回滚,比出事后会道歉重要。
  • 新人第一次用文件类工具,必须先用干跑跑通一题,再开写入。

回头看,问题不在“Agent 太聪明”,而在“我们把文件权限想得太薄”。它按字面理解去扫,扫到备份并不意外。权限设计得窄一点,反而敢让它多干一点重复活。

你们给 Agent 碰过本地文件吗?有没有做过路径白名单或干跑清单?评论区聊聊踩坑和挡法。

我的折腾笔记在 evafang.com ,有兴趣可以随便翻翻。