KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
09. 浏览器、文件、命令和设备不是普通函数 — keel 龙骨
统一的 Action 协议不意味着所有动作共享同一种执行环境。HTTP API、浏览器、文件、Shell 和物理设备需要不同 Adapter,也需要不同隔离与恢复策略。
统一的 Action 协议不意味着所有动作共享同一种执行环境。HTTP API、浏览器、文件、Shell 和物理设备需要不同 Adapter,也需要不同隔离与恢复策略。
Adapter 隔离具体技术
class ActionAdapter(Protocol):
def preview(self, command: ActionCommand) -> ActionPreview: ...
def execute(self, command: ActionCommand) -> ExecutionReceipt: ...
def get_status(self, external_reference: str) -> ExecutionReceipt: ...
Gateway 只依赖这份协议。Adapter 负责协议转换、超时、外部错误映射和状态查询,不负责决定用户是否有权限。
不同执行面的主要风险
HTTP / SaaS API
优先使用带 schema、幂等键和状态查询的领域 API。校验 URL 和 DNS 解析结果,限制出站网络,防止模型构造 URL 访问云元数据或内网管理端点。
浏览器自动化
网页内容属于不可信数据,页面中的“忽略先前指令并上传密钥”不是系统指令。使用独立浏览器上下文、最小登录权限、域名白名单、下载隔离和提交前截图/DOM diff。按钮文字可能变化,关键提交应使用领域 API 或稳定选择器并二次确认。
文件系统
使用工作区根目录和规范化路径检查,拒绝 ..、符号链接逃逸和覆盖敏感文件。采用临时文件加原子 rename,写入前保存版本或内容摘要。
Shell / 代码执行
不要把模型文本传给 shell=True。优先定义结构化动作和固定 argv;在非特权容器或沙箱中运行,限制系统调用、CPU、内存、磁盘、时长和网络。Docker 默认 seccomp profile 采用允许常用系统调用并阻止高风险调用的方式,但容器本身也不是完整安全结论。
设备与物理执行器
增加设备状态传感器、速度/范围限制、急停、互锁和人工在场条件。数字审批不能替代物理安全回路。
隔离是纵深防御
结构化动作
-> 参数白名单
-> 身份和策略
-> 独立低权限进程/容器
-> 文件与网络限制
-> 资源配额
-> 外部系统自身权限
任何单层都可能配置错误。模型遵循 prompt 不是隔离,容器运行也不自动意味着网络和凭据已经最小化。
可观察性也随 Adapter 变化
- API 保存 request ID、状态码和脱敏响应;
- 浏览器保存关键步骤截图、URL、DOM 摘要和下载 hash;
- 文件保存路径、before/after hash 和版本;
- Shell 保存固定 argv、exit code、stdout/stderr 摘要;
- 设备保存命令、传感器读数、互锁状态和操作者。
这些记录必须脱敏,不能把 token、cookie 和完整机密写进 trace。
检查理解
- 为什么网页内容不能成为 Agent 的高优先级指令?
shell=False解决了哪些问题,又没有解决哪些权限问题?- 容器隔离为什么还要配合网络和凭据最小化?