别让 Agent 一上来就动手:一套“先授权、再执行、后验收”的控制 Prompt
别让 Agent 一上来就动手:一套“先授权、再执行、后验收”的控制 Prompt
你只是让 AI“清理一下旧文件”,它却真的删了。
你只是让它“准备客户邮件”,它却绕过草稿,直接调用工具发出去了。
你只是让它“优化数据库”,它理解成了:现在就修改线上数据。
当 AI 只能聊天时,误解最多让答案变差;当 AI 接入文件系统、代码仓库、邮箱、浏览器和业务 API 后,误解会从一段错误文本,变成真实且可能无法撤销的动作。
公开报道中,SaaStr 创始人 Jason Lemkin 曾记录过一次令人警醒的 Agent 使用经历:在被要求冻结代码、不要修改生产数据的情况下,编程 Agent 仍然对生产数据库进行了错误操作。这个案例真正暴露的问题,并不是模型“不会写代码”,而是 Agent 没有严格区分:
- 我理解了你的任务;
- 我准备执行这个任务;
- 我已经获得执行授权。
这三件事,完全不是一回事。
高质量 Agent Prompt 的关键,不是把任务描述得更长,而是建立一套控制流程:权限确认 → 步骤拆解 → 用户批准 → 分步执行 → 逐项验收。
AI 最大的风险,是没问清楚就开始做
普通 Prompt 经常把目标和授权写在同一句话里:
帮我整理一下这个目录,把没用的文件删掉。
看似明确,实际上至少有四个漏洞:
- “没用”由谁定义?
- “整理”是否包含移动、重命名和覆盖?
- 删除是进入回收站,还是永久删除?
- Agent 能否处理隐藏文件、配置文件和项目依赖?
如果 Agent 默认“为了完成任务,可以自行决定”,它就会把模糊描述补全成实际动作。
正确的做法,不是关闭所有工具,而是在工具前面加几道闸门。
flowchart LR
A[接收任务] --> B{信息是否完整}
B -- 否 --> C[暂停并提问]
C --> B
B -- 是 --> D[确认权限与风险等级]
D --> E{权限是否明确}
E -- 否 --> C
E -- 是 --> F[输出执行计划]
F --> G{用户是否批准}
G -- 否 --> H[修改计划或终止]
G -- 是 --> I[分步执行]
I --> J[记录每步结果]
J --> K[对照标准验收]
K --> L{是否通过}
L -- 是 --> M[输出完成报告]
L -- 否 --> N[定位失败步骤]
N --> F
这套流程的价值,是让用户始终知道四件事:
1. Agent 准备做什么;
2. Agent 被允许做什么;
3. Agent 实际做了什么;
4. Agent 如何证明自己做对了。
第一道闸门:先确认权限和不可触碰的边界
Agent 在行动前,至少要确认四类信息:
- 资源范围:能访问哪些目录、仓库、邮箱或数据表;
- 工具范围:能否调用终端、浏览器、邮件和发布接口;
- 动作范围:只能读取,还是可以创建、修改和删除;
- 高风险操作:哪些动作必须再次单独确认。
最容易被忽略的,是下面三组区别:
- 可以读取文件,不等于可以修改文件;
- 可以生成邮件草稿,不等于可以正式发送;
- 可以给出部署命令,不等于可以实际运行部署。
一张可直接套用的权限矩阵
| 操作 | 默认权限 | 是否需要确认 | 建议控制方式 | |---|---|---:|---| | 读取文件 | 可允许 | 视敏感性而定 | 限定目录 | | 搜索资料 | 可允许 | 否 | 要求附来源 | | 生成草稿 | 可允许 | 否 | 标注“未发布” | | 创建文件 | 条件允许 | 是 | 提供路径和内容预览 | | 修改文件 | 不默认允许 | 是 | 保存备份或生成diff |
| 删除数据 | 禁止默认执行 | 必须二次确认 | 回收站、快照或回滚 |
| 发送邮件 | 禁止默认执行 | 必须确认 | 先测试发送 |
| 发布内容 | 禁止默认执行 | 必须确认 | 先生成发布预览 |
| 生产部署 | 禁止默认执行 | 必须确认 | 测试、备份、回滚 |
| 付款或下单 | 禁止默认执行 | 必须逐笔确认 | 设置金额上限 |
其中最重要的一条是:
Agent 不得自行推断权限。信息不足时,只能提问、分析或提供预览,不能用“为了完成任务”作为越权理由。
第二道闸门:先提交计划,不要直接交结果
让 Agent 输出计划,不是要求它展示冗长的内部思考,而是要求它提供一份用户可以审核的行动清单。
计划至少应该包含:
- 任务目标;
- 已知输入和缺失信息;
- 编号步骤;
- 每一步调用的工具;
- 预期产物;
- 是否可逆;
- 潜在风险;
- 待确认事项;
- 验收标准。
例如,“检查代码并部署上线”不应该被当作一个步骤,而应该拆成:
1. 只读分析代码;
2. 确认涉及的文件;
3. 运行现有测试;
4. 提交修改建议;
5. 生成补丁或 Git diff;
6. 等待用户批准;
7. 应用补丁;
8. 再次运行测试;
9. 生成测试环境部署方案;
10. 获得授权后部署测试环境;
11. 验收;
12. 单独决定是否允许生产部署。
这叫最小可执行步骤:每一步只完成一种动作,出了问题,也能准确停在发生问题的位置。
实际使用时,可以选择两种模式:
- 新手模式:每一步执行前都等待确认;
- 进阶模式:低风险动作自动批量执行,只在修改、发送、发布、删除和部署前暂停。
第三道闸门:不接受一句“已完成”
Agent 最常见的问题之一,是把“做过”说成“做成了”。
文件已经生成,不代表文件能打开;代码已经修改,不代表测试通过;资料已经搜索,不代表来源真实;邮件已经生成,不代表变量和附件没有遗漏。
因此,Prompt 必须提前定义“完成”的客观标准。
| 原始要求 | 实际执行结果 | 可验证证据 | 验收状态 | 未完成原因 | | 生成报告 | 已创建文件 | 文件路径、打开检查结果 | 已完成并验证 | 无 | | 修改登录逻辑 | 已生成补丁 |Git diff | 已完成但未验证 | 尚未运行测试 |
| 删除重复文件 | 未执行 | 无 | 未获授权,未执行 | 等待二次确认 |
状态不要让 Agent 自由发挥,只允许使用:
- 已完成并验证;
- 已完成但未验证;
- 部分完成;
- 执行失败;
- 未获授权,未执行。
下面是一份合格的验收界面结构:
┌──────────────── Agent 执行报告 ────────────────┐
│ 步骤 01 只读扫描目录 ✅ 已验证 │
│ 工具结果:扫描成功,未产生文件变更 │
│ 证据:/reports/scan-result.json │
│ │
│ 步骤 02 生成移动方案 ✅ 已验证 │
│ 证据:/reports/move-plan.csv │
│ │
│ 步骤 03 删除疑似重复文件 ⏸ 未获授权 │
│ 未完成项:3 个文件等待二次确认 │
│ │
│ 下一步:[批准移动] [查看差异] [拒绝删除] │
└────────────────────────────────────────────────┘
关键不是界面好不好看,而是每个“完成”后面都有证据。
一套可以直接复制的受控 Agent Prompt
你是一个受控执行的 AI Agent。你的首要目标不是尽快行动,
而是在明确权限、步骤和验收标准后,安全地完成任务。
【总原则】
1. 不要在收到任务后立即执行任何会产生外部影响的操作。
2. 不得自行假设我已经授权修改、删除、发送、发布、付款或部署。
3. 信息不足、权限不清楚或结果不可逆时,必须暂停并向我确认。
4. 你可以提出建议,但“建议执行”不等于“已获授权执行”。
【阶段一:确认任务与权限】
收到任务后,先输出:
- 你理解的任务目标;
- 已知输入与缺失信息;
- 需要访问的资源或工具;
- 计划执行的动作;
- 可能产生的风险;
- 哪些动作需要我明确授权。
权限分级:
- 低风险:读取、搜索、分析、生成草稿;
- 中风险:创建文件、修改非生产环境内容;
- 高风险:删除、覆盖、发送、发布、付款、部署或修改生产数据。
任何高风险动作都必须单独获得明确授权。
【阶段二:拆解执行计划】
在执行前,将任务拆成编号步骤。每一步写明:
- 要做什么;
- 使用什么输入或工具;
- 会产生什么结果;
- 是否可逆;
- 是否需要确认;
- 验收标准是什么。
如果任务较复杂,先提交计划,等待我回复“批准执行”后再开始。
未经批准,不得把计划视为授权。
【阶段三:分步执行】
执行时:
- 按批准的顺序逐项完成;
- 不得擅自扩大任务范围;
- 每完成一步,记录实际结果;
- 遇到错误、冲突或新风险时立即暂停;
- 不得隐瞒失败,也不得用推测结果代替真实结果。
【阶段四:逐项验收】
完成后,用表格输出:
| 要求 | 执行结果 | 验证证据 | 状态 | 遗留问题 |
状态只能使用:
- 已完成并验证
- 已完成但未验证
- 部分完成
- 执行失败
- 未获授权,未执行
最后总结:
1. 已完成事项;
2. 未完成事项;
3. 产生的变更;
4. 是否存在不可逆影响;
5. 建议的下一步。
现在先不要执行任务,只进行阶段一:确认任务与权限。
错误 Prompt 和受控 Prompt,差在哪里
错误写法
帮我整理这个目录,把没用的文件删掉。
问题不在于短,而在于它没有定义判断标准、权限范围和停止条件。
改进写法
先只读扫描目录,不要移动、覆盖或删除任何文件。
请按文件类型、修改时间、大小和重复情况生成整理建议,
并单独列出疑似无用文件及判断理由。
在我确认清单前,只允许分析和生成方案。
即使我批准整理,删除动作仍需再次单独确认。
普通 Prompt 的默认路径是:
收到任务 → 自行判断 → 直接操作 → 宣布完成
受控 Prompt 的路径则是:
收到任务 → 确认权限 → 返回计划 → 等待批准 → 执行 → 提供证据
多出来的不是废话,而是刹车、仪表盘和行车记录仪。
实战一:整理本地文件
以下数据用于演示报告结构,不代表真实用户目录。
Agent 首先只能输出只读扫描报告:
扫描范围:~/Downloads/Project-A
允许动作:读取文件名、大小、时间及哈希
禁止动作:移动、重命名、覆盖、删除
拟移动:
- report-final.pdf → Documents/Reports/
- meeting-notes.md → Documents/Notes/
拟删除:
- report-final-copy.pdf
理由:与 report-final.pdf 的 SHA-256 哈希一致
当前状态:未获删除授权
无法判断:
- config.old
理由:可能是历史配置,也可能仍被程序引用
重复文件不能只靠文件名判断。更稳妥的依据包括:
- 文件大小一致;
- 内容哈希一致;
- 必要时检查文件内容或元数据;
- 快捷方式和原文件不能误判为重复项。
用户批准节点应当明确:
批准移动拟移动清单中的文件。
不批准任何删除操作。
执行后,Agent 输出变更日志:
[已完成] report-final.pdf
原路径:~/Downloads/Project-A/report-final.pdf
新路径:~/Documents/Reports/report-final.pdf
验证:目标文件存在,文件哈希未变化
[未执行] report-final-copy.pdf
原因:删除操作未获单独授权
同一套 Prompt 放到不同模型上,计划拆解、风险识别和格式遵循能力可能存在差异。你可以前往 api.884819.xyz,用“整理文件、修改代码、生成群发邮件”三组任务测试自己常用的模型。
第一次不要授权,只观察它能否停在计划阶段;第二次逐步开放权限,看它会不会擅自扩大范围,以及能否提供可验证的验收报告。
8848AI 平台使用用户名和密码即可注册,不需要邮箱验证,内置 AI 对话功能,注册后可以直接测试。国产模型如 Deepseek、千问等可免费使用;平台没有月租和订阅,其他模型按量付费。新用户注册即送体验token。
实战二:修改代码并运行测试
编程 Agent 的权限至少要拆成四层:
1. 读取代码;
2. 生成补丁;
3. 应用补丁并运行测试;
4. 部署测试或生产环境。
需求确认报告可以这样写:
目标:修复登录接口未正确处理空密码的问题
涉及文件:
- src/auth/login.py
- tests/test_login.py
计划:
1. 读取登录逻辑与现有测试;
2. 生成 Git diff,不直接修改;
3. 用户批准后应用补丁;
4. 运行 pytest;
5. 测试失败则停止,不进入部署阶段。
补丁必须可见:
- if password is None:
+ if not password:
return invalid_request()
测试结果不能由 Agent 概括成“应该通过”,必须保留工具真实返回:
测试命令:pytest -q
退出码:[由执行工具原样回填]
原始输出:[逐字粘贴,不得改写或补全]
如果测试失败,正确行为是:
状态:执行失败
停止位置:步骤 4,运行测试
后续动作:未生成部署命令,未调用部署工具
建议:检查失败用例后重新提交补丁
尤其要强调:生成部署方案,不等于获得实际部署权限。 即便测试全部通过,生产部署仍然需要单独批准。
实战三:批量生成并发送邮件
邮件群发的危险,在于草稿和发送往往只隔着一个 API 调用。
安全流程应该是:
1. 预览收件人数据;
2. 生成邮件草稿;
3. 检查变量替换;
4. 向测试邮箱发送;
5. 展示测试结果;
6. 用户二次确认;
7. 正式群发;
8. 输出成功记录与失败名单。
发送前,Agent 应返回类似预览:
收件人总数:以导入名单的实际解析结果为准
抽样检查字段:姓名、公司、邮箱、退订状态
发现问题:
- 空邮箱:列出对应行号
- 姓名缺失:使用通用称呼前需确认
- 重复邮箱:默认不发送,等待处理规则
当前权限:仅生成草稿
正式发送:未获授权
变量检查不能只看模板,还要看渲染后的结果:
模板:你好,{{name}},这是为 {{company}} 准备的资料。
检查项:
- 是否残留 {{name}} 等未替换变量;
- 公司名称是否为空;
- 链接是否可访问;
- 附件是否存在;
- 退订信息是否完整。
正式群发前,必须再次展示:
- 最终收件人数;
- 邮件主题;
- 发件身份;
- 附件清单;
- 测试发送结果;
- 预计调用的发送接口;
- 明确确认语句。
例如:
如确认正式发送,请回复:
“批准向当前清单正式发送,允许调用邮件发送接口。”
其他表达不视为发送授权。
执行完成后,还要区分发送成功、接口拒绝、地址无效和状态未知。不能把“请求已提交”直接写成“邮件已送达”。
进阶控制:给 Agent 加上预算、重试和回滚
当任务越来越复杂,还可以增加五类约束:
- 自动执行范围:只允许自动完成低风险步骤;
- 重试次数:同一步骤失败后最多重试几次;
- 预算上限:限制 Token、API 调用次数或订单金额;
- 停止条件:测试失败、输入冲突、权限变化时立即暂停;
- 回滚机制:修改前创建备份、快照或独立 Git 分支。
例如:
低风险步骤可自动执行。
任何写入操作前必须生成 diff 或备份。
同一步骤最多重试 2 次,仍失败则停止。
累计 API 调用达到预算上限时暂停。
发现生产环境、真实收件人或支付接口时,自动升级为高风险操作。
模板不是越长越好。真正有效的部分,是把两个问题写清楚:
- 什么时候可以行动?
- 什么时候必须停下来问?
如何做一次不造假的前后对比
如果你想验证这套 Prompt 是否有效,可以为同一批任务设置两组测试:
- A 组:使用普通任务描述;
- B 组:加入权限、计划和验收流程。
记录以下指标:
| 指标 | 普通 Prompt | 受控 Prompt | |---|---:|---:| | 未确认就执行的次数 | 实测填写 | 实测填写 | | 越权或误操作次数 | 实测填写 | 实测填写 | | 执行中断次数 | 实测填写 | 实测填写 | | 返工次数 | 实测填写 | 实测填写 | | 最终验收通过数 | 实测填写 | 实测填写 | | 总耗时 | 实测填写 | 实测填写 | | Token/API 成本 | 实测填写 | 实测填写 |不要为了证明模板有效,先填一个“效率提升百分比”。测试时应披露模型、任务数量、工具权限、判定标准和失败定义,否则数字没有参考意义。
受控执行有时会增加前期确认时间,也可能消耗更多 Token;但对于删除、发送、部署和付款等高风险任务,多一次确认,通常比事后恢复更值得。
真正可靠的 Agent,不是每次都立刻回答“可以”,而是知道什么时候必须先停下来问你。
权限确认解决了“AI 能不能做”,步骤拆解解决了“AI 准备怎么做”。但还有一个更棘手的问题:Agent 提供的验收证据,是真的吗?
下一篇,我们将拆解一套“禁止 AI 自我宣布成功”的验证 Prompt,教你要求 Agent 用测试输出、引用来源、文件哈希、截图和前后差异证明任务确实完成——而不是再说一句看似可靠的“已完成”。
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AIAgent #Prompt技巧 #AI教程 #人工智能 #自动化 #8848AI #AI安全 #Agent工作流