Skip to content

第 5 章(中):Agent 是什么

一个 Agent 不只是一个 LLM 调用

上一节讲了 Tool 怎么与 LLM 交互——工具调用循环、Schema 匹配、框架封装。

但一个 Agent 不只是"LLM + 工具"。

一个真正的 Agent 是一个复杂角色的封装——它组合了:

Agent = Skill(操作手册)+ Tool(工具)+ Rule(约束)+ Code(代码能力)+ Workflow(流程编排)

缺任何一个,Agent 都只是一个"能调工具的聊天机器人",不是一个"能独立完成任务的角色"。

Agent 五部分组成:System Prompt + Tool + Skill + Rule + Model

一个 Agent 的完整构成

每个 Agent 有五个组成部分:

组成部分作用没有它会怎样
System Prompt定义"你是谁、你做什么"Agent 不知道自己该干什么
Tool定义"你能操作什么"Agent 只能说话,不能做事
Skill定义"你怎么做这件事"Agent 每次都要重新摸索
Rule定义"你不能怎么做"Agent 会犯已知的错误
Model定义"用什么脑子"用错模型,杀鸡用牛刀或杀牛用鸡刀

关键不只是"有这些组件",而是每个 Agent 的这五个部分是独立的

Agent A(文案生成)
  ├── System Prompt: "你是一个短视频文案写手,从老板视角出发..."
  ├── Tool: 无(纯文本生成)
  ├── Skill: 商业自媒体规则 / 个人IP规则 / 热点评价规则
  ├── Rule: 不讲技术名词、结尾留钩子、反常识开场
  └── Model: GPT-4o(需要强创造力)

Agent B(口播剪辑)
  ├── System Prompt: "你是一个视频渲染引擎的操作员..."
  ├── Tool: CLI 命令行工具(调用视频产品的渲染能力)
  ├── Skill: 脚本解析规范
  ├── Rule: 断句自然、字幕无错别字
  └── Model: GPT-4o-mini(不需要强创造力,只需要理解结构)

两个 Agent 可能解决同一个大任务的不同环节,但它们的"角色定义"完全不同。

真实案例:用 Agent 做自媒体

我用 Qoder 搭了一条自媒体内容生产流水线——6 个 Agent,每个 Agent 解决一个具体问题:

Agent 1: 情报采集 → 代替你刷手机(爬取、下载、转写)
Agent 2: 内容分析 → 逐篇分析线索(提取观点、评分匹配度)
Agent 3: 选题分析 → 从线索中选选题(按方向分类、生成建议)
Agent 4: 文案生成 → 按 Rule 写脚本(60-75 秒短视频脚本)
Agent 5: 口播剪辑 → 调用 CLI 渲染视频(不调 LLM,调产品工具)
Agent 6: 发布     → 多平台分发(格式适配、定时发布)

注意每个 Agent 的组合方式不同:

AgentSkillToolRule特殊点
情报采集爬虫规范MediaCrawler + yt-dlp + FunASR采集范围约束不调 LLM,纯工具链
内容分析分析方法论文件读写IP 画像匹配规则LLM 做分析,Rule 做过滤
选题分析选题模板文件读写60/30/10 配比规则人拍板选哪个
文案生成三个方向的创作规则不讲技术、留钩子Rule 威力最大的地方
口播剪辑脚本解析规范CLI 命令行工具断句自然不调 LLM,调产品
发布平台规范发布 API排期约束数据反馈回选题

6 个 Agent 流水线,7 条 Rule 全程约束。 上一个 Agent 的输出是下一个 Agent 的输入。

这就是"Agent = Skill + Tool + Rule + Code + Workflow"的实际体现——不是每个 Agent 都需要全部五个部分,但每个 Agent 都是这五个部分的特定组合

真实案例:用 Agent 写书

同样的模式,写书这条流水线用了 4 个 Agent:

Agent 1: 章节内容 → 按三层结构生成书稿(Skill: qoder-content-write)
Agent 2: 配图编排 → 分析章节 → 规划配图 → 生成 → 插入(组合 3 个 Skill)
Agent 3: 网站发布 → 构建 Vitepress → 上传服务器 → 配置 Nginx
Agent 4: PDF 生成 → 格式转换 → 排版 → 输出(规划中)

配图编排 Agent 特别能说明问题——它内部组合了三个 Skill:

Skill用途
generate-illustration概念配图:对比/网格/流程三种模板
product-screenshot产品截图:Playwright 自动截图
insert-illustration配图插入:按先图后文原则插入到正确位置

同时受两条 Rule 约束:

  • 视觉规范:科技暗色风格、人=紫色/AI=青色/流程=琥珀色
  • 先图后文:配图必须出现在文字描述之前

同一个基座,绑上不同的 Skill + Tool + Rule 组合,就变成了不同领域的专业 Agent。

两个案例放在一起看

维度自媒体(6 Agent)写书(4 Agent)
基座同一套 Qoder Agent 基座同一套 Qoder Agent 基座
Harness7 条内容创作 Rule三层结构 + 配图规范 + 术语统一
Agent 数量6 个(采集→分析→选题→文案→剪辑→发布)4 个(内容→配图→发布→PDF)
人的角色决策者,不做执行决策者,不做执行
输出物短视频Web 网站 + PDF

同一基座,不同领域绑上不同的 Harness(Skill + Rule),就变成了该领域的专业流水线。

这就是 Agent 的本质——不是一个 LLM 调用,是一个有边界、有规矩、有能力的角色封装

业界怎么做的

同样的"Agent 是什么"问题,其他框架怎么定义?

LangGraph 把 Agent 定义为"图中的一个节点"——Agent 就是 LangGraph 图里的一个处理节点,它接收消息、调用 LLM、可能调工具、输出结果。Agent 的边界就是图的节点边界。这种定义的好处是 Agent 的行为完全可预测(图的边决定了下一步去哪),坏处是 Agent 不能自主决定"下一步做什么"。

微软 Agent Framework (MAF) 把 Agent 定义为"ChatClientAgent"——一个拥有 ChatClient、Tools、Instructions 的独立实体。Agent 的边界由它的 Tools 和 Instructions 决定——有什么工具就能做什么事,有什么指令就按什么规矩做。多 Agent 通过"Agent 组合"实现——一个 Agent 可以包含其他 Agent。

AgentScope Java 把 Agent 定义为"消息处理器"——Agent 接收消息、处理、输出。Agent 之间通过 Pipeline 组合(串行、并行、条件分支)。这种定义的好处是 Agent 之间完全解耦,坏处是 Agent 的"角色感"较弱——它更像一个函数而不是一个角色。

Hermes 把 Agent 定义为"Skill 集合 + 系统提示词"——Agent 的能力边界由它能访问的 Skill 决定。新增一个 Skill,Agent 就多一个能力。这种定义的好处是 Agent 能力可以动态扩展,坏处是 Agent 的边界不够清晰——Skill 多了之后 Agent 可能“什么都会一点但什么都不精”。

框架Agent 是什么边界由什么决定多 Agent 怎么协作
LangGraph图中的一个节点图的边(条件分支)子图
MAFChatClientAgent 实体Tools + InstructionsAgent 组合
AgentScope消息处理器Pipeline 结构消息管道
HermesSkill 集合 + 提示词可访问的 Skill工具自动发现
我的设计角色封装Prompt + Tool + Skill + Rule + ModelLead-Sub 分层

我的设计最接近 MAF,但多了一层“角色封装”的概念——每个 Agent 不只是一个处理节点,是一个有名字、有边界、有规矩的“角色”。这也是为什么我用 Lead-Sub 分层而不是 Pipeline——角色之间有明确的上下级关系,不是平等的消息传递。

关键认知

Agent 不是"调一次 LLM",是"一个完整角色的封装"。

一个 Agent = System Prompt(你是谁)+ Tool(你能做什么)+ Skill(你怎么做)+ Rule(你不能怎么做)+ Model(用什么脑子)。

这五个部分的不同组合,产生了不同领域的专业 Agent。

但一个 Agent 能做的事是有限的。当任务复杂到需要一个 Agent 做不完时,就需要多个 Agent 协作——一个 Agent 理解意图、拆分任务,分配给其他 Agent 执行。

这就是下一节要讨论的:我的产品里,自定义 Agent 和自定义 Tool 是怎么设计的。