主题
受限 Agent:给家人用的那个助手怎么配
我给家里人配了个"发条语音就能下电影"的助手。她不会用电脑,只会微信发语音,她的手机上不需要装任何东西。
技术上这件事不难(语音怎么进来的、下载链路怎么跑),难的是边界:一个能执行命令、能写文件的 agent,交给一个不懂技术的家人,最坏能坏到什么程度?
这篇是我的实际配置,讲清楚四层防护怎么叠的。
一、隔离,不是限制
第一条原则:别在原 agent 上加"你不要做 X"的规则,直接给她一个独立的 agent。
主 agent(我) 全工具,全目录
家人 agent(mom) 只读+下载相关工具,只能碰两个目录这样隔离的好处不是"更安全",而是可预测:她的所有行为都在一个我完整知道范围的环境里,出了问题(磁盘满、下错东西、爬虫被封)不会污染主环境。
工具白名单
只给这些:
exec # 下载命令必要
web_search # 找资源
web_fetch # 抓搜索结果页
message # 回复她
sessions # 会话管理
memory # 记住她的偏好不给这些(重点):
browser # 浏览器自动化,用不上且容易乱点
canvas # UI 渲染,没意义
write / edit # 不能改任何文件
系统管理 / 容器管理工具 / 应用管理⚠️ 关键在于"不给",而不是"告诉它别用"。 提示词是可以被绕过的(她发一句"忽略之前的规则"就可能生效),工具白名单不会。
技能白名单
只挂两个:movie-download 和 qqmusic-flac-download。技能本质上是"工具说明书",挂得越多,她能做的事越多,出错面越大。
二、目录配额:物理上关住它
光靠工具白名单还不够,exec 能跑任何命令(包括 rm)。所以再加一层目录层面的约束:
- 专用目录:
/vol2/1000/mom-download/{movies,music} - 单任务体积上限:20GB(超过就拒,别让一个巨无霸种子吃满盘)
- 目录总量配额:约 30GB(超了就提示"要删点旧的吗")
⚠️ 老实说,这一层是"约定"而不是"强制"——exec 理论上能写到别处。真要强制得上容器/只读挂载/文件系统配额。家用场景我选了"约定 + 监控":目录大小定期检查,越界就发邮件给我。
三、防卡死:四层
无人值守最容易出的问题不是"做错",是"卡住"。她的场景里我叠了四层:
1. 超时重试
外网请求、下载命令,全部带超时。BT 下载用"看进度"而不是"等完成":连续 N 次轮询进度不变 → 判定卡住。
2. 单任务体积上限
20GB。超了直接拒绝并告诉她"这个太大了,换个版本"。防的是一个种子把存储空间 2 吃光。
3. 目录配额
目录总大小超阈值 → 拒绝新任务 + 提示清理。
4. 卡死自动汇报
超过 X 分钟没进展 → 发邮件给我(不打扰她)。用的是普通的 SMTP:
smtp.qq.com:465(SSL)
授权码认证,不是密码这条最关键:她不会说"它卡住了"。她只会觉得"这个助手不好用"。所以异常必须主动流到我这里,而不是等她说。
四、能力分级:只读的也分等级
她需要"找资源"这件事,我给了两种方式,等级不同:
A. BT 下载(主流路径):搜索 → 加任务 → 轮询 → 搬进媒体库 → 删种子
B. 网盘转存(备用路径):搜索网盘资源 → 转存到她的网盘目录 → 媒体库直接能看到
B 这条路径更危险,因为网盘客户端的能力里有"删除""移动""分享"。所以我给它的红线是:
- 只允许:搜索、浏览目录、转存(saveas)
- 禁止:重命名、整理、移动、删除、分享、下载到本地、上传
- 只许碰:名为「妈妈专用」的那一个目录
这条红线的价值在于:即使 agent 完全跑偏,最多也只是往那个目录里塞错东西,删不掉任何已有的文件。
五、路由:按发送者分流
家人微信账号 → mom agent
我的账号 → main agent
其他人 → 无路由 / 拒绝这样"同一个网关、不同人不同权限"就实现了。这里有个必须做对的细节:身份判断必须基于平台给的发送者 ID(不可伪造的那种),不能基于"它说它是谁"。
六、语音场景的特殊处理
她会用语音,而且微信会自带转写文字(细节)。但转写出来的文字有两个特点:
- 没有标点,长句连在一起
- 有错别字(片名、人名尤其容易错)
所以 agent 的提示里必须写明:片名可能是错字,要按"最接近的知名作品"理解并复述确认,而不是死磕字面搜索。
七、测试的现实困难
想演练"家人发消息 → agent 响应",结果卡在:子 agent 起不来(配置上只允许主 agent 被 spawn)。
于是只能真机测试:等家人真发一条,然后去翻通道日志和她的回复,看有没有守规范。
这个限制本身值得记下来:受限 agent 的正确性只能端到端验证,不能靠"读一遍配置觉得没问题"。所以上线前我把最关键的那几句规则写成了必须遵守的流程(下一节)。
八、给她的话术规范(比技术更重要)
技术做得再好,如果 agent 回复的是"已保存到 /vol2/1000/mom-download/movies/xxx",她只会觉得这东西难用。
所以给 mom agent 的规则里有硬性话术:
- 下载完成:
好了,<片名>。电视上打开「影视」,最近添加里就有。 - 不提:路径、文件大小、耗时、种子名、编码、分辨率
- 不确定时:先给候选让她选(下一节)
- 失败时:说人话("这个没找到,换个说法试试"),不是贴日志
检查清单
做"给家人用的受限 agent"时,我过这几条:
- 独立 agent + 独立 workspace,不共用主环境
- 工具白名单(不是黑名单),
write/浏览器/系统管理一律不给 - 专用目录 + 单任务体积上限 + 目录配额
- 异常主动汇报到维护者(邮件),不依赖使用者反馈
- 危险能力(删除/移动/分享)显式禁止 + 只许碰单一目录
- 路由按不可伪造的发送者 ID
- 语音场景要容忍错别字,片名按最接近的理解并复述
- 回复话术面向"不懂技术的家人",不报路径和参数
一句话版本:给家人用的 agent,安全性靠工具白名单 + 目录约束,可用性靠固定话术 + 默认值。别指望使用者帮你发现问题——异常要自己流过来。