从 LLM 到 Agent
大语言模型本质上是"函数":输入文本,输出文本。它不会主动做事——不会上网搜索、不会读写文件、不会执行代码。人们发现,只要给 LLM 配上工具、记忆和规划能力,它就能像人类一样完成复杂任务。
这就是 AI Agent(智能体)。
2023 年以来,AutoGPT、LangChain Agent、Claude Code、Cursor Agent 等项目将 Agent 从学术概念推向工程实践。当下最先进的 AI 编程工具,本质都是 Agent 架构的产物。
什么是 Agent
一个完整的 Agent 系统包含四个核心模块:
|
|
用一句话概括:Agent = LLM + 规划 + 记忆 + 工具。
Agent 核心范式
范式(Paradigm)决定了 Agent 的"思考方式"。不同范式在推理深度、执行效率、可靠性上有不同权衡。
ReAct(Reason + Act)
最经典的 Agent 范式,由 Google DeepMind 在 2022 年提出。核心循环:
|
|
每一步:
- Thought(思考):分析当前状态,决定下一步做什么
- Action(行动):调用工具执行操作
- Observation(观察):获取工具返回结果,进入下一轮思考
以"查询北京天气并给我穿衣建议"为例:
|
|
ReAct 的优势是推理过程可解释、可追踪。缺点是每一步都需 LLM 推理,复杂任务 token 消耗大、延迟高。
Plan-Act(规划-执行)
先制定完整计划,再逐步执行。适合步骤明确、不需要动态调整的任务。
|
|
比如"为我创建一个博客项目":
|
|
优点是一次性规划降低 LLM 调用次数。缺点是如果中间步骤结果与预期不符,计划可能需要动态调整。
Plan-Execute-Replan(规划-执行-重规划)
对 Plan-Act 的改进——每执行一步后评估是否需要调整剩余计划。
|
|
适合"结果不确定"的任务。比如代码生成中某个 API 调用失败,需要换方案继续。
Reason-Observe-Act(推理-观察-行动)
更细粒度的循环,强调推理和观察的分离。典型代表是 Anthropic 的 Claude Agent 模式:
|
|
多 Agent 协作范式
复杂任务由多个专门 Agent 分工协作:
|
|
这是 AutoGen、CrewAI 等项目采用的多 Agent 架构。优势是各 Agent 独立 prompt、独立工具集,协作效率高;挑战是通信开销、一致性问题。
范式对比
| 范式 | 特点 | 适用场景 |
|---|---|---|
| ReAct | 思考-行动循环,灵活可解释 | 需要动态决策的任务 |
| Plan-Act | 先规划再执行 | 步骤明确的任务 |
| Plan-Execute-Replan | 执行中动态调整计划 | 结果不确定的任务 |
| 多 Agent | 多个专业 Agent 协作 | 跨领域的复杂任务 |
Agent 记忆系统
记忆是 Agent 区别于单次 LLM 调用的关键。没有记忆,Agent 每次对话都是"新手"。
三层记忆架构
|
|
工作记忆(Working Memory)
最直接的一层,就是 LLM 的上下文窗口:
- 当前用户输入
- 本轮的 thought/action/observation 历史
- 从长期记忆中检索出的相关信息
工作记忆受限于 LLM 上下文窗口大小。超出窗口后,需做压缩或淘汰。
短期记忆(Short-term Memory)
当前会话中已完成的操作序列,采用滑动窗口管理:
|
|
超出窗口的旧任务记录可归档到长期记忆或直接丢弃。
长期记忆(Long-term Memory)
跨会话持久化存储,通常用向量数据库 + RAG 实现:
|
|
长期记忆的内容类型:
| 类型 | 内容 | 示例 |
|---|---|---|
| 用户偏好 | 用户的使用习惯和配置 | “用户是 Go 开发者,习惯 Linux 风格” |
| 项目知识 | 项目结构、框架约定 | “项目的鉴权中间件在 auth/ 下” |
| 经验教训 | 过去的错误和改进 | “上次修改这个接口导致测试失败” |
| 操作记录 | 历史操作摘要 | “上个月完成了数据库迁移” |
记忆管理的挑战
- 压缩:如何将冗长的操作历史压缩成精简摘要
- 遗忘:什么该记住,什么该丢弃
- 更新:用户偏好变化时如何更新旧记忆
- 检索精度:在大量记忆中准确找到相关条目
Agent 规划模块
规划模块赋予 Agent"分解问题"和"自我纠错"的能力。
任务分解
将复杂目标拆解为可执行的子任务。常用策略:
链式分解(Chain Decomposition):
|
|
树状分解(Tree Decomposition):
|
|
反思与自修正
Agent 在产生结果后,对自己的输出进行检查和修正:
|
|
Reflexion 论文(Shinn et al., 2023)提出:Agent 可以将失败经验总结为长期记忆,下次遇到类似任务时自动规避。
思维链增强
规划模块可利用 LLM 的 Chain-of-Thought 能力:
- Zero-shot CoT:在 prompt 中加入"Let’s think step by step"
- Few-shot CoT:在 prompt 中提供推理示例
- Tree-of-Thoughts:同时探索多条推理路径,选择最优
执行评估
每一步执行后评估结果:
|
|
Agent 工具系统
工具是 Agent 的"手",让它能与外部世界交互。
工具定义
每个工具需要清晰描述其功能、参数和返回值。当前主流方式是通过 function calling 机制:
|
|
LLM 根据工具描述判断何时调用哪个工具、传递什么参数。
工具分类
| 类别 | 工具举例 | 用途 |
|---|---|---|
| 文件系统 | read/write/edit/glob/grep | 读写代码、搜索文件 |
| 网络 | web_search/web_fetch | 获取实时信息 |
| Shell | bash/exec | 执行命令、运行测试 |
| 数据库 | query/execute | 读写数据库 |
| 外部API | github/jira/slack | 与外部平台交互 |
| 浏览器 | click/type/screenshot | Web 自动化测试 |
工具调用流程
|
|
关键设计点:
- 错误处理:工具执行失败时,将错误信息返回 LLM,由 LLM 决定重试或换方案
- 超时控制:防止工具长时间阻塞
- 权限管控:危险操作(如 rm -rf)需用户确认
- 并行调用:无依赖的工具调用应并发执行,减少等待时间
工具编排模式
单步调用:一次 LLM 推理 → 一个工具调用 → 结果返回
链式调用:
|
|
并行调用(Claude Code 的签名能力之一):
|
|
条件调用:
|
|
Agent 的实际架构:以 Claude Code 为例
Claude Code 是当前最成熟的编程 Agent 之一,它的架构体现了上述所有概念:
|
|
工具系统一目了然:Read、Edit、Bash、Grep、Write、Glob 等,覆盖文件操作、命令执行、代码搜索。并行调用时,Claude 可同时读取多个文件、执行多个不相关操作,大幅减少等待时间。
记忆方面:
- 工作记忆:当前对话上下文
- 短期记忆:压缩后的历史对话摘要
- 长期记忆:文件系统持久化的 memory 目录(用户偏好、项目约定、操作反馈)
小结
Agent 是 LLM 从"聊天工具"进化为"数字劳动者"的关键一步:
- 范式决定 Agent 如何思考:ReAct 灵活可解释,Plan-Act 高效直接,多 Agent 协作适合复杂场景
- 记忆让 Agent 跨越单次对话:三层记忆架构处理不同时效的信息
- 规划赋予 Agent 处理复杂任务的能力:任务分解 + 反思纠错
- 工具是 Agent 与世界的接口:定义清晰、错误容忍、权限可控、并行高效
理解这四个模块,就能系统性地设计和改进 Agent 系统,而不仅仅是"给 LLM 加一些工具然后祈祷它能跑通"。