Agent Safety Checklist
Agent 的风险来自“模型可以选择工具并执行动作”。这份清单帮助你在设计 Agent 时控制权限、工具边界和失败后果。
是否真的需要 Agent
- [ ] 任务需要多步骤执行
- [ ] 中间结果会影响下一步
- [ ] 需要调用外部工具
- [ ] 固定 workflow 难以覆盖所有分支
- [ ] 失败后可以恢复或请求用户确认
如果这些问题大多是否,优先使用普通 LLM 调用或固定 workflow。
工具设计
- [ ] 每个工具只做一个明确动作
- [ ] 工具名称能表达用途
- [ ] 参数使用 schema,而不是一个自由文本
input - [ ] 参数有类型、必填项和枚举限制
- [ ] 工具返回结构化结果
- [ ] 工具错误包含可恢复建议
- [ ] 工具不会返回大量无关内容
权限控制
- [ ] 工具调用前由后端检查用户权限
- [ ] 用户无权访问的数据不会进入上下文
- [ ] 读工具和写工具分开设计
- [ ] 不同用户、团队、项目的数据隔离
- [ ] 工具调用记录用户身份和时间
高风险操作
这些操作默认需要确认:
- [ ] 发送邮件、消息或通知
- [ ] 删除、覆盖、移动文件
- [ ] 修改数据库
- [ ] 执行 SQL 或 shell 命令
- [ ] 发起付款、退款、下单
- [ ] 部署、回滚、修改线上配置
- [ ] 修改权限或邀请成员
确认信息应该包含操作对象、参数摘要、影响范围和撤销方式。
终止条件
- [ ] Agent 有明确完成标准
- [ ] 最大工具调用次数有限制
- [ ] 最大运行时间有限制
- [ ] 重复失败会停止并请求用户帮助
- [ ] 工具结果不足时不会无限搜索
- [ ] 任务完成后不会继续调用工具
Prompt Injection 防护
- [ ] 外部网页、文档、邮件内容被视为数据,不是指令
- [ ] 系统规则说明外部内容不能覆盖工具权限
- [ ] 工具调用前不依赖模型判断权限
- [ ] 不把密钥、cookie、token 放进上下文
- [ ] 高风险工具有确认层
日志和审计
- [ ] 保存完整 trace
- [ ] 记录模型输入摘要
- [ ] 记录工具名和参数摘要
- [ ] 记录工具结果摘要
- [ ] 记录最终回答和完成状态
- [ ] 敏感字段已脱敏
- [ ] 失败 trace 可以复现
评测
- [ ] 有正常任务用例
- [ ] 有工具失败用例
- [ ] 有权限不足用例
- [ ] 有 prompt injection 用例
- [ ] 有需要用户确认的用例
- [ ] 评测工具选择是否正确
- [ ] 评测是否按时停止
上线前一句话原则
模型可以建议动作,但系统必须控制权限、确认和最终执行。