ReAct 与 CoAct:AI 代理的推理与行动之旅

发布于:2025-05-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

引言

能推理又能行动的 AI 代理,是朝着构建更自主系统迈出的重要一步。传统上,语言模型在“思维链”提示方面表现得很出色,也就是通过文本逐步思考问题来解决像算术、常识问题或符号推理这类任务。但用思维链时,模型只依赖自身的内部知识,无法与外部世界互动。另一方面,有些代理用语言模型在交互式环境中执行动作(比如网页导航、文字游戏或机器人技术),但这些代理往往只是反射性地行动,不会深入思考高层次目标,也没有用于长期任务的工作记忆。

于是,ReAct 和 CoAct 这两种方法就登场啦!

ReAct 是一种开创性的范式,它首次将 AI 的内部推理过程与外部动作结合起来。它证明了让语言模型“大声思考”并在环境中采取步骤,比单独做这两者中的任何一个都能更好地解决问题(ReAct: Synergizing Reasoning and Acting in Language Models)。然而,随着任务变得越来越复杂和冗长,即使是使用单一 AI 模型来处理一切的 ReAct 代理,也会在记忆和规划深度方面遇到限制。CoAct 是一种更新的方法,它通过引入协作的层级结构来应对这些挑战:不是让一个代理包揽所有工作,CoAct 使用多个代理,有一个全局规划器指导一个或多个本地执行器CoAct: A Global-Local Hierarchy for Autonomous Agent Collaboration)。这种分工合作的方式是受到人类组织复杂项目的方式的启发,它在处理漫长且复杂的任务时展现出很有希望的改进。

在这篇博客中,我们会深入探讨 ReAct 和 CoAct。我们会讨论每种方法的工作原理,比较它们的推理和行动机制,突出它们的优势和劣势,并查看能够揭示它们性能的基准测试。为了保持趣味性,我们会通过示例来观察这些代理的实际运作。到文章结尾时,你应该能够清楚地了解为什么这两种代理框架对于 AI 研究人员和工程师来说非常令人兴奋,以及推理 - 行动代理的未来可能会走向何方。

None

来源:Gpt-4o-mini

ReAct 概述

ReAct(即推理 + 行动)是一个框架,它使得单一的 AI 代理(通常是大型语言模型)能够在环境中交替进行推理和采取行动(ReAct: Synergizing Reasoning and Acting in Language Models)。具体来说,ReAct 代理以循环的方式工作:它会逐步思考下一步该做什么(以自然语言生成一个推理轨迹),然后根据这个推理采取一个行动(比如查询数据库、点击按钮或者输出答案)。这个行动会从环境中得到一些观察结果或者反馈,代理随后可以在下一步推理中利用这些信息。这个循环不断重复,使得代理能够将复杂任务分解为更小的推理 - 行动步骤,直到找到解决方案。关键在于,推理轨迹不会直接改变环境,而是帮助模型更新其内部状态或计划,而行动则会改变外部世界中的某些东西(或者查询它)并返回新信息。通过结合这两者,代理“思考以决定要做什么”,然后“去做以告知其思考”,就像人类可能会先计划(在脑海中),然后进行实验或查找信息后再继续一样。

None

单一的 ReAct 代理通过迭代推理和执行动作来处理任务,从环境中接收反馈并更新其思维链。

方法论与关键贡献:ReAct 范式是由 Yao et al. (2022) 提出的,作为一种让大型语言模型解决仅靠纯推理或纯行动都无法妥善处理的任务的方法。从技术角度来看,ReAct 通常是通过提示来实现的:给语言模型一个带有示例的提示格式,这些示例展示了交替出现的“思考:”和“行动:”输出的模式。例如,模型可能会被提示一些先推理(“思考:我应该在维基百科上查找 X……”)然后产生行动(“行动:搜索[X]”)的例子。这样一来,在推理时,模型就知道要反复生成一个思维链和一个行动命令。ReAct 论文在多种任务上展示了这种方法——从问答和事实核查到像基于文本的游戏和网页导航这样的交互式任务。ReAct 在这些任务上系统性地优于仅推理(仅靠思维链)或仅行动而不进行明确推理的方法,尤其是在那些从知识和互动中受益的任务上。通过让模型在工作时解释其推理过程,ReAct 也让代理的决策过程对人类更加透明,提高了人们对代理所做事情的信任度。

实际应用场景:ReAct 的概念相当灵活。在知识密集型任务(比如通过咨询知识库来回答问题)中,ReAct 代理可以使用工具,例如搜索引擎或数据库来查找事实,然后对这些事实进行推理以形成答案。例如,如果被问到一个复杂问题,ReAct 代理可能会思考它需要什么(“思考:问题问的是一个国家的首都,我应该查找这个国家的信息”),然后执行一个行动(“行动:搜索[国家名称]”)。观察结果(搜索结果)会反馈到它的下一个思考步骤中,如此循环,直到得出一个有充分依据的答案。这种能够即时获取外部信息的能力意味着 ReAct 代理往往比仅依赖内部知识的代理产生更准确、更与时俱进的答案。ReAct 还被应用于决策制定任务和序列问题中。例如,在基于文本的游戏环境中,ReAct 代理可以通过推理来规划它的行动(“思考:门锁住了,我需要找到钥匙……”),然后在游戏环境中采取行动(“行动:去厨房找钥匙”),接收新的游戏状态,然后继续迭代。研究表明,ReAct 提示让像 PaLM(5400 亿参数)这样的语言模型在这些交互式环境中实现了比标准的强化学习或规划方法(这些方法不利用语言推理)更高的成功率。

所以,ReAct 的主要贡献是协同作用:它将思维链推理的分析能力与工具使用和行动的实际效用结合起来。这使得代理能够动态地制定计划,在实际中调整计划,并且真正地在现实世界中执行这些计划,所有这些都在一个统一的模型内完成。

CoAct 概述

尽管 ReAct 为单一代理同时进行推理和行动开辟了道路,但 CoAct(我们可以将其视为协作行动协调行动)又将事情向前推进了一步,引入了一组协同工作的代理。CoAct 是由 Hou 等人在 2024 年提出的,作为“A Global-Local Hierarchy for Autonomous Agent Collaboration”。CoAct 的动机在于,通过将复杂任务分配给专业代理来更有效地处理:一个负责规划的代理和一个负责执行的代理。这种做法类似于拥有一个项目经理和一个技术员:项目经理制定游戏计划,技术员则执行这些步骤。

None

CoAct 框架将任务分配给两个代理:全局规划代理创建一个高层次的计划,并将子任务分配给本地执行代理,后者与环境互动,并在需要重新规划时提供反馈。

方法论与方法:在 CoAct 中,通常有两个代理(尽管这个框架可以进一步扩展):一个全局规划代理和一个本地执行代理。当任务到来时,全局规划器的工作是理解任务并将其分解为可管理的子任务或阶段。它为解决问题创建了一个类似高层次路线图或计划的东西。例如,如果整体任务是“计划一次旅行并预订所有预订”,全局代理可能会生成像(1)查找航班,(2)预订酒店,(3)预订餐厅等子任务。每个子任务都会被描述并传递给本地执行代理。本地执行代理,在收到子任务后,专注于完成它所需的具体行动。它将在环境中采取步骤(例如,在旅行网站上点击,填写表格)来完成该子任务,同时可能会进行一些自己的小推理以确保正确执行计划。关键在于,本地代理还会向全局代理提供反馈,告知执行情况。如果子任务成功完成,全局代理可能会告诉它进入下一个阶段。如果出现问题——比如子任务失败或出现意外障碍——本地代理会报告一个错误或表示失败的结果。全局规划器随后可以重新评估并重新规划:它可能会调整策略,想出一个替代子任务,甚至修订任务的顺序。这个反馈循环使得 CoAct 不会因一个有缺陷的计划而陷入僵局;它可以动态地纠正其路线,这是与 ReAct 单代理循环的关键区别。本质上,CoAct 建立了一个推理层级:一个代理进行高层次的战略推理,另一个代理进行低层次的战术推理,两者协同工作。

关键贡献:CoAct 框架引入了利用多个基于 LLM 的代理进行层级协作以实现更好的自主性的想法。之前的方法,如 ReAct(以及其他像自我反思方法等)主要涉及一个单一的代理来处理所有事情,随着任务变得越来越长,这可能会受到 AI 上下文窗口的限制,并且容易让 AI 混乱或陷入僵局。CoAct 的层级规划借鉴了人类组织的灵感,也借鉴了强化学习中的多智能体系统。通过分工协作,CoAct 能够更可靠地处理长周期任务。在他们的论文中,作者们在名为 WebArena 的基准测试中展示了 CoAct 的有效性,这是一个包含复杂基于网页的任务的集合(比如在网站上导航以完成目标)(GitHub — dxhou/CoAct)。例如,任务包括像在多个网站上在线购物、填写内容管理系统表单、浏览社交媒体或论坛等——所有这些都涉及许多步骤和决策。与单代理方法相比,CoAct 在这些任务上实现了显著更高的成功率。它能够**“在遇到失败时重新安排流程轨迹”,也就是说,如果某种方法不起作用,全局规划器可以重新组织计划并尝试不同的路径。这种适应性导致了在长序列动作上的更好整体性能**,与 ReAct 基线相比,在成功完成任务方面取得了相当大的优势。

所以,CoAct 的贡献在于证明了对于复杂 AI 任务来说,“两个(或更多)头脑比一个好”:通过明确地将规划和执行分配给不同的代理,我们得到了一个在面对错误时更具鲁棒性的 AI 系统,并且能够应对以前对于单一推理 - 行动循环来说过于复杂的任务。

CoAct 与 ReAct 有何不同?

值得强调这两种设计之间的根本差异。ReAct 使用一个单一代理来同时进行思考和行动。在每个循环中,这个代理决定“这是我的想法……现在我要行动了”。相比之下,CoAct 引入了一种简单的团队合作:一个代理主要负责在宏观层面进行思考(规划),另一个代理主要负责执行行动以及执行过程中的低层次思考。CoAct 中的本地代理仍然使用 LLM,所以它不是盲目执行——它可以对子任务进行推理,但它的关注范围仅限于此。全局代理可能不会关心每一个按钮点击;它将这些细节委托给本地代理,只关心子任务的结果是否符合整体解决方案。这种分工就是 CoAct 在处理非常复杂的任务时的优势所在。然而,这也意味着 CoAct 是一个更复杂的系统(你实际上需要运行两个相互交流的 AI 模型),而 ReAct 则更简单(一个模型处理所有内容)。接下来,让我们从各个方面对这两种方法进行对比。

注意:如果你到这里是为了了解 ReAct 和 CoAct 的工作原理以及它们的关键区别,那么这个概述应该已经足够了。没有必要深入探究。然而,如果你对更深入的探索感兴趣,随时可以继续阅读后续部分。

ReAct 与 CoAct 的对比

ReAct 和 CoAct 都旨在创建能够推理和行动的代理,但它们的实现方式不同。在这一部分中,我们将在几个维度上对它们进行对比:它们处理推理和行动的方式、我们可以如何思考它们的决策制定公式、它们的优势和劣势、性能基准测试,以及它们在不同任务上的可扩展性。

推理与行动机制

ReAct:在 ReAct 代理中,推理和行动紧密耦合在一个单一循环中。可以将其想象为一个大脑在交替进行“思考……”和“行动!”。例如,假设任务是通过查找信息来回答问题。ReAct 代理可能会经历以下步骤:

  • 思考:“嗯,我需要查找关于 X 的信息。让我搜索一下 X。”
  • 行动Search[X](查询外部资源)。
  • 观察:(得到一些结果)。
  • 思考:“结果提到了 Y,这可能与问题相关……我应该查找一下 Y。”
  • 行动Search[Y]……如此循环,直到最终收集到足够的信息,然后可能执行一个行动Finish[Answer]以给出最终答案。

从技术角度来看,这可以被视为语言模型“自我提示”,利用其之前的思考和观察结果来决定下一步行动。ReAct 不明确区分规划阶段和执行阶段——规划被融入到这些思考步骤中。ReAct 中的推理轨迹存储在代理自己的**上下文中(记忆)**中,随着过程的进行,它实际上充当了一个实时的工作记忆。

CoAct:在 CoAct 中,推理和行动被分配到不同的代理之间。全局规划器主要进行高层次的推理(不直接对环境采取行动),本地执行器则负责与环境互动(以及一些针对执行细节的现场推理)。因此,其机制是分层的:首先全局代理产生一个总体计划或下一个子任务(这是一个宏观层面的推理步骤),然后本地代理接收这个计划并产生一系列行动以实现它(这些行动就像是微观层面的操作)。本地代理在决定如何执行子任务时可能仍然会进行一些推理,但重要的是,它是受到全局代理提供的计划指导的。执行完成后,本地代理可能会说“我已经完成了这个部分,这是发生的情况”或者“我遇到了一个问题”(反馈)。这会触发全局代理宣布成功,或者调整下一步计划。本质上,CoAct 的机制是一个双循环系统:一个外循环是全局代理按阶段进行规划,一个内循环是本地代理为每个阶段执行行动。这有点类似于一个经理可能会规划项目阶段,而一个工人则在每个阶段执行任务并向经理汇报。

实际差异:一种想象差异的方式是:ReAct 就像一个人独自解决拼图——他们思考一会儿,移动一下拼图,再思考一会儿,再移动另一块拼图。CoAct 就像两个人一起解决拼图——一个人决定“首先,我们应该先拼边缘部分,然后再填充中间部分”,另一个人则真正拿起拼图块并将其拼好,如果拼图块不合适,他们会告诉规划者,“这个拼图块放在这里不合适,也许我们需要一个不同的策略”。CoAct 中的合作增加了开销(代理之间的通信),但对于棘手的拼图来说可能会更有效。ReAct 的单代理循环更简单,有时对于简单的任务来说速度更快,但如果任务需要一个大的策略转变(它可能会不断尝试类似的行动或者陷入循环),它可能会陷入困境。事实上,研究人员观察到,当单代理处理非常复杂的网页任务时,会出现观察偏差(代理紧紧抓住它看到的第一条信息)和行动重复(它不断重复相同的失败行动)等问题。CoAct 的设计直接解决了这些问题,通过引入一个全局规划器,它能够从一个全新的角度审视问题,当执行器报告失败时,它能够重新规划。

公式转换为 Katex 格式

文档中没有公式,因此无需转换。

代码注释翻译

文档中没有代码块,因此无需翻译代码注释。

最终输出为 Markdown 格式

文档已经是 Markdown 格式,因此无需进一步调整。

结论

ReAct 和 CoAct 代表了设计能够推理和行动的 AI 代理的两个进化步骤。ReAct 带来了一个强大的理念,即 AI 不必只是思考者或行动者——它可以两者兼备。通过在一个循环中将思维链推理与行动执行结合起来,ReAct 代理能够解决以前静态问答系统或盲目行动机器人无法触及的任务。我们看到,ReAct 的简单性和通用性使其成为许多应用的首选方法,从利用工具回答复杂问题,到玩基于文本的游戏,再到与网站互动。它以一种类似人类的方式平衡了推理和行动,这不仅提高了性能,还让我们能够看到 AI 为何会做出这样的行动的可解释性轨迹(ReAct: Synergizing Reasoning and Acting in Language Models)。

CoAct 在此基础上进行了拓展,解决了单个推理循环在面对复杂任务时的不足。通过引入一个结构化的层级,包括全局规划器和本地执行器,CoAct 代理能够以更高的可靠性处理更长、更复杂的任务。这种职责分离意味着代理既能看到森林,也能看到树木:全局代理关注大局,本地代理则专注于一步一步地处理细节(CoAct: A Global-Local Hierarchy for Autonomous Agent Collaboration)。这种设计在涉及许多步骤、分支或需要从错误中恢复的场景中显示出明显的优势,这在长周期的网页任务成功率的提高上得到了证明。本质上,CoAct 更接近于人类团队解决复杂问题的方式——通过委派、专业化和沟通——但这一切都在 AI 框架内完成。

对于研究人员和工程师来说,选择 ReAct 还是 CoAct(或类似的框架)可能取决于手头任务的要求。如果需要一个简单直接的单代理解决方案,并且任务不是特别复杂,ReAct 是一个经过验证的方法,它在保持简单的同时,还能获得动态推理和行动的好处。如果要挑战那些让单代理陷入困境的任务(比如一个持续数小时的 AI 工作流程,或者需要处理许多子目标的任务),投资于 CoAct 风格的架构可能会带来更好的性能和清晰度。当然,也有可能将这些想法混合起来——例如,全局规划器本身可以是一个 ReAct 代理(进行一些推理和行动以制定计划),反之亦然。这个领域发展迅速,我们可能会看到更多复合代理架构。像“思维树”、“自我细化”和多代理协作等方法正在积极研究中,以进一步增强推理能力(有些方法甚至与 CoAct 一起被引用)。未来可能会涉及不仅会规划和执行,还会与其他代理协商、反思自己的错误,或者随着时间的推移学习和改进策略的代理。

总之,ReAct 和 CoAct 是通往更自主和智能的 AI 代理道路上的两个令人兴奋的里程碑。ReAct 展示了思考和行动之间的协同作用是多么强大。CoAct 展示了分工协作可以克服新的挑战。我们看到的叙事与人类组织策略的进步类似,现在在 AI 中得到了反映:首先,一个聪明的个体可以做很多事情;然后,一个协调一致的团队可以做得更多。展望未来,这些代理的潜力是巨大的——从能够为你处理复杂任务的个人数字助理,到在企业中管理工作流程的 AI 系统,再到协调实现物理目标的机器人。通过保持推理和行动之间的平衡,并适当地构建这些能力,我们更接近于能够在开放式的现实世界环境中真正运作的 AI。旅程才刚刚开始,像 ReAct 和 CoAct 这样的框架正在照亮前方的道路。

希望你喜欢阅读这篇文章,现在你应该对它们的工作原理有了清晰的了解。


网站公告

今日签到

点亮在社区的每一天
去签到