"能做/不能做"要写下来,而不是靠模型自觉
AI 功能的能力边界如果只写在提示词里 ✗,就等于**靠模型自觉** ✔ —— 它会在边界上摇摆 ✗。
正确做法是把权限与边界做成**显式声明** ✔,并在**代码层**执行 ✔(不是提示词层 ✗)。
一、能力矩阵(先写清"谁能做什么")
```
角色 × 动作 × 对象 × 条件
客服 × 查询 × 订单 × 仅本租户
客服 × 修改 × 地址 × 需用户确认
主管 × 退款 × 订单 × 金额 ≤ 500 且需二次确认
外部 × 任何写操作 × 任何对象 × ❌ 禁止
```
**要点**:矩阵是**代码里的配置** ✔,不是文档里的描述 ✗;
矩阵要**可测试**(每行一条用例 ✔)。
二、三层防线(缺一不可)
1. **参数层**:模型给的参数先校验(范围、枚举、外键存在 ✔);
2. **权限层**:动作与对象是否在矩阵内 ✔(**独立于模型判断** ✔);
3. **确认层**:高风险动作**必须人确认** ✔(确认信息要人看得懂 ✔)。
模型输出**只作为意图** ✔,执行与否由这三层决定 ✔(见接线与工具设计两篇 ✔)。
三、"不能做"要能说出来
**忌讳**:静默失败 ✗ 或假装成功 ✗(后者最危险 ✔)。
四、审计与最小权限
五、三个常见漏洞
一条判据
> 拿一份"越权用例清单"(20 条 ✔)直接打接口(**不走界面** ✔),
> 是否**全部被拒绝**且拒绝原因清楚 ✔?有一条通过,就是权限漏洞 ✗。