🤖 什么是 Agent

从「调用一次 LLM」到「让 LLM 自主完成多步任务」——理解 Agent 的本质,以及它与普通 LLM 应用的关键区别。

本章目标

  • 说清楚 Agent 与「单次 LLM 调用」「Chain(链)」的根本区别
  • 掌握 Agent 的三个核心能力:推理、行动、记忆
  • 理解「控制权反转」——由谁来决定下一步做什么
  • 建立贯穿全教程的统一术语,为后续源码学习打下锚点

为什么「只用 LLM」不够

大语言模型(LLM)本身的能力边界很明确:

所以,一个能真正"做事"的系统,必须把 LLM 当作决策大脑,外面套一层能感知环境执行动作循环思考的框架。这个整体,就叫 Agent(智能体)

📌 一句话定义

Agent = 一个以 LLM 为大脑、能在循环中自主决定"下一步做什么"并调用工具执行的系统。

三种形态的对比

把 AI 应用按"控制权"递进来看,最容易理解 Agent 的定位:

单次 LLM 调用 输入 → 输出 控制权:程序员 问一句、答一句 Chain 链 输入 → 步骤1 → 步骤2 → 输出 控制权:程序员(固定流程) 路径预先编排好 Agent 智能体 输入 → 循环思考+行动 → 输出 控制权:LLM(动态决定) 走多少步、走哪步都由 LLM 决定
图 1.1 · 控制权的转移:从程序员主导到 LLM 主导
维度单次 LLM 调用Chain 链Agent 智能体
谁决定流程程序员程序员(写死步骤)LLM(运行时决定)
执行步数1 步固定 N 步不固定,直到完成
能否用工具可(但顺序固定)可,且自己选哪个
能否根据结果调整有限(条件分支)能,每步都重估
典型例子翻译一句话RAG 问答"帮我查最近订单并退款"
⚠️ 关键区分点:控制权反转

Chain 的流程是程序员在代码里写死的(先检索、再拼接、再问 LLM);Agent 的流程是LLM 自己在运行时决定的(它看到工具结果后,自己判断"还要不要再查一次""是不是可以结束了")。这条界线是 Agent 的灵魂,后面所有框架(LangChain 的 AgentExecutor、LangGraph 的图、OpenCode 的 runLoop)都是围绕它设计的。

Agent 的三个核心能力

无论哪个框架,一个 Agent 都具备这三项能力,缺一不可:

LLM 大脑 🧠 推理 把目标拆成步骤 决定下一步做什么 🛠️ 行动 调用工具执行 产生真实副作用 💾 记忆 记住历史步骤与结果
图 1.2 · Agent 的三要素:推理、行动、记忆,由 LLM 大脑统辖

1. 推理(Reasoning)

LLM 接收当前状态(用户目标 + 已完成的步骤 + 工具结果),输出"下一步该做什么"的判断。这个判断可能是:

2. 行动(Acting / Tool Use)

把 LLM 的判断翻译成对工具的实际调用,并拿到返回结果(observation)。工具可以是任意东西:搜索引擎、数据库查询、代码执行、文件读写、发 HTTP 请求……

3. 记忆(Memory)

记住到目前为止发生了什么,这样 LLM 在下一步推理时才有完整上下文。记忆分两层:

源码中的 Agent 定义

这三个能力的循环,在 LangChain 源码里有一段非常精炼的官方定义。我们提前看一眼(这会在 LC7 章精读):

📄 langchain_core/agents.py:15-26 · 官方对 Agent 工作方式的定义
Agents use language models to choose a sequence of actions to take.

A basic agent works in the following manner:

1. Given a prompt an agent uses an LLM to request an action to take
    (e.g., a tool to run).
2. The agent executes the action (e.g. runs the tool), and receives an observation.
3. The agent returns the observation to the LLM, which can then be used to generate
    the next action.
4. When the agent reaches a stopping condition, it returns a final return value.

把这段话翻译成数据结构,就是 Agent 循环里的两个核心状态:「要继续行动」「可以结束了」。在 LangChain 源码里对应两个类:

📄 langchain_core/agents.py:44 / 148 · 两个核心 Schema(预告,LC7 精读)
class AgentAction(Serializable):
    """代表「要执行某个工具」的请求 —— 循环继续"""
    tool: str               # 要调用的工具名
    tool_input: str | dict  # 传给工具的参数
    log: str                # LLM 的原始输出,用于审计
    type: Literal["AgentAction"] = "AgentAction"


class AgentFinish(Serializable):
    """代表「到达停止条件」的最终返回 —— 循环结束"""
    return_values: dict     # 最终返回给用户的结果
    log: str
    type: Literal["AgentFinish"] = "AgentFinish"
🔍 提前建立的锚点

现在你只需要记住:Agent 循环 = 在「AgentAction(继续)」和「AgentFinish(终止)」之间反复判断。这个二态判定,是 LangChain、LangGraph、OpenCode 三套实现共同的骨架。等学到 LC7LG8OC2 时,你会发现它们都在用不同方式实现这同一个循环。

Agent 的常见分类

按 LLM 决定动作的"风格",业界有几种经典范式,后面源码里都会遇到:

范式核心思想在本教程哪里学
ReAct Reason + Act 交替:先思考(Thought)再行动(Action),观察结果(Observation)后再思考 F3 理论 / LG8 create_react_agent
Tool Calling 直接用 LLM 原生的 function calling 能力选工具,不再用文字推理 LC8 create_tool_calling_agent
Plan-and-Execute 先全局规划再分步执行,适合长任务 OpenCode 的 plan 模式(OC5
🧭 后续会遇到的术语预告

为了后面读源码不卡壳,先混个眼熟(现在记不住没关系,用到时回来查):

  • Observation(观察):工具执行返回的结果,会喂回给 LLM。
  • Tool Call(工具调用):LLM 输出的"要调用某工具"的结构化指令。
  • Scratchpad(草稿区):把历史思考+行动+观察拼成的一段文本,作为下次推理的输入。
  • State(状态):LangGraph 里的核心概念,承载整个任务过程中流转的数据。
  • Checkpointer(检查点):把状态存盘,让 Agent 能中断/恢复(人在回路的基础)。

小结

下一章

下一章 F2 · LLM 调用解剖,我们钻进 LLM 本身,搞懂 token、context window、工具调用(function calling)的底层机制——这是理解 Agent "推理"和"行动"能力的物理基础。