人工智能实践(语言智能)
第7讲:Agent

7.2 LLM Agent 的四要素

以 LLM 为大脑的 Agent 核心抽象:规划、记忆、工具、反思;ReAct 范式;与经典架构的映射

为什么 LLM 能成为 Agent 的大脑

在 2022 年之前,人们普遍认为 LLM 只是"更会聊天的自动补全器"。三项工作打破了这一认知:

  1. CoT(Chain-of-Thought) — Wei 等人(NeurIPS 2022)证明,仅通过在 few-shot 示例中展示中间推理步骤,足够大的 LLM 就能执行多步推理(GSM8K 上 PaLM-540B + 8 shot CoT 超过了带 verifier 的 fine-tuned GPT-3)。关键洞见:LLM 无需微调也能做结构化推理
  2. ReAct — Yao 等人(ICLR 2023)把 Reason(思考)和 Act(行动)拧成交替循环,让 LLM 既能推理也能与外部世界交互。
  3. Toolformer — Schick 等人(NeurIPS 2023,Meta AI)展示了 LLM 可以通过自监督学会何时调用工具、调用哪个工具、传什么参数、如何融合结果——全程无需人工标注。

这三块拼图合起来告诉我们:LLM 天然具备成为 agent 大脑的能力,不需要外挂一个"经典 planner"来做规划。


Lilian Weng 的四要素框架

OpenAI 的 Lilian Weng 在 2023 年的博文 LLM Powered Autonomous Agents 中提出了一个后来被所有框架采用的抽象:

Agent=LLM(core)+Planning+Memory+Tools\text{Agent} = \text{LLM(core)} + \text{Planning} + \text{Memory} + \text{Tools}

我们这里把经常与 Memory 并列出现的 Reflection(反思) 也单拿出来,得到今天主流的四要素视角:

1. 规划(Planning)

规划让 agent 把复杂任务拆解为可执行的子步骤。典型方法:

  • 任务分解:CoT、Plan-and-Solve、Least-to-Most
  • 搜索式规划:Tree of Thoughts、Graph of Thoughts、LATS
  • 解耦规划与执行:ReWOO(Plan → Worker → Solver)

对应经典架构:这就是 BDI 里的"从欲望到意图"这一步

2. 记忆(Memory)

记忆在多个时间尺度上运作:

类型实现类比
短期记忆Context window / Scratchpad人的工作记忆
长期记忆向量库(Pinecone、Chroma)、笔记文件人的长时记忆
情景记忆过去 trajectory 的回放自传式记忆
语义记忆知识图谱、embedding概念记忆

代表性工作:MemGPT(Packer et al., 2023)把操作系统的分层存储搬进 agent——主 context 像 RAM,外部存储像磁盘,agent 通过工具调用在两者之间搬运。这正是经典"黑板架构"的 LLM 版。

3. 工具(Tools)

工具让 agent 突破 LLM 的能力边界:搜索、计算器、代码执行、数据库查询、第三方 API。工具调用的基础设施经历了两次标准化:

  • OpenAI Function Calling(2023-06):让 LLM 输出结构化 JSON 以调用函数
  • MCP(Model Context Protocol)(Anthropic, 2024-11):"AI 的 USB-C",用 JSON-RPC 统一 prompt、resource、tool 三类服务

4. 反思(Reflection)

反思让 agent 在不更新权重的情况下改进。经典代表:

  • Reflexion(Shinn et al., NeurIPS 2023):在 episodic memory 中维护"语言强化学习"的反思文本,HumanEval 上 pass@1 达到 91%
  • Self-Refine(Madaan et al., NeurIPS 2023):同一个 LLM 做 Generate → Feedback → Refine 循环,在七项任务上平均提升约 20%

反思对应 AIMA 分类里的学习型 agent——它用语言反馈替代了梯度下降。


ReAct 范式:最稳定的基础抽象

ReAct(Reasoning + Acting,Yao et al., ICLR 2023)是 LLM Agent 领域最重要的一篇论文。它把 CoT 的"思考链"和工具调用合成一个交替循环:

Thoughtt推理Actiont工具调用Observationt环境反馈Thoughtt+1\underbrace{\text{Thought}_t}_{\text{推理}} \to \underbrace{\text{Action}_t}_{\text{工具调用}} \to \underbrace{\text{Observation}_t}_{\text{环境反馈}} \to \text{Thought}_{t+1} \to \cdots

一个 ReAct trajectory 长这样:

Thought 1: 我需要先找这篇论文的标题和摘要。
Action 1: search("Transformer attention is all you need abstract")
Observation 1: 《Attention Is All You Need》(Vaswani et al., 2017)...

Thought 2: 找到了。现在我要计算参考文献的平均年份。
Action 2: fetch_refs("https://arxiv.org/abs/1706.03762")
Observation 2: [2011, 2014, 2015, 2015, 2016, 2016, 2017, ...]

Thought 3: 对这些年份取平均。
Action 3: python("sum([2011, 2014, ...]) / n")
Observation 3: 2014.8

Thought 4: 已有答案,输出最终结果。
Action 4: finish("参考文献平均年份约为 2014.8")

ReAct 在 ALFWorld 和 WebShop 两个交互基准上,分别以 34% 和 10% 的绝对成功率超越了模仿学习与强化学习方法,且只用 1–2 个上下文示例。这个结果让 ReAct 成为 LangChain、AutoGen、smolagents、Google ADK 等几乎所有 agent 框架的事实标准。

为什么 ReAct 如此持久? 因为它把"想"和"做"解耦——Thought 让 LLM 检查自身推理,Action 让 LLM 与世界交互获取新信息。没有 Thought,agent 退化为盲目调用工具;没有 Action,agent 退化为纯 CoT 的独白。两者交替正是 BDI 循环的 LLM 化身。


与经典架构的映射

把经典范式和 LLM Agent 放在一张表里,能看得更清楚:

经典概念LLM Agent 的形态
PEASsystem prompt / 任务描述 / 可用工具 / 返回格式
感知(sensors)工具返回的 observation、向量检索结果
执行(actuators)tool call、code execution、API 请求
简单反射纯 prompt response(无工具、无 memory)
目标驱动 + 规划ReAct / Plan-and-Solve / ReWOO
BDI 信念system prompt + 检索到的 context
BDI 欲望当前 user goal / 任务描述
BDI 意图当前 plan / 下一步 tool call
黑板LangGraph State、AutoGen 消息历史
合同网Multi-agent delegation
学习型 agentReflexion、Self-Refine

一个最小可跑的 ReAct 伪代码

def react_agent(goal: str, tools: dict, llm, max_steps: int = 10) -> str:
    scratchpad = ""
    for step in range(max_steps):
        prompt = f"""你是一个 ReAct agent。
目标:{goal}
可用工具:{list(tools.keys())}
到目前为止:
{scratchpad}

请按以下格式回复之一:
Thought: <推理>
Action: <tool_name>(<args>)
---
或者(当任务完成):
Thought: <推理>
Finish: <最终答案>
"""
        response = llm(prompt)
        if "Finish:" in response:
            return response.split("Finish:")[-1].strip()
        # 解析 Action 并调用工具
        action = parse_action(response)
        obs = tools[action.name](**action.args)
        scratchpad += f"{response}\nObservation: {obs}\n"
    return "达到最大步数,未完成。"

这 20 行代码就是所有现代 agent 框架的骨架。LangGraph、smolagents、AutoGen 只是在这个骨架上加了状态管理、错误恢复、并行化和多 agent 协调。

本节小结

  • LLM 成为 agent 大脑的三块基石:CoT(会推理)+ ReAct(会行动)+ Toolformer(会用工具)
  • 四要素框架:Planning(规划)、Memory(记忆)、Tools(工具)、Reflection(反思)
  • ReAct 是最稳定的基础抽象:Thought → Action → Observation 循环
  • 经典范式的思想没有过时——BDI 成为 prompt 结构,黑板成为共享 state,合同网成为 multi-agent delegation
  • 记住:一个 agent 是否"真正"是 agent,取决于它有没有自主决定何时调用工具、何时停止的能力