9.3 LLM Agent 与工具调用:ReAct、Function Calling 与规划执行

1.从"会聊天"到"会干活"

前面八卷我们训出来的模型,本质上是个"会聊天"的东西——你问它答。但现实里我们想要的是"会干活"的东西:让它去查数据库、调 API、跑代码、操作浏览器、订机票。能让模型自主规划步骤、调用外部工具、根据反馈继续行动的这套范式,就是 Agent(智能体)。这是 2025–2026 年大模型应用最火热的方向,也是 8.5 节 GLM 的 ARC 定位、Kimi K3 的 agent 排名所争夺的核心战场。

这一章我们讲清 Agent 的基本范式:ReAct 循环、Function Calling、规划-执行结构

2.ReAct:思考与行动交替

最经典的 Agent 范式叫 ReAct(Reasoning + Acting,推理加行动)。它的核心是一个循环

  1. Thought(思考):模型根据当前任务和已有观察,推理下一步该干什么。
  2. Action(行动):模型选择一个工具并给出调用参数。
  3. Observation(观察):执行工具,把结果反馈给模型。
  4. 回到第 1 步,基于新观察继续推理,直到任务完成。

举个具体例子。用户问"杭州明天会下雨吗",一个 ReAct Agent 会这样跑:

  • Thought:我需要查杭州明天的天气。
  • Action:调用 weather_api(city="杭州", date="明天")
  • Observation:返回"小雨,15–22°C"。
  • Thought:拿到结果了,可以回答用户。
  • Action:finish(answer="杭州明天小雨,气温15–22°C")

这个"思考-行动-观察"的循环,让模型不再只是"一次生成",而是能多轮地、根据环境反馈地完成任务。ReAct 的精髓在于:推理(决定做什么)和行动(实际去做)交织进行,每一步行动的结果都会影响下一步推理

3.Function Calling:结构化的工具调用

ReAct 用自然语言描述行动,容易出错(模型可能把参数写错格式)。Function Calling(函数调用) 是一个更结构化、更可靠的机制,现在几乎所有主流大模型(GPT、Claude、Qwen、DeepSeek、GLM)都原生支持。

Function Calling 的做法是:你预先定义一批"工具"(每个工具有名字、描述、参数 schema),告诉模型有哪些工具可用。模型根据用户请求,输出一个结构化的 JSON 调用(工具名 + 参数),而不是自然语言。调用框架解析这个 JSON、执行真正的函数、把结果返回给模型。

和 ReAct 比,Function Calling 的优势是结构化、可靠(JSON 比 自然语言好解析),而且模型经过了专门训练来正确输出函数调用。劣势是灵活性略低(工具要预先定义)。实际工程里两者经常结合——用 Function Calling 做可靠的工具调用层,用 ReAct 风格的思考循环做规划。

4.规划-执行:复杂任务的拆解

ReAct 适合"几步就能完成"的简单任务。但面对"帮我调研 X 并写一份报告"这种复杂任务,逐 token 的 Thought-Action 循环效率太低,而且容易跑偏。于是有了**规划-执行(Plan-and-Execute)**结构:

  1. 规划阶段:先用模型把大任务拆成一组有序的子任务(一个计划)。
  2. 执行阶段:逐个执行子任务,每个子任务可以是一个 ReAct 循环或一次工具调用。
  3. 重新规划:执行中如果发现计划不合理,回到规划阶段调整。

这比纯 ReAct 更适合长链条、多步骤的复杂任务,因为规划是显式的一步(不是埋在 token 流里),人可以审查、可以改。

5.工具调用协议:MCP 的兴起

到 2025–2026 年,Agent 生态还出现了一个重要标准——MCP(Model Context Protocol)。它解决的是"工具定义碎片化"问题:每个模型厂商、每个 Agent 框架以前都各自定义工具格式,互不通用。MCP 提供了一个统一的工具/资源暴露协议,让一个工具写一次就能被任何支持 MCP 的模型和框架调用。这正在成为 Agent 生态的事实标准,类似"工具界的 USB 接口"。

6.练习

Q1. ReAct 循环的三个步骤是什么?为什么说"行动的结果会影响下一步推理"?

Thought(思考下一步)、Action(选工具调用)、Observation(执行结果反馈)。每步 Observation 作为新信息喂回模型,影响下一步 Thought,所以推理和行动交织、动态适应。

Q2. Function Calling 相比 ReAct 的纯自然语言行动,有什么优势?为什么更可靠?

Function Calling 输出结构化 JSON(工具名+参数),比自然语言好解析、不易写错格式;且模型经专门训练正确输出函数调用。可靠性强,适合工程化部署。

Q3. 规划-执行结构相比纯 ReAct,适合什么任务?为什么?

适合长链条、多步骤的复杂任务。规划是显式的一步(可审查可改),而非埋在 token 流里;执行阶段逐子任务跑,效率比逐 token 循环高,且不易跑偏。

Q4.(面试题) 如果要你搭一个"能查数据库、能画图、能发邮件"的 Agent,你会怎么设计?用到哪些组件?

用 Function Calling 做工具调用层(定义 query_db/plot/send_email 三个工具的 schema),用 ReAct/Plan-Execute 循环做规划。用户请求进来→模型规划步骤→逐步 Function Call 调工具→观察结果→继续,直到完成。工具定义尽量遵循 MCP 协议以保证可复用。

7.小结

Agent 把大模型从"会聊天"变成"会干活",核心是 ReAct 循环(思考-行动-观察)+ Function Calling(结构化工具调用)+ 规划执行(复杂任务拆解)。MCP 正在统一工具生态。下一篇我们看多个 Agent 怎么协作完成更复杂的任务。

下一章见。

相关标签
深度学习工程落地AgentReActFunction Calling工具调用