我以为会写 Prompt,结果 Agent 一直在转圈——3个核心差异让你的 Agent 真正跑起来

上周我在调试一个竞品分析 Agent,把之前给 ChatGPT 用的 Prompt 直接塞进 instructions 字段,满怀期待地按下运行。

然后,它卡住了。

不是报错,是在第二步——"搜索竞品官网"——反复调用、反复输出、反复重试,整整转了 20 分钟,最后吐出一段"我已经完成了信息收集,但还需要进一步确认……"的废话,什么报告都没有。

那一刻我才意识到:我以为会写 ChatGPT Prompt 就会写 Agent 指令,但这根本是两件事。

ChatGPT 是一个等你发话的助手,你说一句它答一句;Agent 是一个要自己做决策的"自动驾驶系统",你给它一个目标,它要自己规划路线、调用工具、判断是否完成。

这两件事的底层逻辑不同,写法自然不同。踩了几次坑之后,我整理出了 3 个最关键的差异,配上对照表和可直接复用的指令模板。

不是理论课,是踩坑后的实战总结。

---

第一个坑:目标描述的"粒度"完全不同

ChatGPT 可以接受模糊目标,Agent 不行

给 ChatGPT 写"帮我整理一份竞品报告",它会脑补你的意图——大概知道你想要什么格式、什么维度,然后给你一个八九不离十的结果。因为这是一次对话,你不满意可以立刻追问,成本极低。

但 Agent 不一样。Agent 拿到任务之后要自主执行,中间不会来问你"这样可以吗"。如果目标模糊,它就不知道什么叫"完成",会陷入两种死法:

1. 无限重试:觉得任务没做好,一直循环调用工具

2. 提前停止:随便输出一段就认为完成了

我的 Agent 转圈 20 分钟,就是第一种死法的经典案例。

错误写法 vs 正确写法

❌ ChatGPT 风格(直接搬过来就翻车):
agent = Agent(

name="竞品分析师",

instructions="""

你是一个竞品分析专家。

帮用户整理竞品报告,内容要全面、有洞察。

"""

)

这段指令给 ChatGPT 完全够用,但给 Agent 就是灾难——"全面"是什么?"有洞察"怎么算达到?Agent 无法判断,只能乱跑。

✅ Agent 指令正确写法(加入可验证的终止条件):
agent = Agent(

name="竞品分析师",

instructions="""

你是一个竞品分析专家。

【任务目标】

针对用户指定的竞品,生成一份结构化分析报告。

【终止条件 — 满足以下所有条件才算完成】

1. 已收集目标竞品的官网信息、定价页、核心功能列表(至少3项)

2. 已完成与用户产品的横向对比表格(至少5个维度)

3. 已输出"机会点"和"威胁点"各至少2条

4. 最终报告已以 Markdown 格式输出

【禁止行为】

- 不得在未收集完信息前输出报告

- 不得重复搜索同一个 URL 超过2次

"""

)

核心原则:Agent 指令里必须有"完成标准",让 Agent 自己能判断任务是否结束。

这一点是 ChatGPT Prompt 和 Agent 指令最根本的差异。写 Agent 指令之前,先问自己:"Agent 怎么知道它完成了?" 如果你答不上来,指令就还没写好。

---

第二个坑:角色设定的"作用域"不一样

ChatGPT 的 System Prompt 管全程,Agent 的角色有范围

给 ChatGPT 写 System Prompt,设定"你是一个严谨的数据分析师,回答简洁直接",这个人格会贯穿整个对话,不会变。

但在 Agents SDK 2.0 的多 Agent 架构里,你会有主 Agent 和通过 Handoff 触发的子 Agent。这时候角色设定就有了"作用域"的问题。

翻车现场:客服 Agent + 数据分析子 Agent

我曾经搭了一个客服系统:主 Agent 负责接待用户、回答问题,当用户问"我的账单怎么这么高"时,Handoff 给数据分析子 Agent 去查数据。

错误配置是这样的:

# ❌ 错误:子 Agent 没有独立角色定义,继承了主 Agent 的人格

customer_service_agent = Agent(

name="客服小美",

instructions="""

你是客服小美,说话温柔亲切,多用"亲"、"感谢您的耐心"。

当用户询问账单问题时,转交给数据分析师处理。

""",

handoffs=[data_analyst_agent]

)

data_analyst_agent = Agent(

name="数据分析师",

instructions="""

分析用户账单数据,找出异常消费点。

"""

# 没有明确的角色定义

)

实际输出日志(模拟):
[data_analyst_agent] 亲~感谢您的耐心等待!

我帮您查了一下账单数据,发现您在3月份的消费

比上个月高了很多呢~可能是因为您使用了更多服务哦!

如果有任何疑问,请随时告诉小美~

数据分析子 Agent 说话变成了客服风格,"亲~"满天飞,完全失去了分析师该有的专业感。

✅ 正确配置:每个 Agent 独立定义角色,明确作用域:
customer_service_agent = Agent(

name="客服小美",

instructions="""

【角色】你是客服小美,负责接待用户、回答通用问题。

说话温柔亲切,多用"亲"、"感谢您的耐心"。

【作用域边界】

- 账单数据查询、消费异常分析:转交数据分析师

- 转交时,只传递用户的原始问题,不要加入你的语气风格

""",

handoffs=[data_analyst_agent]

)

data_analyst_agent = Agent(

name="数据分析师",

instructions="""

【角色】你是数据分析师,风格严谨、简洁、数据驱动。

禁止使用"亲"、"哦"等口语化表达。

【任务】分析用户账单数据,用数字和图表说话。

输出格式:问题定位 → 数据依据 → 建议操作

"""

)

核心原则:在多 Agent 架构里,每个 Agent 都要有独立的、明确的角色定义。Handoff 是角色切换,不是角色继承。

---

第三个坑:对"工具调用"的指令方式根本不同

ChatGPT 里说"你可以搜索一下",Agent 里这句话没用

给 ChatGPT 写"如果需要,你可以搜索最新信息",ChatGPT 会根据语境判断要不要用搜索工具,这是合理的——因为你随时可以纠正它。

但给 Agent 写同样的话,就会出问题。Agent 面对模糊的工具指令,会产生两种极端行为:

  • 工具滥用:每一步都调用搜索,哪怕已经有了足够的信息
  • 工具漏用:觉得"可以"不等于"必须",干脆不用,直接靠自己的知识输出——然后产生幻觉

工具调用指令:三段式写法

Agent 的工具指令必须明确三件事:什么时候必须调用、什么时候禁止调用、调用失败怎么办。

❌ ChatGPT 风格(建议性,Agent 不适用):
你可以使用搜索工具来获取最新信息。
✅ Agent 工具调用指令模板(三段式):
agent = Agent(

name="市场研究员",

instructions="""

【工具使用规则 — web_search】

▶ 必须调用的情况:

- 需要竞品的实时定价信息

- 需要近30天内的行业新闻

- 用户明确要求"最新"数据

▶ 禁止调用的情况:

- 已在本次任务中搜索过同一关键词(避免重复搜索)

- 问题可以通过已收集的信息直接回答

- 搜索词过于宽泛(如"AI行业"),必须先细化再搜索

▶ 调用失败回退策略:

- 若搜索返回空结果:换一个更具体的关键词重试,最多重试2次

- 若重试2次仍失败:在报告中标注"该数据暂无法获取",继续完成其他部分

- 禁止因工具失败而编造数据

""",

tools=[web_search_tool]

)

这套三段式写法,本质上是在给 Agent 写行为约束,而不是给人类写"建议"。Agent 是执行者,不是建议的接受者。

---

一张表总结 + 万能 Agent 指令框架

对照表:ChatGPT Prompt vs Agent 指令

| 维度 | ChatGPT Prompt | Agent 指令 | | 目标描述 | 可以模糊,模型自己脑补 | 必须包含可验证的终止条件 | | 角色设定 | System Prompt 管全程,一次生效 | 每个 Agent 独立定义,Handoff 时不继承 | | 工具调用 | 建议性("你可以……") | 强约束(必须调用/禁止调用/失败回退) | | 失败处理 | 不需要,用户可以立刻纠正 | 必须写明,Agent 无法自行请示 | | 输出格式 | 可以在 Prompt 末尾随意提 | 必须精确定义,否则格式会漂移 | | 容错空间 | 高,一问一答可以迭代 | 低,自主执行不能中途干预 |

万能 Agent 指令框架(带注释,可直接复用)

# Agent 指令模板 v1.0

适用于 Agents SDK 2.0 的 Agent(instructions=...) 字段

---

【角色定义】

你是 [具体角色名],专注于 [核心职责]。

风格:[沟通风格,如"严谨简洁"/"友好亲切"]

禁止:[不符合角色的行为,如"禁止使用口语化表达"]

↑ 为什么这样写:明确角色边界,防止多 Agent 场景下人格漂移

---

【任务目标】

用户目标:[用一句话描述用户想要什么]

【终止条件 — 满足以下所有条件才算完成】

1. [可验证的条件1,如"已收集至少5个竞品数据"]

2. [可验证的条件2,如"已生成对比表格"]

3. [可验证的条件3,如"已以指定格式输出"]

↑ 为什么这样写:Agent 必须能自己判断"完成",否则会死循环或提前停止

---

【工具使用规则】

工具名称:[tool_name]

  • 必须调用:[触发条件]
  • 禁止调用:[禁止条件]
  • 失败回退:[失败时的处理方式]

↑ 为什么这样写:模糊的工具指令会导致工具滥用或漏用

---

【输出格式】

最终输出必须包含:

  • [格式要求1]
  • [格式要求2]
使用语言:[中文/英文]

输出格式:[Markdown / JSON / 纯文本]

↑ 为什么这样写:精确的格式要求防止输出漂移,便于下游处理

---

【异常处理】

  • 若无法获取某项数据:标注"暂无数据",继续完成其他部分
  • 若任务超出能力范围:输出"[ESCALATE]"并说明原因
  • 禁止:编造数据、无限重试、提前停止

↑ 为什么这样写:Agent 的 Plan B 必须写在指令里,不能靠它自己发挥

---

💡 想直接上手验证这套框架?

>

文中的 Agent 指令模板已经在 GPT-5.1 / o3 系列上测试过。如果你还没有稳定的 API 访问渠道,可以试试 [api.884819.xyz](https://api.884819.xyz) —— 支持 Agents SDK 2.0 所需的全部接口,按量计费,调试期间成本可控。新用户注册即送体验 token,国产模型(Deepseek、通义千问等)完全免费,没有月租。

>

把上面的框架复制进去,改改任务描述,10 分钟就能看到你的第一个 Agent 跑通。

---

写 Agent 指令的本质,是给"自动驾驶"写行车规则

有一个类比让我想清楚了这件事:

给 ChatGPT 写 Prompt,像是坐副驾驶跟司机说"我想去吃火锅"——司机会问你哪家、几点、几个人,你们可以一路聊着调整。

给 Agent 写指令,像是给自动驾驶系统编程——你要提前告诉它目的地、路线偏好、遇到红灯怎么办、如果高速封路走哪条备用路线、到了停哪里。你不能坐在车里随时纠正,因为它会自己开。

指令写得不好,不是 Agent 笨,是你没给够规则。

我现在每次写 Agent 指令之前,都会先问自己三个问题:

1. Agent 怎么知道它完成了?(终止条件)

2. 如果有多个 Agent,每个的角色边界在哪里?(作用域)

3. 工具什么时候必须用、什么时候不能用、用失败了怎么办?(工具约束)

把这三个问题回答清楚,再动笔写指令,Agent 跑偏的概率会大幅下降。

---

📌 下一篇预告

搞清楚怎么写指令只是第一步。

下一篇我会拆解一个更隐蔽的坑:当 Agent 调用工具失败时,你的"错误处理指令"写得够不够好?

90% 的 Agent 项目在生产环境翻车,不是因为 Prompt 写错了,而是因为根本没写"Plan B"——工具超时、返回空值、网络抖动,这些情况 Agent 一个都扛不住。

下周我会用真实的失败日志,拆解错误处理指令的完整写法。

🔔 关注不迷路,下周见。

---

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

#AI教程 #AgentsSDK #Prompt技巧 #AI开发 #ChatGPT #人工智能 #8848AI #Agent开发