本文最后更新于 2026-05-21,文章内容可能已经过时。

你的Agent总在转圈?问题不在AI,在你写的Prompt

fchollet(Keras作者、前Google Brain研究员)在X上发了一条让很多人沉默的推文,大意是:当前大多数Agent系统就像一只撞墙的盲松鼠——它在动,它在"努力",但它根本不知道自己在干什么。

同一周,Google发布了Gemini 2.5 Flash,官方重点宣传的场景之一就是Agent任务:更快的推理速度、更低的延迟、更强的工具调用能力,专门为自动化工作流优化。

两条新闻放在一起,看起来像是在互相打脸。

但仔细想想,他们说的根本不是同一件事。fchollet说的是Agent的使用现状,Google说的是模型的能力边界。而你踩的坑,两边都有份——模型能力确实在提升,但大多数人给Agent写的Prompt,还停留在"给普通ChatGPT下命令"的水平。

这篇文章不是新闻综述。我想拆解一个更具体的问题:为什么你的Agent总在转圈,明明模型很聪明,但就是干不成事?

答案几乎每次都指向同一个地方:Prompt。

---

一、最容易搞混的地方①:目标 vs. 指令

先建立一个直觉。

普通模型交互,像点餐:你说"来一份宫保鸡丁",服务员记下来,厨房做,端上来,结束。

Agent,更像餐厅经理:你告诉他"今晚要保证后厨效率",他需要自己决定排班怎么调、哪道菜备料要补、顾客投诉怎么处理——你给的是目标,他来拆解执行路径。

问题来了:大多数人给Agent写Prompt,用的还是"点餐"的思路。

来看一个真实对比。同样的任务——"帮我整理竞品信息":

# 普通Prompt写法

你是一个市场分析助手。

请帮我整理竞品A、B、C的产品功能、定价和用户评价。

# Agent Prompt写法

角色

你是一个市场情报Agent,可以调用网络搜索工具和数据提取工具。

最终目标

生成一份结构化的竞品对比报告,覆盖竞品A、B、C。

终止条件

满足以下任一条件时停止并输出报告:

  • 三家竞品的功能、定价、近期用户评价均已收集完毕
  • 搜索工具连续失败超过3次(输出已有数据+失败说明)
  • 距离任务开始超过10分钟(输出当前进度)

执行约束

  • 每次工具调用前,先说明调用目的
  • 不得推测未经工具验证的数据
  • 定价信息必须标注来源URL和获取时间

差异显而易见。但更重要的是行为差异

普通Prompt下,模型会根据训练数据直接生成一份报告,里面的数据可能是过时的,甚至是编造的,但它会写得很自信。

Agent Prompt下,模型会逐步调用工具、验证数据、在遇到障碍时按规则处理——而不是自己"脑补"一个答案。

核心结论:给Agent的目标必须包含终止条件。没有终止条件的Agent,会永远处于"努力中"的状态——它不知道什么叫"完成了"。

这不是模型的问题,是你没告诉它边界在哪。

---

二、最容易搞混的地方②:上下文管理 vs. 一次性输入

普通Prompt有一个隐含假设:模型一次读完所有信息,然后输出答案,结束。

Agent不一样。Agent是一个持续运行的系统,它会多轮调用工具、累积信息、做决策,然后继续。这意味着"上下文"不再是静态的——它在每一步都在变化。

如果你没有显式设计"记忆边界",Agent会出现三种经典症状:

| 症状 | 表现 | 根本原因 | | 失忆症 | 每轮都在重复之前已经做过的事 | 没有持久化的任务状态 | | 重复踩坑 | 同一个工具报错,连续调用10次 | 没有错误记录机制,每次都当新情况处理 | | 工具调用爆炸 | Token消耗飙升,上下文窗口被塞满 | 工具返回的原始数据全部堆进上下文,没有过滤 |

解决方案是上下文分层设计。一个简洁的三层模板:

## 系统层(每次调用都保持不变)
  • Agent角色定义
  • 可用工具清单
  • 核心约束规则
  • 错误处理协议

任务层(本次任务的动态状态)

  • 当前任务目标
  • 已完成的步骤摘要(注意:是摘要,不是原始记录)
  • 当前卡点或待决策项

工具返回层(每次工具调用后更新)

  • 本次工具调用结果(原始数据)
  • 提取的关键信息(压缩后的精华)
  • 下一步行动建议

关键在任务层的"已完成步骤摘要"。很多人犯的错误是把工具的原始返回结果全部堆进上下文,导致几轮之后上下文窗口就被塞满了。正确做法是:每次工具返回后,先提取关键信息,压缩成摘要,只把摘要传入下一轮。

这个设计让Agent知道"我走到哪了",而不是每轮都从零开始理解世界。

---

三、最容易搞混的地方③:错误处理 vs. 默认成功

这是最容易被忽视、但造成翻车最惨的一个差异。

普通Prompt写的是Happy Path——假设一切顺利,直接给答案。这没问题,因为普通对话本来就是一次性的,失败了重新问就行。

但Agent不一样。Agent在执行过程中会遇到各种异常:工具报错、文件不存在、API限流、权限不足、返回数据格式不对……如果你的Prompt里没有写错误处理,Agent会做两件事之一:

1. 幻觉填坑:工具拿不到数据,它自己编一个,继续往下走

2. 无限重试:同一个失败的工具调用,重复执行几十次,直到Token耗尽

来看一个代码Agent的典型翻车场景。

# 没有错误处理的Prompt(节选)

你是一个代码执行Agent。

请读取 /data/report.csv,分析其中的销售数据,生成可视化图表。

实际执行时,如果 /data/report.csv 不存在,这个Agent会怎么做?它会"假设"文件存在,然后继续生成分析代码,生成图表代码,最后输出一份基于虚构数据的完整报告——看起来非常完整,实际上全是幻觉。

# 加了错误处理的Prompt(节选)

你是一个代码执行Agent。

主任务

读取 /data/report.csv,分析销售数据,生成可视化图表。

错误处理协议

  • 如果文件不存在:立即停止,输出"文件缺失:/data/report.csv,请确认路径后重试",不得继续执行
  • 如果文件格式不符合预期:输出文件的实际列名和前3行数据,询问用户确认后再继续
  • 如果代码执行报错:输出完整错误信息,分析可能原因,提出最多2种修复方案,等待用户选择
  • 任何工具调用失败超过2次:停止当前路径,汇报当前状态,等待指令

两个版本的输出差异,在正常情况下你几乎看不出来。但一旦遇到异常,差距就是"一份有用的错误报告"和"一份精美的废纸"。

核心结论:Agent Prompt里,异常处理的篇幅应该不少于主流程。这不是过度设计,这是Agent能稳定工作的基础。

---

四、一个可以直接抄的Agent Prompt框架

把前三章的结论整合成一个结构化模板。拿走直接用。

# Agent Prompt 结构化框架

1. 角色定义

你是一个[具体角色名称],专门负责[核心职责]。

你可以使用以下工具:[工具A]、[工具B]、[工具C]。

2. 最终目标 + 终止条件

目标:[一句话描述最终交付物] 终止条件(满足任一即停止并输出结果):
  • 条件A:[正常完成的标志]
  • 条件B:[超时/失败的兜底条件]
  • 条件C:[用户明确要求停止]

3. 可用工具清单 + 调用规则

  • [工具名A]:用途说明。调用前必须说明调用原因。
  • [工具名B]:用途说明。返回结果超过500字时,先提取关键信息再继续。
  • 禁止:不得调用工具清单以外的任何工具。

4. 上下文管理规则

  • 每完成一个步骤,用1-2句话记录进展摘要(不要保留原始工具输出)
  • 任务状态用以下格式维护:
- 已完成:[步骤列表]

- 进行中:[当前步骤]

- 待处理:[剩余步骤]

5. 错误处理协议

  • 工具调用失败1次:换一种参数重试
  • 工具调用失败2次:记录失败原因,跳过该步骤,继续其他步骤
  • 工具调用失败3次:停止,输出当前进度和失败详情,等待指令
  • 遇到权限/格式/数据缺失问题:立即停止该分支,明确说明缺失内容,不得自行推测填充

6. 输出格式规范

最终输出使用以下结构:

  • 执行摘要:[2-3句话总结完成情况]
  • 主体内容:[具体交付物]
  • 注意事项:[数据来源、置信度、未完成项说明]
💡 想直接测试这套框架?
文中的Agent Prompt模板在 Claude Opus 4.6、GPT-5.1、Gemini 2.5 Flash 上都跑通了。
如果你还没有稳定的API访问渠道,可以试试 [api.884819.xyz](https://api.884819.xyz)——
多模型统一接入,按量计费,国产模型(Deepseek/千问等)完全免费,调试Agent特别方便,不用为切换模型重新配环境。新用户注册即送体验token,注册只需用户名+密码,30秒搞定。

---

结尾:fchollet说得对,但锅不全在Agent

回到开头那条推文。

fchollet说的"盲松鼠",描述的是一个真实现象:Agent在动,在消耗资源,在产生输出,但它不知道自己在干什么,也不知道什么时候该停。

但这不是Agent技术不成熟的问题——至少不全是。

更准确的描述是:我们用写命令的思维,在指挥一个需要自主决策的系统。

命令需要执行者,目标需要决策者。普通Prompt给的是命令,Agent Prompt给的是工作制度——包括目标、边界、权限、异常处理、汇报规则。

把这套制度写清楚,盲松鼠就会变成一个知道自己在做什么、遇到墙会绕路而不是继续撞的员工。

改变不大,但效果天壤之别。

---

📌 下一篇预告

>

框架有了,但Agent真正跑起来之后,你会遇到另一个更隐蔽的问题:
Tool Calling的返回结果,模型到底在怎么"理解"?
为什么同样的工具,有人用得飞起,有人的Agent越调用越乱——
下一篇我们拆一个真实的多工具Agent,看看问题出在哪里。

---

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

#AI教程 #Agent #Prompt技巧 #人工智能 #8848AI #LLM #自动化 #AIAgent