跳到主要内容
版本:1.0

Agent 的核心组件

一个实用的 Agent 可以拆成五个组件:大脑(LLM)、规划、工具、记忆、环境。质量短板往往不在"哪个组件不够先进",而在组件之间的接口设计。

┌──────────────┐
目标 ────→ │ LLM 大脑 │ ←──── 记忆(短期上下文 + 长期存储)
│ (推理决策) │
└──────┬───────┘
│ 规划(任务分解 / 自我反思)
↓
┌──────────────┐
│ 工具集 │ ←── 工具描述(模型唯一能"看到"的信息)
└──────┬───────┘
↓
┌──────────────┐
观察 ←──── │ 环境 │
└──────────────┘

大脑:LLM​

LLM 承担三类职责:理解目标与当前状态、决定下一步行动、综合观察产出结果。选型时真正影响 Agent 表现的是:

  • 指令遵循与工具调用可靠性:能否稳定输出合法的函数调用 JSON,选错工具、编造参数的频率;
  • 上下文长度与利用率:多轮循环会持续膨胀上下文;
  • 推理深度:多跳任务中"想清楚再动手"的能力。

一个常见误区是弱模型 + 复杂 Agent 架构。循环推理会指数级放大模型的小错误(选错工具 → 观察污染 → 错上加错)。能力不足时,优先降低架构复杂度或升级模型,而不是加更多角色。

规划​

规划是把目标翻译成行动序列的能力,在 Agent 中有两种形态:

事前规划:行动前先拆解任务(Plan-and-Execute),生成步骤清单再逐步执行。适合路径相对清晰的场景,缺点是计划赶不上变化。

反应式规划:不预先计划,每轮根据最新观察决定下一步(ReAct)。适合环境信息逐步揭示的场景,缺点是可能短视、绕路。

生产系统常做混合:先让 LLM 产出一个粗粒度计划作为引导,执行中允许按观察修订。规划能力也可通过提示词显式激发,让模型先输出计划再输出行动。

工具​

工具是 Agent 的手脚,也是工程上最值得投入的组件。模型对工具的全部认知只来自工具描述,因此工具设计直接决定使用质量:

设计点坏味道好实践
命名handle_datasearch_employee
描述"处理数据""按姓名和部门检索员工信息,返回 JSON"
参数一个 options 字符串塞一切少量强类型字段 + 必填约束
返回抛异常、空字符串结构化结果 + 可行动的错误信息
数量一次挂 50 个工具相关工具分组,按需加载

工具的深度实践(函数调用协议、错误设计、MCP)单独展开,见工具设计与函数调用。

记忆​

LLM 的上下文窗口是工作记忆——容量有限且按 token 计费;跨会话的知识需要长期记忆——外部存储 + 检索。记忆组件解决三个问题:记什么(写入策略)、怎么找(检索策略)、如何淘汰(管理策略)。详见 Agent 记忆系统。

一个容易被忽视的中间层是任务状态:当前子目标、已完成步骤、待办清单。它通常不是靠上下文自然记忆,而是显式维护的结构化数据(如 LangGraph 的 State),循环每轮把它注入提示词,长任务才不会"失忆"或跑偏。

环境​

环境是工具操作的对象世界:文件系统、数据库、Web、内部 API。工程上环境的核心问题是隔离与可观测:

  • 高危操作(发邮件、删数据、付款)放在确认机制或沙箱之后;
  • 每次工具调用记录输入输出,形成完整轨迹(trajectory),这是调试和评测的生命线;
  • 环境尽量可回放,同一轨迹应能重跑复现问题。

组件间的接口​

组件质量达标后,Agent 的差距体现在接口上:

  • 大脑与工具:工具描述、错误信息、返回结构就是模型的"UI",信息表达越清晰,决策越准;
  • 大脑与记忆:写什么进上下文、以什么格式写,决定循环轮数增长后模型是否还能保持专注;
  • 规划与状态:状态字段设计不好,反思和修订就无从谈起。

后续设计原则一文会看到:构建好的 Agent,大部分工作正是打磨这些接口,而不是堆砌组件。