本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

主流Agent设计思想 → ReAct

首先澄清:本文讨论的 ReAct (Reasoning-Acting) 是一种指导大型语言模型(LLM)进行自主思考和行动的 Agent 设计模式,它与前端开发中广受欢迎的 React.js 框架毫无关系。

  • ReAct (Reasoning-Acting):一种让 AI Agent 模拟人类“思考→行动→观察→再思考”认知循环的框架,旨在解决复杂任务。
  • React.js:一个由 Facebook(现 Meta)开发的、用于构建用户界面的 JavaScript 库。

ReAct 的核心理念:让 LLM 像人一样“思考”与“行动”

在 ReAct 出现之前,大模型通常有两种极端:

  • 纯推理: 比如你问它一个复杂逻辑题,它通过思维链(Chain of Thought)在脑子里推演,但没法联网查资料,容易一本正经地胡说八道(幻觉)。
  • 纯行动: 比如早期的简单脚本,只能机械地调取 API,不懂得根据结果变通。

ReAct 的核心流程(交互循环)

就像人类解决问题一样,它遵循 “观察 - 思考 - 行动 - 再观察” 的循环:

  1. Thought (思考): 面对用户的任务,Agent 先想:“我现在知道了什么?为了解决这个问题,我下一步应该做什么?”
  2. Action (行动): Agent 决定调用一个工具(比如搜索引擎、计算器、数据库查询)。
  3. Observation (观察/反馈): 工具执行后返回结果(比如搜索到的网页内容)。
  4. Repeat (循环): Agent 拿着这个结果,再次进行 思考:“这个结果有用吗?还缺什么信息?下一步该干嘛?”,直到任务完成。

举个通俗的例子:

任务: 查询现在的天气,并建议穿什么衣服。

  • Round 1:
    • 思考: 用户想知道天气和穿衣建议。我得先知道现在的天气。
    • 行动: 调用天气 API 查询“北京实时天气”。
    • 观察: API 返回:北京,15度,有雨。
  • Round 2:
    • 思考: 知道了是15度且有雨。那我得建议穿保暖且防雨的衣服。
    • 行动: 生成最终回复给用户。

ReAct 在“长期规划”上有局限性

尽管 ReAct 极大地增强了 Agent 解决具体问题的能力,但如果任务非常宏大、步骤非常多(比如“开发一个完整的游戏”或“写一本20万字的小说”),ReAct 往往会表现不佳。
原因主要有以下几点:
A. 视野短视(Myopic View)——“走一步看一步”
ReAct 的本质是贪婪的(Greedy)。它过度依赖“当下的观察”来决定“下一步的操作”。

  • 局限性: 它缺乏全局视角。就像一个人走进迷宫,只盯着脚下的路(根据反馈调整),而脑子里没有一张完整的地图。虽然它能避开眼前的石头,但很容易陷入死胡同,或者在局部兜圈子,甚至走偏了方向而不自知。
    B. 上下文记忆限制(Context Window)
    ReAct 模式下,所有的思考、行动代码、工具返回的结果(有时非常长,比如网页HTML)都会被塞进对话历史里。
  • 局限性: 随着步骤增加,上下文(Prompt)会迅速变得极长。
    • 遗忘: 大模型虽然有长窗口,但“注意力”会衰减。在这个很长的历史中,Agent 可能会“忘记”最初的那个宏大目标是什么。
    • 干扰: 中间错误的尝试和冗余的信息会干扰模型的判断,导致它在第20步的时候,逻辑已经跟第1步对不上了。
      C. 错误累积与难以回溯(Error Propagation)
      ReAct 是线性的。如果第 3 步做了一个错误的决定(行动),第 4 步的思考是基于第 3 步的错误结果进行的。
  • 局限性: 这种“一步错,步步错”的滚雪球效应在长期任务中是致命的。ReAct 原生框架通常没有设计“后悔药”机制(即:发现第10步走不通,主动跳回到第3步重新规划)。它倾向于在错误的道路上试图修修补补,最后彻底失败。
    D. 缺乏分层规划(Lack of Hierarchy)
    长期规划通常需要分而治之:先把大目标拆解成里程碑,再把里程碑拆成小任务。
  • 局限性: 基础的 ReAct 是扁平的。它试图用同一个大脑在一个层面上解决所有问题。它没有“战略家”和“执行者”的分工。当它沉迷于解决某个具体的代码报错(微观细节)时,往往会丢失对整体项目进度(宏观目标)的把控。

如果你让它负责一个耗时好几天的复杂项目,它会因为缺乏全局蓝图、记忆过载和甚至迷失在细节中,最终导致任务失败。

现有解决:现在的先进 Agent 设计通常会在 ReAct 之上增加 "Planning"(规划) 模块(如 Plan-and-Solve, TOT 树状思维, 或分层 Agent),先生成高层计划,再让 ReAct 去执行每一个小的子任务。

# agent  

评论