Agent Basic / 03

一个 Agent 系统的核心组成

很多 Agent 教程的问题在于,它们喜欢直接上框架代码,但不先把系统拆开。

结果就是你能跑出一个 Demo,却说不清楚:

  • 哪部分负责决策
  • 哪部分负责保存状态
  • 哪部分负责调用工具
  • 哪部分负责限制系统乱跑

如果这些边界不清楚,后面系统一复杂,就很难维护。

不要先从框架开始,要先从模块开始

一个最小但像样的 Agent 系统,通常可以拆成下面这些部分:

  1. Goal:目标
  2. State:状态
  3. Model:模型
  4. Tools:工具
  5. Memory:记忆
  6. Planner / Policy:决策逻辑
  7. Evaluator / Guardrails:评估与约束

不是每个系统都必须把这些拆成独立模块,但你脑子里必须有这张图。

1. Goal:系统到底在完成什么

目标定义的是:

  • 任务要解决什么问题
  • 输出应该长什么样
  • 任务什么时候算完成

如果目标本身不清晰,Agent 往往会表现成:

  • 做很多无关动作
  • 无限探索
  • 输出看起来努力,但没有完成任务

所以很多 Agent 问题,根本不是模型问题,而是目标定义问题。

2. State:系统当前处于什么状态

State 是 Agent 系统最容易被忽略、但最关键的部分之一。

它可以包含:

  • 当前任务输入
  • 已完成的步骤
  • 已获取的信息
  • 中间分析结果
  • 下一步待办
  • 是否满足结束条件

如果没有明确状态,系统每次执行都像重新开始。
这会直接导致:

  • 上下文混乱
  • 重复调用工具
  • 无法恢复执行
  • 很难调试

所以很多现代 Agent 框架强调状态驱动,不是为了“高级”,而是为了可维护。

3. Model:负责理解、推理和生成

模型本身通常负责下面几类工作:

  • 理解任务
  • 解释上下文
  • 决定下一步动作
  • 生成结构化结果
  • 生成最终输出

但要注意:

模型不是整个 Agent,模型只是 Agent 中的一个核心组件。

如果把所有能力都堆给模型提示词,系统会变得很脆弱。

4. Tools:让 Agent 获得外部能力

没有工具的 Agent,能力边界通常非常窄。

工具可以包括:

  • 搜索
  • 数据库查询
  • API 请求
  • 文件读写
  • 代码执行
  • 外部系统操作

工具解决的是“模型本身做不到”的事情。

例如模型不能直接知道今天实时市场价格,但它可以决定去调用价格查询工具。

5. Memory:让系统不总是失忆

记忆至少可以分成两种:

会话内记忆

用于当前任务过程中的状态延续,例如:

  • 已经查过哪些数据
  • 前面做过哪些判断
  • 当前分析到了哪一步

跨会话记忆

用于长期偏好、历史记录或用户画像,例如:

  • 用户关注哪些风险指标
  • 过去的分析习惯
  • 历史结论和反馈

不是每个场景都需要长期记忆,但大多数 Agent 至少需要会话内状态记忆。

6. Planner / Policy:决定接下来做什么

这是 Agent 和普通 Workflow 差别最大的地方之一。

这里要解决的问题不是“模型会不会说”,而是:

  • 下一步是否需要工具
  • 用哪个工具
  • 是否需要继续收集信息
  • 什么时候该停止

在简单系统里,这部分可能只是一个 Prompt。
在复杂系统里,它可能会变成一套显式的状态机、策略函数或图结构。

7. Evaluator / Guardrails:防止系统看起来在工作,实际上在失控

这部分经常被 Demo 忽略,但真实系统离不开。

它们通常负责:

  • 检查输出格式是否正确
  • 检查证据是否充足
  • 检查结果是否越权
  • 控制成本、延迟和工具调用次数
  • 在必要时触发人工接管

如果没有这些约束,Agent 很容易出现两种常见问题:

  • 一本正经地产生错误结论
  • 为了完成任务不断尝试,直到把成本和时间拉爆

把这些模块串起来看

你可以把一个典型 Agent 系统理解成下面这个流程:

Goal
  -> State 初始化
  -> Planner 判断下一步
  -> Model 生成动作或参数
  -> Tools 执行外部动作
  -> State 更新
  -> Evaluator / Guardrails 检查
  -> 继续循环或结束

这个图本身不复杂,但它决定了你后面写出来的是“系统”,还是“很多 prompt 和 if-else 拼在一起的脚本”。

一个务实建议

在你真正开始做 Agent 之前,先别急着选框架。
先拿一张纸把下面这些问题写清楚:

  1. 目标是什么
  2. 状态里放什么
  3. 哪些能力必须通过工具获得
  4. 哪些决策交给模型,哪些决策交给程序
  5. 什么时候结束,什么时候失败,什么时候人工介入

如果这些问题答不清楚,再高级的框架也救不了设计问题。

小结

Agent 不是一个“会自己动起来的模型”,而是一套模块协作的系统。

先把模块边界想清楚,后面不管你用 LangGraph、Agents SDK 还是自己写执行循环,都会稳很多。

下一篇建议接着看: