搭一个本地智能体的安全闸门
作为一个刚接触 EvoMind 这类本地智能体架构的人,我试了一下它的入门做法。local-first 可理解成数据尽量留在自己机器上;cognitive architecture 是给 AI 装一套先计划、再记录、再执行的流程;runtime safety gates 就是运行时安全闸门,程序删文件、联网、改配置前先拦一下。
我想验证的是,智能体能不能被关进可观察、可回滚的小环境。做法是 Python 脚本、SQLite 存状态、模型生成计划,再加闸门判断能不能执行。
第一天搭骨架。新建文件夹 `evomind-lite`,在终端里输入 `mkdir db logs` 建两个目录,再新建 `state.db`,这是 SQLite 的数据库文件,像轻量记账本。输入 `sqlite3 state.db`,看到 `sqlite>` 提示符,说明能打开。建表语句是 `CREATE TABLE events(id, type, payload, status);`,输入 `.quit` 退出。
预期是目录里有 `db`、`logs`、`state.db`。新手易错路径。我在虚拟机里跑,相对目录一变,报 `unable to open database file`。统一用绝对路径才稳住。
第三天接模型和闸门。模型生成计划,闸门判断是否执行。我用 Qwen3.8-Max 生成计划,输出固定成 JSON,也就是机器好读的结构化文本。新建 `plan.py`,输入任务,例如整理下载目录。让模型只返回 `action`、`target`、`reason`。新建 `gate.py`,只允许 `move_file`、`read_file`,拒绝 `delete_file`、`send_email`。判断 `target` 是否在用户目录内,路径有 `。` 就拦。结果写入 `events`,`status` 填 `planned` 或 `blocked`。
跑整理下载目录时,模型想把安装包移到 `packages`。闸门第一次拦了,因为路径不在白名单。这说明边界生效了。
一周后跑真实任务。任务换成生成周报草稿。预期是智能体不能直接碰邮箱或日历,只能先读文件列表。闸门只读允许,写文件要确认,外网拒绝。
更稳的说法是,这类东西今天还像实验性的本地认知运行时,别拿它当成品。
我会看日志、数据库、失败重跑。日志在 `logs/agent.log`,数据库执行 `SELECT * FROM events;`。最近几条是 `blocked`,说明闸门在工作。
另外有三个坑,模型多输出解释文字,代码里先截取 `{` 到 `}` 再解析;`~/downloads` 和绝对路径没统一,闸门误判;危险主要来自工具调用。模型说错可重来,文件删错没了。
从编译器角度看,这像 IR 优化空间里的一条 pass,在生成机器码前拦危险操作。做编译器的人习惯问这个算子融合了吗,现在得问工具调用被拦了吗。本地跑也有内存带宽瓶颈,模型一大、链路一长,等几十秒体验就崩。所以动作拆小,日志写全,权限收窄。
下一步可以把白名单升级成权限标签,给每个工具标读写、网络、耗时、可逆性。本地智能体的价值主要看每一步能不能被看见、拦住、重放。
📌 本文编译自 Hacker News,原文:https://zenodo.org/records/20580153
版权归原作者所有,本文为基于公开报道的编译与独立分析。
物界前沿