Agent 入门
现代 Agent 系统的本质可以用一个简洁的公式表达:Agent = LLM + 上下文 + 工具,更直观地说就是大脑 + 视野 + 手脚。给这三样加上时间——大脑想、手脚做、视野看——就转成了 ReAct 循环:想→做→看,不断重复直到任务完成。
现代 Agent 系统的本质可以用一个简洁的公式来表达:Agent = LLM(大语言模型,Large Language Model)+ 上下文 + 工具。这个公式简洁而实用,但其中每个词都需要做广义的理解:
- LLM 是 agent 的大脑:它不只是一组模型参数,而是 agent 的整个决策内核——理解意图、思考规划、做出判断。就像人类大脑不只是神经元的集合,还包括通过经验塑造的思维方式,LLM 的能力也来自两部分:预训练所积累的世界知识与语言能力,以及后训练所固化的决策策略。
- 上下文是 agent 的视野:它不只是输入给模型的那段文本,而是 agent 在每个决策点能看到的全部信息——环境信息、用户记忆、领域知识、自身状态和任务进展。就像人类做决定时需要看清当前的状况、回忆相关经验、翻阅参考资料,agent 的上下文窗口就是它当下能看到的一切。
- 工具是 agent 的手脚:它不只是几个可调用的 API 函数,而是 agent 能做的所有事情的集合——从预定义的工具调用到按需加载的专业技能(Skills),从动态生成代码创造新能力到委托子 agent 协作,从主动与用户沟通到响应外部事件。
换一种更直观的说法:Agent = 大脑 + 视野 + 手脚。大脑负责思考和决策,视野提供思考所需的全部信息,手脚将决策转化为对现实世界的改变。
对应到强化学习
这三个组件恰好对应 RL(Reinforcement Learning,强化学习)中的三个核心概念。下面这张表格是可选阅读——如果你没有 RL 背景,完全可以跳过,不影响后续理解;它只是帮助有 RL 背景的读者把已有知识和本书的术语对应起来:
| 直觉理解 | 实现组件 | 学术概念(可选) | 含义 |
|---|---|---|---|
| 大脑 | LLM | 策略(Policy) | agent 决定“下一步做什么”的决策逻辑——面对当前看到的信息,从所有可选行动中挑出最合适的一个 |
| 视野 | 上下文 | 观察空间(Observation Space) | agent 能看到的所有信息——能看到什么、读到什么、记住什么、能访问哪些系统 |
| 手脚 | 工具 | 动作空间(Action Space) | agent 能做的所有事情的集合——有哪些“手段”可用,从发消息到执行代码再到操控界面 |
理解这三者的作用及其相互关系,是构建有效 agent 系统的基础。
ReAct 循环
了解了 agent 的三大组件后,一个自然的问题是:它们如何协同工作?ReAct 循环就是将 LLM、上下文和工具串联起来的核心机制——让我们看看一个 agent 是如何一步步思考和行动的。
agent 执行任务的核心模式叫做 ReAct(Reasoning + Acting)。虽然名字只体现了思考(Reasoning)和行动(Acting)两个词,但实际循环包含三个环节:模型先思考当前应该做什么,然后调用工具行动,再观察工具返回的结果并继续思考下一步。这个“想→做→看→想→做→看”的循环不断重复,直到任务完成。
让我们通过 agent 的轨迹(trajectory)来理解。轨迹是 agent 在执行任务过程中不断积累的消息历史——用户消息、模型回复(包括思考过程和工具调用)、工具执行结果。每一次调用 LLM 时,它接收的完整上下文由静态前缀(系统提示词 + 工具定义)和轨迹(动态消息历史)两部分组成。这揭示了一个关键事实:agent 的上下文 = 静态前缀 + 轨迹。具体地说,静态前缀对应前文五个组件中的前两项(系统提示词 + 工具定义),轨迹对应后三项(用户消息 + 模型回复 + 工具执行结果,随交互不断增长)。基于这个完整上下文,LLM 生成下一步的响应,然后这个响应又追加到轨迹中,供下一次调用使用。
这种设计的精妙之处在于上下文的累积性。每次 LLM 调用都能看到完整的轨迹,这让它能够理解当前处于任务的哪个阶段、之前尝试了什么、得到了什么结果。就像人类解决问题时会不断回顾和总结,agent 通过轨迹保持着对整个任务的全局认知。但累积是单向的:轨迹只增不减,迟早会大到溢出窗口,或在填满之前就让检索精度下降,这就埋下了 压缩 的伏笔。
实际循环的三处偏离
上一节的“想→做→看”是干净的 ReAct 模型,足以建立心智模型,但真实系统的每一轮并不总是这样整齐。实现中有三处常见的偏离,每一处都对应一类工程决策。
图中方框是三大组件,实线是常规的行动与观察循环,两条虚线是偏离:一类观察由外部推入而没有对应的行动,一类行动直接改写上下文自身。
一、观察不只来自行动。 有些观察并非由 agent 的某次工具调用拉取,而是从外部推入循环:用户中途追加消息、外部事件抵达、子 agent 回报结果。它们没有对应的行动,需要一条独立于工具调用的入口。相关设计见事件驱动的异步 Agent。
二、行动与观察不成一一对应。 ReAct 论文假设每次行动恰好对应一次观察,实际并非如此。有的行动只改变外部状态而几乎不返回信息,例如发出一封邮件只得到一个确认;有的行动会持续返回多次观察,例如执行长任务或订阅数据流。
三、有一类行动的作用对象是上下文自身。 待办清单、记忆写入、压缩、按需加载 Skill 都不改变外部世界,而是改写 agent 自己下一轮能看到的内容。也就是说,agent 不只是被动接收上下文,也会主动经营自己的视野:如何写、如何组织、如何在膨胀时削减这份上下文,本身就是一门工程,也就是下一章上下文工程的主题。