Agent 智能体到底是什么:一文讲透 ReAct 循环

103 阅读7分钟

字面意思之外

很多人第一次听到 Agent,会把它理解成:

Agent 就是 AI 自己会干活。

这个理解没有错,但它只说到了表面。

真正重要的问题是:

Agent 和普通 AI 对话,到底差别在哪里?

差别不一定在模型本身,而在运行结构

普通聊天是“一问一答”。Agent 是“循环推进”。它不是只回答你一句话,而是会围绕目标不断判断下一步、调用工具、观察结果,再决定要不要继续。

这就是 Agent 的核心。

普通对话:一次输入,一次输出

先看普通对话:

你:帮我写一封邮件。
LLM:好的,这是邮件内容……

到这里就结束了。

一条 prompt 进去,一条 response 出来。模型完成了一次生成,但它不会主动检查邮件有没有发出去,也不会继续追问收件人是谁、要不要保存草稿、是否需要改语气。

这种模式更像是问答机器:你问一次,它答一次。输出结束,任务也就结束。

这不是说 Chatbot 没用,而是它的默认结构比较简单。它擅长回答、解释、改写、生成文本,但复杂任务往往需要人类不断补充指令。

Agent:一个持续运转的任务循环

Agent 不一样。

它不是只生成一次答案,而是拥有一个持续运转的循环结构:

你给它一个目标
    │
    ▼
它拆解任务
    │
    ▼
判断下一步该做什么
    │
    ▼
调用工具并拿到结果
    │
    ▼
根据结果继续判断
    │
    ▼
直到任务完成,或触发终止条件

image.png 这个循环通常会持续到以下情况之一:

  • 任务已经完成
  • 达到最大循环次数
  • Token 或上下文长度不够了
  • 多轮结果重复,疑似陷入循环
  • 模型判断当前任务无法继续完成
  • 系统或用户主动中断

所以,Agent 的关键不是“模型突然有了意识”,而是系统给了模型一个可以持续行动的结构。

ReAct 循环:Agent 的经典工作框架

很多 Agent 都可以用一个经典框架来理解:ReAct

ReAct 是 Reason + Act 的组合,实际运行时通常会表现为三步:

Reason:思考,我现在该做什么?
Act:行动,调用工具或执行某个操作。
Observe:观察,工具返回了什么结果?

然后再回到 Reason,进入下一轮。

Reason → Act → Observe → Reason → Act → Observe → ...

这就是 ReAct 循环。

需要注意的是,ReAct 不是 LangChain 这种开发库。它更像是一种 Agent 的工作范式。你可以用 Python 手写,也可以用 JavaScript 实现,也可以通过 LangChain、LlamaIndex、AutoGen、OpenAI Agents SDK 等框架组织起来。

框架不同,工程细节不同,但核心思想很接近:

让模型在“思考、行动、观察”的循环里,逐步推进一个复杂任务。

一个真实例子:分析竞品并写报告

假设你给 Agent 一个任务:

帮我分析竞品,写一份报告。

普通 Chatbot 可能直接根据已有知识写一篇泛泛的报告。

Agent 的做法会更像这样。

第一轮

阶段Agent 做什么
Reason需要先确定竞品范围,至少查三家公司。
Act调用搜索工具,搜索华为、小米、OPPO 的近期产品与市场动态。
Observe拿到产品发布、营销动作、渠道变化等信息。

第二轮

阶段Agent 做什么
Reason只有新闻还不够,缺少财务和市场数据。
Act调用财经 API,或读取官网财报、行业报告。
Observe得到营收、增长率、出货量、市场份额等数字。

第三轮

阶段Agent 做什么
Reason数据已经有了,但还缺少用户口碑和产品对比。
Act搜索测评网站、社区讨论、应用商店评论。
Observe发现用户关注价格、影像、续航、系统体验等维度。

最后一轮

阶段Agent 做什么
Reason信息足够,可以开始组织报告。
Act生成报告结构,写入 report.md,补充引用来源。
Observe检查报告是否覆盖目标、数据、结论和建议。

每一轮都在自觉推进,不需要人类中途告诉它“下一步去查财报”“再找用户评价”“现在写成报告”。

这就是 Agent 和普通 Chatbot 的根本区别:Agent 会在循环中自己决定下一步。

最核心的动作:Tool Use

Agent 真正能“干活”,靠的是 Tool Use。

image.png

LLM 本身不会真的打开浏览器、查询数据库、读写文件、调用接口。它做的是判断:

我现在需要哪个工具?
应该传什么参数?
工具结果是否足够?
下一步还要不要继续?

工具才是真正执行动作的部分。

比如搜索工具、数据库查询工具、代码执行工具、文件读写工具、浏览器控制工具、邮件发送工具,本质上都是系统暴露给 Agent 的外部函数。

可以这样对比:

普通代码Agent Tool Use
谁决定调哪个工具程序员写死LLM 根据任务判断
参数从哪来程序员提前定义LLM 根据上下文生成
调几次通常固定循环中动态决定
什么时候停代码逻辑决定任务状态、限制条件和模型判断共同决定

所以,Agent 并不是 LLM “自己长出了手脚”。更准确地说:

Agent 是 LLM 加上工具调用能力,再加上一个持续推进任务的循环结构。

Agent 的“自主性”从哪里来?

很多人会觉得 Agent 很神奇,因为它看起来像是在自己安排工作。

但从工程角度看,这种自主性主要来自三件事:

  1. 目标

    用户给它一个明确任务,比如“写一份竞品分析报告”。

  2. 状态

    系统记录它已经做了什么、拿到了哪些结果、还缺什么。

  3. 循环

    每一轮都让模型根据当前状态判断下一步。

有了这三件事,模型就不再只是回答一句话,而是在不断更新任务状态。

这也是为什么 Agent 很适合复杂任务,比如:

  • 搜索资料并整理成报告
  • 阅读代码仓库并修改 bug
  • 自动生成测试、运行测试、根据报错继续修复
  • 查询数据库并生成分析结论
  • 操作浏览器完成表单、下单、信息录入等流程

这些任务的共同点是:它们不是一步能做完的。中间会出现新信息、新错误、新判断,需要模型不断调整路径。

ReAct 在面试中怎么说?

如果面试官问:

Agent 的工作原理是什么?

可以这样回答:

Agent 的核心通常可以理解为 ReAct 循环,也就是 Reason、Act、Observe 的循环。LLM 接到任务后,先根据当前目标和上下文判断下一步该做什么;然后调用外部工具执行动作;拿到工具结果后再观察结果是否满足要求,并决定继续还是结束。这个循环让 Agent 能够自主推进复杂任务,而不是只完成一次问答。

这段回答里有几个关键词:

  • ReAct 循环
  • Reason、Act、Observe
  • Tool Use
  • 自主推进复杂任务
  • 终止条件

比单纯背一句“Agent 是能自主完成任务的 AI”更有含金量。

但也别把 Agent 神化

Agent 很强,但它不是万能的。

因为 Agent 的每一步判断仍然来自 LLM,而 LLM 可能会:

  • 选错工具
  • 传错参数
  • 误解工具返回结果
  • 在信息不足时过早下结论
  • 陷入重复循环
  • 把“看起来完成了”误判成“真的完成了”

所以一个可靠的 Agent 系统,通常还需要工程上的保护:

  • 明确的工具 schema
  • 最大循环次数
  • 错误重试机制
  • 关键步骤校验
  • 日志和可观测性
  • 人工确认高风险动作

越是能真实影响外部世界的 Agent,越不能只靠模型自由发挥。

总结

ChatbotAgent
交互模式一问一答循环推进
任务复杂度简单单步复杂多步
工具调用可有可无通常是核心能力
决策方式人告诉它每一步模型根据状态判断下一步
终止条件一次输出结束完成、失败、超限或人工中断

Agent 不神秘。

它可以简单理解成:

一个带工具、带状态、带循环的 LLM。

ReAct 则是理解 Agent 最经典的入口:

想一想 → 做一步 → 看结果 → 再想一想

理解了这个循环,就理解了大多数 Agent 的基本工作方式。