大模型 Agent:从 ReAct 到工具调用与自主规划

当大模型不再只是”回答问题”,而是能调用搜索、执行代码、操作数据库、串联多个步骤去完成一个目标时,它就演进为一个 Agent(智能体)。Agent 把 LLM 的推理能力与外部工具、环境与记忆连接起来,使其能在不确定、需要多步决策的真实任务中持续行动。本文梳理 Agent 的核心范式、关键机制、主流框架定位及其固有局限。

什么是大模型 Agent

狭义上,Agent 是一个以 LLM 为”大脑”的系统:它接收目标,结合当前上下文进行推理,决定下一步动作(调用工具或生成内容),观察返回结果,再进入下一轮,直到任务完成。与单次问答不同,Agent 强调”闭环”——行动会产生环境反馈,反馈又反过来影响后续决策。一个最小可用 Agent 通常由四部分构成:规划(Planning)、记忆(Memory)、工具(Tools)、执行循环(Action Loop)。

ReAct:推理与行动交织

ReAct(Yao et al., 2022)是 Agent 研究的奠基性范式之一。它提出让模型以交错的方式同时生成”推理轨迹(Thought)“和”行动(Action)“。一次典型的 ReAct 轨迹形如:

Thought: 我需要先确认某公司的成立年份,可以查资料。
Action: Search[公司名]
Observation: 该公司成立于 1998 年。
Thought: 接下来需要计算其到 2024 年的经营年限。
Action: Calculate[2024 - 1998]
Observation: 26
Answer: 26 年。

关键价值在于,推理轨迹帮助模型跟踪计划、处理异常、修正错误,而行动则让模型接入外部知识(如 Wikipedia API),从而显著缓解纯思维链(CoT)中的幻觉与错误传播。相比”只推理”或”只行动”,ReAct 在 HotpotQA、FEVER 及 ALFWorld、WebShop 等决策类任务上均有明显提升,且过程对人类更可解释、更可信。

工具调用与 Function Calling

ReAct 靠模型”自由生成”动作字符串来触发工具,鲁棒性有限。更工程化、更可靠的方式是 Function Calling(函数调用):模型不再输出随意文本,而是按预定义 JSON Schema 生成结构化调用请求,由运行时解析并执行业已注册的函数。以 OpenAI 风格为例:

{
  "name": "get_weather",
  "arguments": { "city": "上海", "unit": "celsius" }
}

这种方式的优势在于:参数强类型、可被校验、易于接入任意后端 API(搜索、数据库、计算、第三方 SaaS)。许多现代模型已原生支持 Function Calling,训练阶段就对齐了”何时该调用、如何填参数”。实践中,把工具描述写得清晰、给出合理的必填/可选字段,几乎比提示词本身更能决定 Agent 的成败。

规划:从单步到多步

简单任务可以用 ReAct 的”走一步看一步”,复杂任务则需要显式规划。常见策略包括:

  • 任务分解(Plan-and-Execute):先让模型产出整体计划(子目标列表),再逐步执行并视情况重规划;
  • 反思(Reflexion):在失败后让模型对自身轨迹做总结与反思,指导下一轮尝试;
  • 树状/图状搜索:在多个候选路径间展开(如 ToT、GoT),用模型或校验器筛选。

规划模块要解决的核心矛盾是:计划太死,遇到环境变化无法调整;计划太松,又容易陷入无效循环。成熟的 Agent 往往采用”粗粒度计划 + 细粒度 ReAct 执行”的混合结构。

记忆:短期与长期

记忆让 Agent 跨越单次交互保持状态。一般分为两类:

  • 短期记忆:当前会话的上下文窗口,存放最近若干轮对话、工具返回,受上下文长度限制;
  • 长期记忆:把历史经验、用户画像、知识片段存入外部存储(向量库、KV 库、文件),在需要时检索注入。

检索增强(RAG)常常与长期记忆复用同一套向量检索链路:Agent 把”相关经验”或”相关知识”召回,作为下一步推理的上下文。需要注意,往上下文里塞太多无关记忆反而会降低模型表现,因此”检索什么、何时检索、如何压缩”都是关键设计点。

主流框架定位

  • LangChain:生态最庞大,提供模型、工具、记忆、检索、链与 Agent 的丰富抽象,适合快速拼装复杂流程,但抽象层多、调试成本偏高;
  • LlamaIndex:以”数据/RAG”为第一公民,擅长把企业文档、数据库接入 LLM,做检索驱动的 Agent 时有优势;
  • 更轻量的运行时(如部分专用编排库与官方 SDK 的 Agent 接口)则强调可观测性与可控性,适合生产部署。

框架只是”脚手架”,真正的差异在工具设计、提示工程、错误处理与评估体系,而非用了哪套库。

典型应用与局限

Agent 已在以下场景落地:自动化数据分析与报表、代码生成与执行、客服工单流转、科研文献检索综述、运维排障。但它有明显局限:

  1. 可靠性:长链路中任何一步出错都可能被后续步骤放大,缺乏”早停/校验”机制时容易空转;
  2. 成本与延迟:多轮推理 + 工具调用叠加,token 消耗与耗时显著高于单次问答;
  3. 可解释与安全:自动调用写操作(发邮件、删数据)需严格权限与人工确认;
  4. 评估困难:开放式任务缺少稳定指标,难以回归测试。

小结

大模型 Agent 的核心是”推理—行动—观察”的闭环,ReAct 提供了范式基础,Function Calling 提供了工程可靠性,规划与记忆则决定了它能否处理复杂、长程任务。LangChain/LlamaIndex 等框架降低了搭建门槛,但 Agent 的成败更取决于工具边界、错误处理与评估。理解其局限,才能在生产中稳妥落地而非盲目自动化。

参考与延伸阅读

  1. Yao, S. et al. ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629 (2022).
  2. OpenAI 函数调用文档: https://platform.openai.com/docs/guides/function-calling
  3. LangChain 文档: https://python.langchain.com/docs/introduction/
  4. LlamaIndex 文档: https://docs.llamaindex.ai/
  5. Shinn, N. et al. Reflexion: Language Agents with Verbal Reinforcement Learning. arXiv:2303.11366 (2023).
  6. Yao, S. et al. Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv:2305.10601 (2023).
本文累计阅读