(五)吴恩达、Anthropic都在提的“Agent循环”是什么? | 理解Observe→Think→Act基本循环
2026/8/3 7:51:17 网站建设 项目流程

摘要:本文从吴恩达与 Anthropic 共同强调的 Agent 循环出发,围绕 Observe→Think→Act 基本循环展开白话级拆解。文章先给出极简定义与类比,再逐一剖析观察、思考、行动三个阶段的技术要点和常见误区,通过联网问答、代码调试、多 Agent 协作三个实战场景演示循环运转全貌,并梳理 ReAct、Reflexion 等高级模式与 LangGraph、AutoGPT 的映射关系,最后提供循环完整性检查清单,帮读者一把抓住所有 Agent 行为的底层密码。

引言:一个循环,揭开所有Agent的行为密码

如果你看过吴恩达(Andrew Ng)的Agent课程,或者使用过Anthropic的Claude,你一定会反复看到一个概念——Agent循环。吴恩达在《Building Agentic Systems》中不断强调观察-思考-行动(Observe-Think-Act)循环是Agent区别于普通LLM调用的根本标志;而Anthropic为Claude设计的工具使用(tool use)循环,也正是这样一个标准的三段式节奏。可以说,理解这个循环,就是拿到了理解所有Agent行为的万能钥匙

Agent的循环就像一个人工作时的节奏:先用眼睛看(Observe),大脑思考(Think),手再行动(Act),然后看结果,再思考、再行动……如此往复,直到任务完成。本文将围绕Observe→Think→Act这个基本循环,从第一性原理出发,为你逐层拆解其核心机制,并通过三个经典场景演示它如何“转起来”,最后延伸到LangGraph、AutoGPT等真实框架中的变体。读完你会发现,原来所有炫酷的Agent架构,都能在这个简单循环中找到原型。

一、极简定义:Observe→Think→Act,Agent的心跳

Agent循环的最简骨架可以用一行伪代码概括:

while not done: observe() think() act()

这背后是一个持续运转的反馈闭环,可以用下面这张文字循环图来描述:

Observe(观察) → Think(思考) → Act(行动)

↑ ← ← ← 新状态/反馈 ← ← ← ↓

Agent首先通过观察获取外部信息,然后思考决定下一步要做什么,最后执行行动。行动会改变外部环境或产生新的反馈,这些反馈又成为下一次观察的输入,循环往复。

从“人做事”的视角理解这三个阶段会更直观:

  • Observe(观察):就像你拿起手机,看到一条微信消息,或者打开网页看到搜索结果。
  • Think(思考):你大脑开始分析这条消息的意思,回忆上下文,决定是要回复“好的”还是需要查资料。
  • Act(行动):手指打字回复,或者点击链接、截图分享。

下面用一个总览表格来概括每个阶段的输入、处理与输出:

阶段输入处理输出
Observe用户消息、工具返回值、环境状态、人类反馈信息收集与解析、状态跟踪结构化的观察信息(如搜索结果文本、报错信息)
Think历史对话、当前观察、任务目标、系统提示推理(CoT)、决策(ReAct)、反思(Reflection)决定下一步动作:调用工具、生成回答、请求帮助等
Act思考输出的指令(工具名+参数)执行工具调用、代码运行、生成最终回答行动结果(如API返回、代码执行输出、文本回复)

二、逐一拆解:三步循环中的关键细节

2.1 Observe(观察):打开Agent的“感官”

直击本质的一句话:观察就是Agent从外部世界获取一切可感知信息的阶段,没有观察,Agent就变成了“瞎子”,循环无法启动。

为何缺一不可:设想一个联网问答Agent,如果它只能调用搜索工具,却不去读取搜索返回的标题和摘要,那么它连搜索的意义都丧失了。观察是闭环的入口,一旦被省略,后续的思考和行动都会建立在空白或过时信息上,彻底“断链”。

观察的来源远比想象中丰富:

  • 用户原始消息:最直接的输入。
  • 工具返回值:如搜索引擎返回的JSON、代码沙箱的stdout/stderr、数据库查询结果。
  • 环境状态:比如游戏Agent当前坐标、库存数量等。
  • 人类反馈:人类对之前动作的确认或纠正(Human-in-the-loop)。
  • Agent自身之前的行动结果:如修改代码后运行得到的报错信息。

技术实现手段:通常是在程序中解析API响应、捕获异常、拼接上下文,然后以结构化文本(或ChatML格式)传递给LLM。吴恩达在课程中特别强调,Agent必须能够“感知环境”,他把观察能力列为Agent设计的基石。

常见误区:将观察简单等同于“拿到一个JSON”,却忽略了需要从中提取关键信息并做好预处理,导致LLM被大量噪音淹没。

2.2 Think(思考):推理与决策的“黑箱”透明化

直击本质的一句话:思考是Agent基于当前观察和历史信息,决定“下一步该做什么”的推理过程,是整个循环的智能核心。

为何缺一不可:如果没有思考,Agent就会退化成机械的“输入-输出”映射,面对稍微复杂一点的任务(如多步推理、工具选择)就会乱来。没有思考的Observe→Act其实是硬编码的规则引擎,无法处理开放域问题。

思考的技术手段:从简单到复杂,业界已经形成了一套清晰的演化路径:

  • CoT(Chain-of-Thought):让模型在回答前先输出推理步骤,提升多步推理准确率。
  • ReAct(Reasoning + Acting):将Thought、Action、Observation交织起来,模型每走一步都先Think再Act,再根据Observation调整下一步Thought。这是很多Agent框架的默认“思考范式”。
  • Reflection(反思):在生成答案或执行动作后,让模型再“回头看”一遍自己的输出,自我批评并修正,代表工作如Reflexion。
  • Planning(规划):在开始行动前,先生成一个全局计划,再按计划逐步执行,如Plan-and-Solve。

Anthropic在Claude的工具使用文档中,明确展示了模型的思考过程:Claude会先产生一段文字推理(在tool_use块之前),描述它为什么选择某个工具、参数如何构造。这就是Think阶段的具体表现,证明了思考不是空谈,而是被显式设计在产品逻辑中的。

常见误区:误以为思考只是LLM内部的黑盒,实际上可以通过精心设计的Prompt要求模型结构化输出思考步骤,让它透明可控。

2.3 Act(行动):将思想转化为改变

直击本质的一句话:行动是将思考产生的决策“落地”,执行具体工具、函数或生成最终回答,是Agent产生价值的唯一出口。

为何缺一不可:只观察只思考却不行动,就成了空想家,永远解决不了实际问题。同时,行动还承担着生成反馈的职责——如果没有行动,下一次观察就没有新内容,循环就会停滞。

常见的行动类型

  • 工具调用:搜索、计算器、代码解释器、天气API等。
  • 代码执行:在沙箱中运行Python/JavaScript代码,并捕获输出。
  • 生成最终回答:当Agent判断任务已完成,将结果以自然语言返回给用户。
  • 请求人类帮助:当遇到无法处理的情况时,暂停并等待人工输入。

技术实现手段:主流做法是由LLM输出特定格式的指令(如function call、tool_use block),宿主程序解析后执行,然后将结果转为文本重新注入下一次观察。吴恩达将这一模式称为“tool-use loop”,正是Observe→Think→Act的工程化实现。

常见误区:把所有Act都简单理解为“回一个消息”,忽略了行动本身的质量(如参数正确性、异常处理)决定了循环能否健康延续。

三、循环实战:从三个经典场景看循环如何转起来

下面通过三个场景,用“循环泳道图”式文字演示每一步的输入、思考与输出,让你直观感受O-T-A的真实运转。

场景1:联网问答(信息检索)

任务:回答“2024年全球GDP增长预测是多少?”

循环演示:

Observe:用户输入问题,系统检查历史对话为空。
Think:Agent判断需要最新数据,决定调用搜索工具,构造查询词“2024 global GDP growth forecast”。
Act:调用bing_search(query="2024 global GDP growth forecast"),得到一段包含多个链接和摘要的返回文本。
Observe(新循环):读取搜索返回的前三条摘要,发现IMF预测为3.2%,世界银行预测为2.6%。
Think:两条信息基本一致,可以直接给出综合回答;判断不需要再次搜索。
Act:生成最终回复:“根据IMF和世界银行的最新预测,2024年全球GDP增长约在2.6%~3.2%之间。”

可以看到,Observe阶段从空到有,再到获取搜索结果,Think阶段驱动了工具选择和答案提取,整个循环转了两次半(两次搜索相关观察,一次最终回答)。

场景2:代码生成与调试

任务:写一个Python函数计算斐波那契数列,但故意使用递归且无缓存,然后让Agent优化。

循环演示:

Observe:用户要求优化一个已有的递归斐波那契函数,并提供了报错截图:递归深度超限。
Think:Agent分析代码,发现是标准递归无缓存,时间复杂度O(2^n)且容易栈溢出;决定改用迭代法。
Act:调用代码编辑器,将原递归函数替换为迭代版本,并生成一个测试调用。
Observe:运行测试,返回结果正确,无报错。
Think:测试通过,任务完成。
Act:返回成功消息及优化后代码。

这个场景中,Observe的关键是“报错信息”,若Agent只看代码不看报错,就很难定位栈溢出问题。Think阶段使用了因果推理(递归导致栈溢出),Act精准执行了代码替换。

场景3:多Agent协作(宏观视角)

任务:一个主管Agent协调两个子Agent:一个负责数据查询,一个负责数据分析。

循环演示(简化):

① 主管AgentObserve用户需求:“分析销售数据并生成报告”。
② 主管AgentThink:分解任务,先查数据,再分析,计划调用子Agent1。
③ 主管AgentAct:发送消息给子Agent1:“请查询近12个月销量”。
④ 子Agent1内部启动自己的O-T-A循环:Observe指令→Think决定调SQL→Act查询数据库→得到结果,再Act将数据返回主管。
⑤ 主管AgentObserve子Agent1返回的数据,Think:数据已齐,调用子Agent2分析。
⑥ 主管AgentAct:发送消息给子Agent2:“请基于此数据生成趋势图和分析文案”,子Agent2内部同样跑自己的O-T-A循环。
⑦ 最终主管Agent收集结果,整合成报告,Act返回用户。

这揭示了多Agent系统的本质:每个Agent内部都在跑自己的Observe→Think→Act循环,而Agent之间的消息传递构成了一个更高层的、跨Agent的“通信循环”

四、循环的延伸:从基础循环到高级Agent模式

Observe→Think→Act不是僵化的三段式,而是一个可灵活增强的元模式。许多著名的Agent范式都是在这个基本循环上扩充、分层或内嵌而来。下面用一个表格来快速对比:

模式与O-T-A的关系核心增强代表性框架
ReAct就是O-T-A的同步交织:Thought→Action→Observation→Thought…将思考与行动交错并显式标注LangChain ReAct Agent、OpenAI Functions
Plan-Act-Observe在Think阶段前置一个全局规划步骤,再进入O-T-A先规划后执行,减少盲目尝试Plan-and-Solve、BabyAGI
Reflexion在循环尾部增加一个反思步骤,对历史循环进行评价并更新记忆长期记忆和自我改进Reflexion论文、AutoGPT(部分实现)
分层循环(Hierarchical)高层Agent的Task分解为子任务,每个子任务启动子Agent自己的O-T-A循环递归分解,适合复杂规划AutoGPT、MetaGPT

在实际工程中,这些模式是如何“兑现”为代码的呢?我们以两个主流框架为例:

  • LangGraph:将Agent行为建模为有向图,节点可能是“Think节点”(调用LLM)或“Act节点”(执行工具),边则承载条件判断。但无论图怎么画,消息在节点间流转的过程,本质上就是一轮又一轮的Observe→Think→Act。图结构只是为循环提供了显式的编排和条件分支。
  • AutoGPT的递归循环:早期AutoGPT的核心循环就是一个while循环,不断地从短期记忆读取上下文(Observe),调用LLM生成下一步命令(Think),然后执行命令如google_search、write_file(Act),再把结果写入记忆。这种递归的Observe→Think→Act正是其自主性的来源。

所以,无论你用的是高度抽象的LangGraph,还是简单粗暴的Python while True,底层的逻辑从未改变。

五、写在最后:理解循环,你就抓住了Agent的设计要义

读到这里,你已经掌握了Agent设计的“第一性原理”。当你下一次构建自己的Agent时,可以用下面这份循环完整性检查清单来审视你的设计:

  1. Observe是否全面?你的Agent能否获取所有必要的上下文?(用户消息、工具结果、环境状态、历史记录)
  2. Think是否充分?Agent是否有明确的推理步骤?有没有可能陷入死循环或过早结束?
  3. Act是否可靠?工具调用的参数是否正确?执行失败时是否有备选方案?
  4. 循环是否闭合?行动结果是否一定会被纳入下一次观察?是否存在“只行动不观察”的断点?
  5. 何时停止?循环的终止条件是否明确?能否避免无限循环浪费资源?

答案或许复杂,但起点永远简单——Observe → Think → Act。希望这篇白话拆解能让你有一种“一通百通”的透彻感。如果觉得有用,欢迎点赞、收藏,并在评论区分享你在设计Agent时遇到的循环趣事或踩坑经历,我们一起让智能体真正“活”起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询