你的 Agent 为什么总在等你说话?

你有没有遇到过这种情况:

花了一个下午配好一个 Agent,告诉它「帮我自动整理收件箱里的客户反馈」。结果第二天打开电脑,发现它给你发来了 23 条消息:

"这封邮件来自张先生,内容是投诉物流延误,请问需要回复吗?"
"这封邮件来自李女士,内容是询问退款,请问需要回复吗?"
"这封邮件来自……"

你配了个 Agent,结果养了个每隔五分钟来问你「我能动吗」的数字秘书。

这不是 Agent,这是高级聊天机器人。

问题不在模型。GPT-5、Claude Opus 4.6、Deepseek R1,随便哪个放进去,行为都一样。问题在你的 Prompt——它缺了三个东西,导致 Agent 根本不知道「什么情况下我可以自己做决定」。

---

第一节|Flue 的设计思路,为什么值得拆借

Flue 是近期在 AI 开发者社区里被频繁讨论的一个 Agent 框架,其核心设计哲学可以用六个字概括:低干预,高自主

它的思路不是给 AI 更多算力,也不是堆更多工具调用,而是在 System Prompt 的结构层面做了一套精心设计。根据社区对其 Prompt 结构的公开逆向分析(主要来自 GitHub 讨论区和 Discord 技术频道的整理帖),Flue 的 System Prompt 有三个非常清晰的写法层次:

1. 触发条件句:告诉 Agent 什么情况下自己动

2. 边界声明块:告诉 Agent 什么事不能自己决定

3. 行动授权等级:告诉 Agent 它有多大的自由度

这三层结构,本质上是在给 AI 画一张决策地图,而不只是给它一份任务清单。

大多数人写 Agent Prompt 的方式,其实是在写「我想要什么结果」,而不是「你在什么条件下、以什么权限、做什么动作」。这两种写法,跑出来的 Agent 行为天差地别。

接下来,我们逐层拆解这三个结构,每个结构都给出可以直接复制的 Prompt 模板。

---

第二节|结构一:触发条件句——告诉 Agent 什么时候自己动

普通写法的问题

传统写法:

帮我处理收到的文件,把它们分类整理好。

Agent 读完之后的内心活动:什么叫「收到」?现在就处理还是等你说?分类标准是什么?整理到什么程度算「好」?

所以它只能来问你。每次都来问你。

Flue 的写法:显式 IF-THEN 触发语法

Flue 的触发条件句,本质是把「隐含的触发时机」写成显式的条件判断。格式非常简单,但效果立竿见影:

模板 1:文件处理场景
## 触发条件

当以下任一条件满足时,无需用户确认,直接执行对应动作:

  • IF 新文件进入 /inbox 目录 → 立即执行文件类型识别和分类,移动到对应子目录
  • IF 文件名包含"urgent"或"紧急" → 在分类完成后,额外生成一条摘要推送给用户
  • IF 同一来源在 24 小时内发送超过 3 个文件 → 自动创建该来源的专属子目录

以上操作不需要等待用户指令,检测到条件满足即执行。

模板 2:信息监控场景
## 触发条件

你在后台持续监控以下数据源,触发条件满足时主动执行,不等待用户唤醒:

  • IF 监控关键词出现在任意数据源 → 立即抓取原文,生成 100 字以内摘要,存入日志
  • IF 同一关键词在 1 小时内出现超过 5 次 → 升级为「高频事件」,主动向用户发送提醒
  • IF 数据源连接中断超过 10 分钟 → 记录中断时间,恢复后自动补抓中断期间的数据

改写前后的行为对比

| 场景 | 普通 Prompt 下的 Agent | 触发条件句写法下的 Agent | | 新文件进入目录 | 发消息:「检测到新文件,是否处理?」 | 静默分类,完成后记录日志 | | 紧急文件到达 | 发消息:「这个文件是否需要优先处理?」 | 分类 + 主动推送摘要 | | 数据源断线 | 停止运行,等待用户重启 | 记录断线时间,自动恢复 | 这个结构解决的是「Agent 不知道何时该自己启动」的问题。

---

第三节|结构二:边界声明块——告诉 Agent 什么事不能自己决定

自主决策最大的风险:越权

给了 Agent 自主权,最怕的不是它偷懒,而是它「过于积极」——删了不该删的文件,发了不该发的邮件,或者在你不知情的情况下做了一个影响很大的决定。

Flue 的解法是在 Prompt 里专门开辟一个「边界声明块」,用三段式结构来框定行动边界:

  • NEVER:任何情况下都不能做
  • ALWAYS:任何情况下都必须做
  • ASK BEFORE:执行前必须先确认

边界声明模板

## 行动边界

NEVER(以下操作绝对禁止,无论任何情况)

  • 永远不删除任何文件,包括临时文件和缓存文件
  • 永远不向外部发送任何包含用户个人信息的内容
  • 永远不在未经确认的情况下修改数据库中的已有记录
  • 永远不以用户名义发送任何对外通讯(邮件、消息等)

ALWAYS(以下操作在每次执行时必须附带)

  • 每次执行操作后,在日志文件中记录:时间戳、操作类型、操作对象、执行结果
  • 每次遇到无法归类的情况,先保留原状,再标记为「待人工处理」
  • 每次执行高风险操作前,输出一条操作预告(即使不需要确认)

ASK BEFORE(以下操作执行前必须获得用户明确确认)

  • 任何涉及金额超过 100 元的操作
  • 任何会影响超过 50 条记录的批量操作
  • 任何需要调用第三方 API 且会产生费用的操作
  • 任何无法撤销的操作(如永久归档、账号注销等)

关键点:写「有弹性的边界」而不是「把 Agent 锁死」

很多人看到边界声明,第一反应是「那我把所有风险操作都放进 ASK BEFORE 不就安全了」——这样写出来的 Agent,又退化成了那个每隔五分钟来问你的聊天机器人。

边界声明的艺术在于:只卡住真正不可逆的风险,放开可以容忍试错的操作。

一个判断标准:如果这个操作做错了,5 分钟内能撤销,就不需要放进 ASK BEFORE;如果做错了影响超过一天的工作,才值得要求确认。

这个结构解决的是「Agent 自主执行时的越权风险」问题。

---

第四节|结构三:行动授权等级——让 Agent 知道自己有多大的自由度

Flue 最精妙的设计:权限分级

前两个结构解决了「什么时候动」和「不能碰什么」,但还有一个关键问题没解决:同一类任务,不同风险级别的操作,应该有不同的自主程度

Flue 在 Prompt 里定义了一套类似「权限等级」的概念:

  • L1(自主执行):检测到条件,直接执行,不通知用户
  • L2(执行后汇报):执行完成后,向用户发送一条简短的操作日志
  • L3(执行前确认):检测到条件,先向用户描述将要执行的操作,等待 Yes/No

授权等级声明模板

## 行动授权等级

L1 — 自主执行(无需通知)

适用于:低风险、可撤销、高频率的常规操作

  • 文件分类和重命名
  • 数据格式转换
  • 日志记录和归档
  • 信息摘要生成

L2 — 执行后汇报(完成后发送日志摘要)

适用于:中等风险、影响范围可控的操作

  • 向内部系统写入新记录
  • 触发自动化流程节点
  • 调用外部 API(免费额度内)
  • 发送内部通知消息

L3 — 执行前确认(必须等待用户明确授权)

适用于:高风险、影响范围大或不可逆的操作

  • 删除或归档超过 10 条记录
  • 对外发送任何通讯
  • 调用会产生费用的外部服务
  • 修改系统配置或权限设置

默认等级:当操作无法明确归类时,自动升级到 L3 处理。

这个结构解决的是「Agent 对不同风险操作缺乏差异化处理能力」的问题。

---

第五节|拼起来用:一个完整的 Agent System Prompt 示例

场景:自动处理客户反馈邮件的 Agent

把前三个结构拼在一起,是这个样子:

# 客户反馈处理 Agent — System Prompt

角色定义

你是一个自动处理客户反馈邮件的 Agent。

你的目标是在最少人工干预的情况下,完成邮件分类、优先级标注和初步响应。

---

触发条件

当以下条件满足时,无需等待用户指令,直接执行:

  • IF 新邮件进入客服邮箱 → 立即执行分类(投诉 / 咨询 / 建议 / 其他)
  • IF 邮件包含「退款」「投诉」「律师」等关键词 → 标记为「高优先级」
  • IF 同一用户在 48 小时内发送超过 3 封邮件 → 标记为「高频用户」,升级处理
  • IF 邮件为非中文内容 → 先翻译,再按正常流程处理

---

行动边界

NEVER

  • 永远不以公司名义向用户发送任何正式回复
  • 永远不承诺任何具体的退款金额或时间节点
  • 永远不删除任何用户邮件,包括垃圾邮件

ALWAYS

  • 每次处理完一封邮件,在处理日志中记录:邮件ID、分类结果、优先级、处理时间
  • 每次遇到无法分类的邮件,标记为「人工审核」,不做任何处理

ASK BEFORE

  • 任何需要以公司名义对外发送的回复草稿(草拟后提交人工审核)
  • 任何涉及退款或补偿承诺的内容

---

行动授权等级

  • L1(自主执行):邮件分类、优先级标注、关键词提取、日志记录
  • L2(执行后汇报):高优先级邮件标注完成后,发送日报摘要给负责人
  • L3(执行前确认):所有对外回复草稿,生成后等待人工审核确认后再发送

默认等级:L3

---

输出格式

每次处理完一批邮件,生成结构化日报:

  • 处理总量 / 各分类数量 / 高优先级数量
  • 需要人工介入的邮件列表(附摘要)
  • 今日识别到的高频问题 Top 3

写 Agent Prompt 前,先问自己三个问题

养成这个习惯,能帮你在动笔之前就避开 80% 的设计错误:

┌─────────────────────────────────────────┐

│ 写 Agent Prompt 前的三问 │

├─────────────────────────────────────────┤

│ 1. 它什么时候动? │

│ → 写出明确的触发条件,不依赖用户唤醒 │

├─────────────────────────────────────────┤

│ 2. 它不能碰什么? │

│ → 用 NEVER / ALWAYS / ASK BEFORE │

│ 框定行动边界 │

├─────────────────────────────────────────┤

│ 3. 它有多大自主权? │

│ → 按操作风险分配 L1 / L2 / L3 等级 │

└─────────────────────────────────────────┘

---

现在你可以做什么

把你现在在用的 Agent Prompt 复制出来,对照这三个问题检查一遍:

  • 有没有写触发条件?还是只写了「帮我处理 XXX」?
  • 有没有边界声明?还是全靠 AI 自己「猜」什么能做什么不能做?
  • 有没有授权等级?还是所有操作都默认需要你确认?

如果三个问题的答案都是「没有」,恭喜你——你刚刚发现了你的 Agent 为什么总在等你说话的根本原因。

如果你想直接拿这套结构去实测,调试 Agent 的循环调用时,接口的响应稳定性会直接影响你判断「是 Prompt 的问题还是接口的问题」。我们用的是 [api.884819.xyz](https://api.884819.xyz),支持 GPT-5、Claude Opus 4.6、Deepseek R1 等主流模型,国产模型完全免费,按量付费没有月租。新用户注册即送体验 token,注册只需要用户名 + 密码,不需要邮箱验证,调试 Agent 类任务体验比较顺,可以去看一下。

---

顺便说一句——这篇讲的是「怎么写让单个 Agent 自主决策的 Prompt」,但还有一个更难的问题我没展开:

当你有多个 Agent 协作时,它们之间怎么「交接任务」而不互相打架?

Agent A 处理完邮件分类,怎么把结果传给 Agent B 去生成回复草稿?传递的上下文格式怎么设计?如果中间某个 Agent 失败了,整个链路怎么降级处理?

这涉及到 Multi-Agent 的 Prompt 协议设计,我在整理,下一篇见。

---

本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。

#AI Agent #Prompt技巧 #Agent开发 #8848AI #AI教程 #System Prompt #自动化 #人工智能