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

字面意思之外

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

Agent 就是 AI 自己会干活。

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

真正重要的问题是:

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

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

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

这就是 Agent 的核心。

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

先看普通对话:

复制代码
你:帮我写一封邮件。
LLM:好的,这是邮件内容......

到这里就结束了。

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

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

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

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

Agent 不一样。

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

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

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

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

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

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

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

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

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

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

erlang 复制代码
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。

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,越不能只靠模型自由发挥。

总结

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

Agent 不神秘。

它可以简单理解成:

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

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

复制代码
想一想 → 做一步 → 看结果 → 再想一想

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

相关推荐
触底反弹1 小时前
面试被问 RAG 只能说出六个字?这篇用 100 行 Node.js 代码帮你彻底搞懂
javascript·人工智能·面试
weedsfly2 小时前
前端懒加载全家桶:图片、路由、组件的按需加载
前端·javascript·面试
wear工程师2 小时前
synchronized 锁升级:多数人还在背 JDK8 的答案,偏向锁早在 JDK18 就没了
java·面试
暗不需求2 小时前
手写深拷贝:从 JSON 到递归,彻底解决循环引用问题
前端·面试
Liquad Li3 小时前
Salesforce高级开发面试题
java·网络·面试·crm·salesforce
众人皆醒我独醉18 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
KaifuZeng21 小时前
通信与接口协议面试十、PCIe
单片机·嵌入式硬件·面试·通信与接口协议
三月不知肉味y21 小时前
2026-07-05-JAVA面试场景题训练
java·开发语言·面试