05 · 划边界
边界不是"告诉它别做什么",是"让它做不了"。提示词里的禁止是软约束,跑三十圈之后可能就忘了;工具和权限层面的限制是硬约束,忘不了。能用硬的,就不要用软的。
三层边界,硬度递减
| 层 | 怎么做 | 硬度 |
|---|---|---|
| ① 不给 | 根本不提供这个工具、这个目录、这个账号权限 | 硬。它做不到 |
| ② 拦一道 | 工具照给,但执行前必须人点头 | 硬。它提得出,但过不去 |
| ③ 说一句 | 提示词里写"不要做 X" | 软。多数时候有效,但会失效 |
设计边界时,从上往下试:
这件事能不能靠"不给"解决? 能,就到此为止,别再往下。 不能(因为它确实需要这个能力)→ 能不能加一道人工确认? 再不能 → 才轮到写在提示词里。
大多数人的顺序是反的:先在提示词里写一长串"不许",然后发现它偶尔还是做了。
① 不给:从权限开始
文件
给它能读什么、能写什么,精确到目录:
❌ 给它整个用户目录的读写权限
✅ 只读:./docs/、./data/
可写:./output/ ← 一个专门的输出目录
其余:不可访问那个专门的输出目录很关键:它写坏了,你删掉重来就行,不影响任何原始材料。
账号与凭据
给它的每一个 key、每一个账号,问一句:这个凭据能干的事,是不是远超它需要的?
❌ 给一个管理员 API key,因为"这样最省事"
✅ 建一个只读的、只能访问特定几张表的账号凭据的权限范围,就是它能造成的破坏范围上限。
网络
能不能上网、能上哪些站,是一条很值得设的边界:
- 完全不联网:处理本地材料的 Agent,这样最安全。
- 白名单:只能访问你列出的几个域名。
- 随便上:风险最高。它可能读到带指令的内容(04 章那个坑),也可能把数据发出去。
沙箱
如果它要执行命令或跑代码,必须在沙箱里——一个隔离的环境,跑坏了不影响你的机器。
这一条没有折中方案
"我看着它跑,不对就 Ctrl+C" 不是方案。它一圈可能只要两秒。
能执行任意命令的 Agent,只能在沙箱里跑。
② 拦一道:什么必须人点头
这个清单基本不用讨论:
| 动作 | 为什么 |
|---|---|
| 往外发(邮件、消息、提交、发布) | 收件人不是你自己,出去了收不回 |
| 删除、覆盖 | 不可逆 |
| 花钱(下单、支付、开资源) | 不可逆,且金额可能失控 |
| 改配置、改权限 | 影响面超出这一次任务 |
| 动生产环境的任何东西 | 不解释 |
怎么"拦"
两种做法:
同步拦:Agent 提出要执行,流程暂停,等你确认。适合动作少的场景。
攒起来拦:Agent 不直接执行,而是把要做的事写成一份计划(03 章最后那节),跑完之后你一次看完、一次确认、批量执行。动作多的时候这种远好用——十次弹窗确认,人第三次就开始乱点了。
③ 说一句:提示词里的边界怎么写才有效
软约束也要写,只是别指望它兜底。三条写法:
一、写成具体动作,不是原则。
❌ 注意保护敏感信息。
✅ 不要在输出里写出完整的手机号、身份证号、银行卡号——
一律脱敏成前三后四,中间用 * 代替。二、配上出路(提示词篇 06 章那条铁律)。
❌ 不要修改原始文件。
✅ 不要修改 ./data/ 下的任何文件。需要改动时,
把改动后的版本写到 ./output/ 下,文件名加 .modified 后缀。三、在长跑里重复。 Agent 跑三十圈,第一圈的约束早被挤到边上了(07 章)。关键约束要么放进系统提示(每轮都在),要么在工具返回里反复带上。
一个容易漏的边界:范围蔓延
前面讲的都是"别碰什么"。还有一类边界是"别越做越多":
你让它:查清三家竞品的定价。
它顺手:把三家的功能对比也做了,把市场份额也查了,
还写了一份"我们的定价建议"。听起来像加分,实际上是问题:多出来的部分你没验收标准,而它们和你要的东西混在一起交付,你还得花时间分辨哪些是你要的。
解法在目标那一章:
只做上面列出的这些,不要扩展范围。
你认为值得做但我没要求的事,**列在最后作为建议,不要直接做**。一张速查表
| 你的场景 | 建议的边界 |
|---|---|
| 只处理你给的材料,不联网 | 不给网络工具;只读输入目录;输出到独立目录 |
| 要查公开信息 | 只读工具;域名白名单或至少禁止提交表单;外部内容标成数据 |
| 要读内部系统 | 只读账号,权限收到具体范围;不给写工具 |
| 要写文件 / 改代码 | 沙箱 + 独立输出目录 + 版本控制(能 diff、能回滚) |
| 要发消息 / 发邮件 | 必须人工确认;优先用"产出计划再批量执行" |
| 要跑命令 | 必须沙箱;命令白名单;禁止网络 |
一句话收口
提示词管的是它想不想,权限管的是它能不能。跑三十圈之后,只有后者还站得住。