Agent 和「工作流」差在哪、它的循环怎么转、为什么还要再派 Subagent 出去。讲清这两个词的官方定义、配置长什么样,以及什么时候该用
Agent 指的是「由大模型自己动态决定流程和工具使用」的系统,与之相对的是路径被代码写死的工作流。它靠一个循环干活:看目标 → 决定下一步 → 调用工具 → 看结果 → 再决定,直到完成。Subagent(子代理)是 Agent 派出去的专用助手,有自己独立的上下文窗口、系统提示词和工具权限,干完只把结论带回主对话——用来处理那些会把主对话淹没的脏活,比如翻一遍代码库、跑一轮测试、读一堆日志。
用 agent 工具的时候,这两个词绕不开:
1.2 已经讲过 Agent 工具和聊天框的区别。这一篇往里再走一层,把两件事讲清楚:
这两个概念搞清楚,你看任何一个 agent 工具的文档都不会再晕。
Anthropic 在官方工程文章里给了一组对照定义,是目前业界引用最多的一版:
工作流(workflow):大模型和工具通过预先写好的代码路径被编排起来的系统。 Agent:大模型自己动态决定流程和工具使用、自主掌控如何完成任务的系统。
差别就在谁决定下一步:
| 工作流 | Agent | |
|---|---|---|
| 步骤 | 事先定死:第一步做 A,第二步做 B | 每一步现场决定 |
| 遇到意外 | 走不下去,报错 | 换个办法再试 |
| 适合 | 步骤明确、每次都一样的事 | 事先说不清要几步的事 |
| 可预测性 | 高 | 较低,但灵活 |
官方也说明了什么时候该用 agent:当你难以预测需要多少步、也没法写死一条固定路径的时候。 反过来,如果流程每次都一样,用工作流更稳、更便宜。
所以「AI 自动化」和「Agent」不是一回事。定时把表格转成 PDF,那是工作流;「把这个文件夹整理干净」——要几步、遇到什么情况事先不知道——那才需要 agent。

Agent 干活的过程,拆开看就是一个不断重复的循环:
举个例子,你说「这个页面在手机上排版乱了,修一下」:
这个循环就是 agent 的全部秘密。 它之所以看起来「聪明」,是因为每一轮它都能看到上一轮的真实结果,而不是凭空往下猜。

注意代价:循环转一圈就是一次模型请求,工具返回的内容还会不断堆进上下文。这就是下一步要解决的问题。
循环转久了会遇到一个必然的问题:上下文被塞满了。
它读了 20 个文件、跑了 3 轮测试、翻了一堆日志——这些内容你根本不需要看,但它们全都占着上下文额度,还会稀释真正重要的信息(2.2 讲的 context rot)。
Subagent 就是为这件事设计的。Claude Code 官方文档的定义:
Subagent 是处理特定类型任务的专用 AI 助手,拥有自己独立的上下文窗口、自定义系统提示词、指定的工具权限和独立的权限设置。当一个附带任务会用搜索结果、日志、文件内容淹没你的主对话,而这些东西你之后根本不会再看的时候,就该用它:subagent 在自己的上下文里干完,只把结论带回来。
关键就在最后半句:只把结论带回来。

| 主 agent | Subagent | |
|---|---|---|
| 上下文 | 你的整个会话 | 独立的一份,干完就丢 |
| 看得到历史吗 | 是 | 看不到,只收到一段任务说明 |
| 工具权限 | 全部 | 可以限制,比如只读 |
| 用的模型 | 你选的 | 可以单独指定(脏活用便宜的) |
| 返回什么 | — | 只有摘要 |
官方列的几条理由,翻译成人话:
| 理由 | 实际意义 |
|---|---|
| 保住上下文 | 探索、翻找、试错这些过程留在 subagent 那边,主对话保持干净 |
| 隔离啰嗦的输出 | 跑测试、翻日志、抓文档动辄几千行,这些不进你的主上下文 |
| 限制权限 | 比如「代码审查」只给读权限,它就不可能改坏东西 |
| 控制成本 | 简单的重活可以指定用便宜的小模型跑 |
| 可复用 | 同一套配置在不同项目里共用,行为一致 |
一个直观的对比:让 AI「在这个项目里找出所有用到某个旧接口的地方」。
你要的本来就只有那一句结论。

以 Claude Code 为例,一个 subagent 就是一个 Markdown 文件,放在 .claude/agents/(项目级)或 ~/.claude/agents/(个人级):
---
name: code-reviewer
description: 审查代码质量与最佳实践。写完或改完代码之后使用。
tools: Read, Glob, Grep
model: sonnet
---
你是代码审查专家。对发现的每个问题,说明问题是什么、
贴出当前代码、给出改进后的版本。不要修改任何文件。
字段的含义:
| 字段 | 作用 |
|---|---|
name | 名字,小写字母加连字符 |
description | 什么时候该派它出去——主 agent 靠这句判断 |
tools | 允许它用哪些工具,不写就继承全部 |
model | 指定模型,可以用更便宜的档 |
怎么触发? 两种方式:主 agent 根据 description 自动判断并派发;或者你直接点名「用 code-reviewer 这个 agent 看一下改动」。
和 Skill 一样,
description是最关键的一行:写清「做什么 + 什么时候用」,它才会在该出场的时候出场。
适合交给 subagent 的:
不适合的:
一个提醒:subagent 拿不到你主对话里的上下文,它只收到一段任务说明。所以任务说明要写全,别指望它知道你们前面聊过什么。

Agent 是会自己决定下一步的 AI,Subagent 是它派出去干脏活、只带结论回来的帮手。 两个词背后是同一个动机:保护上下文。这也是第 4 段的主线(4.2 如何管理上下文)。
Agent 指的是「模型自己决定流程并调用工具」这套机制;Agent 工具是把这套机制做成的产品,比如 Claude Code、Codex。日常交流里混着说没问题,但看文档时区分一下会更清楚。
会。它是独立的模型调用,有自己的 token 消耗。但通常反而更省——因为它把大量中间内容挡在了主对话之外,主对话不用一直背着这些内容重复发送。给它指定便宜的模型可以进一步降成本。
指多个 agent 分工协作完成一个大任务,比如一个负责调研、一个负责写作、一个负责校验。Subagent 是实现它最常见的方式。对新手来说不用急着上手,先把单个 agent 用顺再说。
了解概念就够了。当你的任务需要读很多材料、而你只想要一份结论时,知道有这么个东西可以用就行。默认情况下工具也会在合适的时候自动派发,不需要你手工配置。