File Guard——Agent 眼里的文件系统长什么样
Agent 不应该看到整个文件系统
如果给 Agent 一个 shell 工具 + 文件系统读写,它理论上可以 rm -rf /——不是它真的想搞破坏,而是 ReAct 循环里某一步 Thought 判断失误就可能导致灾难性后果。
File Guard 在 Agent 和真实文件系统之间加了一层沙箱——Agent 调用文件相关工具时,所有路径都会经过 File Guard 的规则过滤:
- 什么目录可见、什么不可见
- 哪些路径前缀的操作被允许
- 路径穿越攻击(
../../../)自动拦截
三种规则
| 规则类型 | 说明 |
|---|---|
| 白名单目录 | Agent 只能读写列出的目录 |
| 黑名单目录 | Agent 不能读写列出的目录(比如 /etc/、系统目录) |
| 路径穿越拦截 | 任何包含 .. 的路径自动拒绝 |
工作空间隔离
File Guard 和工作空间隔离配合使用:
- 每个工作空间有自己的允许目录集
- 工作空间 A 的 Agent 看不到工作空间 B 的文件
- 跨工作空间的文件访问请求自动拒绝
和 Tool Guard 的关系
Tool Guard 管「能不能调用文件工具」,File Guard 管「调用文件工具时能操作哪些路径」。两层叠加:
- Tool Guard 先看:这个 Agent 有没有文件写入权限?(require_approval 的话先挂起等审批)
- File Guard 再看:批准了之后,实际要写入的路径在允许目录里吗?不在就拒绝
实际例子
假设你有一个代码助手 Agent,想让它只操作你的项目目录:
- 白名单:
/home/user/projects/myapp/** - 黑名单:
/etc/**、/root/** - 路径穿越:一律拒绝
Agent 调 write_file("/home/user/projects/myapp/src/Main.java", ...) → 通过Agent 调 write_file("/etc/passwd", ...) → 拒绝(黑名单)Agent 调 write_file("../../../etc/passwd", ...) → 拒绝(路径穿越)