Agent 入门
现代 Agent 的最小工程实现可以用一个简洁的公式来表达:Agent = LLM(大语言模型,Large Language Model)+ 上下文 + 工具。这里的加号表示工程组件的组合,而不是强化学习中的形式化定义;这个公式描述的是 Agent 边界之内的实现,不包含 Agent 与之交互的环境。其中每个词都需要做广义但边界清楚的理解:
- LLM 是 agent 的大脑:它不只是一组模型参数,而是 agent 的整个决策内核——理解意图、思考规划、做出判断。就像人类大脑不只是神经元的集合,还包括通过经验塑造的思维方式,LLM 的能力也来自两部分:预训练所积累的世界知识与语言能力,以及后训练所固化的决策策略。
- 上下文是 agent 的眼睛:它不只是输入给模型的那段文本,而是 agent 在每个决策点收到并保留的信息表示——来自环境的观察、用户记忆、领域知识、自身状态和任务进展。
- 工具是 agent 的手脚:这里的“工具”指 agent 用来感知或改变外部世界的接口,包括工具定义、调用协议和适配器——从预定义的工具调用到动态生成代码,从委托子 agent 协作到主动与用户沟通。
换一种更直观的说法:Agent = 大脑 + 眼睛 + 手脚。大脑负责思考和决策,眼睛接收环境提供的观察,手脚将决策转化为作用于环境的行动。环境包含文件、数据库、网页、用户、其他 agent 以及物理或仿真世界;它与 agent 构成闭环交互的两方,而不是 agent 的组成部分。
对应到强化学习
这三个工程组件可以映射到 RL(Reinforcement Learning,强化学习)的策略与交互接口,但不是严格的一一对应。下面这张表格是可选阅读;没有 RL 背景也不影响后续理解:
| 直觉理解 | 实现组件 | 学术概念(可选) | 含义 |
|---|---|---|---|
| 大脑 | LLM | 策略(Policy) | agent 决定“下一步做什么”的决策逻辑——面对当前看到的信息,从所有可选行动中挑出最合适的一个 |
| 眼睛 | 上下文构造 | 观察与历史 | 将环境返回的观察与已有历史组织成当前决策所需的信息 |
| 手脚 | 工具与适配器 | 观察/行动接口 | 规定 agent 可以读取哪些观察、发出哪些行动,以及接口采用什么格式 |
理解这三者的作用及其相互关系,是构建有效 agent 系统的基础。
ReAct 循环
了解了 agent 的三大组件后,一个自然的问题是:它们如何协同工作?ReAct 循环就是将 LLM、上下文和工具串联起来的核心机制——让我们看看一个 agent 是如何一步步思考和行动的。
agent 执行任务的核心模式叫做 ReAct(Reasoning + Acting)。虽然名字只体现了思考(Reasoning)和行动(Acting)两个词,但实际循环包含三个环节:模型先思考当前应该做什么,然后调用工具行动,再观察工具返回的结果并继续思考下一步。这个“想→做→看→想→做→看”的循环不断重复,直到任务完成。
让我们通过 agent 的轨迹(trajectory)来理解。轨迹是 agent 在执行任务过程中不断积累的消息历史——用户消息、模型回复(包括思考过程和工具调用)、工具执行结果。每一次调用 LLM 时,它接收的完整上下文由静态前缀(系统提示词 + 工具定义)和轨迹(动态消息历史)两部分组成。这揭示了一个关键事实:agent 的上下文 = 静态前缀 + 轨迹。具体地说,静态前缀对应前文五个组件中的前两项(系统提示词 + 工具定义),轨迹对应后三项(用户消息 + 模型回复 + 工具执行结果,随交互不断增长)。基于这个完整上下文,LLM 生成下一步的响应,然后这个响应又追加到轨迹中,供下一次调用使用。
这种设计的精妙之处在于上下文的累积性。每次 LLM 调用都能看到完整的轨迹,这让它能够理解当前处于任务的哪个阶段、之前尝试了什么、得到了什么结果。就像人类解决问题时会不断回顾和总结,agent 通过轨迹保持着对整个任务的全局认知。但累积是单向的:轨迹只增不减,迟早会大到溢出窗口,或在填满之前就让检索精度下降,这就埋下了 压缩 的伏笔。
从最小循环到生产级 Harness
Agent = LLM + 上下文 + 工具 描述最小组成;进入生产环境后,还需要把 LLM 视为核心 Model,把环绕它的上下文构造、工具执行与治理代码统称为 Harness。二者不是两套互相竞争的公式,而是同一系统在不同抽象层次上的描述:
Agent = LLM + [上下文 + 工具 + 约束 + 验证 + 纠正] = Model + Harness
上下文和工具让 agent 能够做事;约束限定它可以做什么,验证判断事情是否真正完成,纠正负责在失败后重试、回退或移交。一个退款 agent 不仅要读到退款政策并调用退款接口,还要校验金额、确认数据库状态,并在接口超时后采取明确的恢复策略。模型相同,Harness 是否完整会直接改变系统可靠性。
Harness 工程把关注点从“怎样写好一次提示词”扩展到“模型在怎样的系统中持续运行”。实践中应从简单方案开始,保持轨迹和验证结果可观察,并从 agent 的理解方式设计工具接口。模型选型也不能只看通用排行榜,而应在真实任务上比较推理、工具调用、速度与多模态能力。
护栏必须跨越上下文、执行与数据三层
单个分类器不足以构成安全边界。原书将护栏按被绕过的难度分为三层:
- 上下文层控制模型能看到什么,处理越狱、提示注入、不相关输入和有害内容;但模型很难仅凭同一份上下文判断自己是否已经被注入。
- 执行层控制模型能做什么,在动作生效前检查权限、风险和参数;高风险、不可逆操作需要独立审查或人工确认,输出回复本身也属于需要检查的动作。
- 数据层控制世界最终能被改成什么样,通过数据库约束、行级权限、受控视图等确定性机制兜底,不依赖模型是否判断正确。
人在回路主要用于两种情况:agent 多次失败后无法可靠推进,或操作敏感、不可逆、财务影响较大。人工干预是分层防御的一部分,不应替代系统自身的权限、验证和恢复机制。