技能系统概述
Skill vs Tool:一个关键的区分
在第 4 章中,我们学会了让 Agent 调用工具——搜索网页、执行代码、读写文件。这些工具就像工匠的锤子、锯子、尺子。但一个优秀的工匠之所以能造出精美的家具,不仅仅是因为他有工具,更因为他有木工技能——知道什么时候用什么工具、按什么顺序操作、遇到问题如何处理。
让我们用一个具体例子来感受这个区别:
# ❌ 只有工具,没有技能 —— Agent 需要被手把手指导
user: "帮我分析一下这个 CSV 文件的销售数据"
agent: "好的,我可以用 read_csv 工具读取文件。"
# 读取后只是把原始数据展示出来
# 不知道要做什么分析
# 不知道怎么处理缺失值
# 不知道用什么图表
# ✅ 有工具 + 有技能 —— Agent 像数据分析师一样工作
user: "帮我分析一下这个 CSV 文件的销售数据"
agent: # 自动执行完整的分析流程:
# 1. 读取 CSV 并检查数据质量
# 2. 处理缺失值和异常值
# 3. 计算关键指标(总销售额、增长率、Top 产品)
# 4. 选择合适的图表(趋势用折线图、占比用饼图)
# 5. 生成结构化的分析报告
技能的三个核心特征
特征一:技能是可复用的
工具调用是"一次性"的——每次你都需要告诉 Agent 该怎么做。而技能是"一次学会、反复使用"的:
# 工具调用:每次都要详细指导
messages = [
{"role": "system", "content": """你要做以下事情:
1. 先用 read_csv 读取文件
2. 检查是否有空值,用中位数填充
3. 计算各列的均值和标准差
4. 用 plot_chart 生成折线图
5. 用 write_report 生成 Markdown 报告
...(详细的 20 行指令)"""},
]
# 技能调用:简单一句话
messages = [
{"role": "system", "content": "你具备数据分析技能。"},
{"role": "user", "content": "分析 sales.csv 的销售趋势"},
]
# Agent 自动执行完整的分析流程
特征二:技能包含领域知识
工具本身是"通用的",不包含业务知识。而技能将领域知识编码进去:
# 工具只知道"怎么做"
def execute_sql(query: str) -> str:
"""执行 SQL 查询"""
return db.execute(query)
# 技能还知道"做什么"和"为什么"
DATA_ANALYSIS_SKILL = """
你是一个专业的数据分析师。在分析数据时:
数据质量检查:
- 缺失值超过 30% 的列应该考虑删除
- 数值型异常值用 IQR 方法检测(1.5倍四分位距)
- 日期列检查连续性
分析方法选择:
- 时间序列数据 → 趋势分析 + 季节性分解
- 分类数据 → 频率分布 + 交叉分析
- 数值数据 → 描述统计 + 相关性分析
可视化最佳实践:
- 趋势 → 折线图
- 比较 → 柱状图
- 占比 → 饼图/环形图
- 分布 → 直方图/箱线图
- 关系 → 散点图
"""
特征三:技能可以被发现和组合
在多 Agent 系统中,每个 Agent 拥有不同的技能。当一个 Agent 接到一个复杂任务时,它可以发现并调用其他 Agent 的技能:
技能的三层架构
我们将技能系统分为三个层次:
第一层:基础工具层
这是第 4 章已经介绍的内容——单个可调用的工具函数。
第二层:技能定义层
将工具、知识和流程封装为可复用的技能单元。有三种主要的封装方式:
| 封装方式 | 原理 | 代表 | 适用场景 |
|---|---|---|---|
| Prompt-based | 用精心设计的系统提示注入领域知识和行为指南 | Anthropic Skills、Claude Code | 知识密集型任务 |
| Code-based | 将技能实现为可执行的代码模块 | Voyager 技能库、Semantic Kernel Plugin | 需要精确控制的任务 |
| Workflow-based | 将技能编排为状态图或工作流 | LangGraph Subgraph、CrewAI Task | 多步骤流程型任务 |
第三层:技能管理层
管理技能的注册、发现、选择和版本控制。这在多 Agent 系统中尤其重要——每个 Agent 需要声明自己有什么技能,其他 Agent 需要能发现和调用这些技能。
技能系统的发展脉络
本节小结
| 概念 | 工具(Tool) | 技能(Skill) |
|---|---|---|
| 粒度 | 单个操作 | 一类问题的完整解决方案 |
| 包含 | 函数 + 参数描述 | 工具 + 知识 + 流程 + 经验 |
| 复用性 | 通用(任何场景都能用) | 领域化(特定类型任务) |
| 类比 | 锤子、锯子 | 木工技能、数据分析技能 |
| 定义方式 | 函数定义 + JSON Schema | Prompt / 代码 / 工作流 |
💡 核心观点:Tool 是 Skill 的组成部分。一个技能通常包含多个工具的组合使用、专业的领域知识、标准化的处理流程,以及从经验中积累的最佳实践。随着 Agent 的应用场景越来越复杂,技能系统正在成为 Agent 架构中不可或缺的一层。
下一节:9.2 技能的定义与封装