给 AI Agent 加「预演模式」:先列出将执行的操作,确认后再动手
Agent 一旦能调用有副作用的工具(删除文件、发消息、修改数据库),一次误判就可能造成麻烦。“预演模式”是一种简单的防护:Agent 先生成一份“我将要做什么、影响哪些对象”的清单,不实际执行;确认后再以执行模式运行同一计划。 它和人工审批节点配合使用效果最好。
预演清单应包含什么
- 将调用的工具和参数;
- 影响的对象(哪些文件、哪些收件人、哪些记录)及数量;
- 是否可撤销;
- 预计结果,以及失败时的处理方式。
实现思路
1. 在工具层支持 dry_run
每个有副作用的工具都接受 dry_run 参数:
def delete_files(paths: list[str], dry_run: bool = True) -> dict:
existing = [p for p in paths if os.path.exists(p)]
if dry_run:
return {"would_delete": existing, "count": len(existing)}
for p in existing:
os.remove(p)
return {"deleted": existing, "count": len(existing)}
默认值设为 True,忘记传参时也是安全的。
2. 提示词规定两阶段
你可以使用工具完成任务。规则:
1. 第一阶段,所有有副作用的工具都以 dry_run=true 调用;
2. 汇总一份执行计划:步骤|工具|影响对象|数量|可否撤销;
3. 输出计划后停止,等待确认;
4. 收到“确认执行”后,严格按计划以 dry_run=false 执行,不得增加步骤;
5. 执行结果与预演不一致时立即停止并报告。
3. 用规则自动放行低风险操作
不是每一步都需要人看。可以设置规则:只读操作直接执行;影响对象少于某个阈值且可撤销的自动放行;其余交给人工确认。具体阈值按你的业务风险设定。
适合与不适合
适合:批量文件整理、批量发送消息、数据库批量更新、云资源变更。
不适合或效果有限:
- 结果依赖前一步真实执行的任务(预演时拿不到中间结果);
- 外部系统不支持预演的操作,只能在工具层自行模拟;
- 对时效要求极高的场景。
和其他机制的关系
预演回答“要做什么”,人工审批回答“能不能做”,二者常一起使用,参考 Agent 人工审批检查点。执行中的进度记录可参考 任务计划与检查点日志,常见失败类型见 Agent 的失败模式。