Skip to content

受限 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"时,我过这几条:

  1. 独立 agent + 独立 workspace,不共用主环境
  2. 工具白名单(不是黑名单),write/浏览器/系统管理一律不给
  3. 专用目录 + 单任务体积上限 + 目录配额
  4. 异常主动汇报到维护者(邮件),不依赖使用者反馈
  5. 危险能力(删除/移动/分享)显式禁止 + 只许碰单一目录
  6. 路由按不可伪造的发送者 ID
  7. 语音场景要容忍错别字,片名按最接近的理解并复述
  8. 回复话术面向"不懂技术的家人",不报路径和参数

一句话版本:给家人用的 agent,安全性靠工具白名单 + 目录约束,可用性靠固定话术 + 默认值。别指望使用者帮你发现问题——异常要自己流过来。