AI Agent 中的 Skill:从 Tool 调用到任务能力封装

1. 前言

最近在学习和开发 AI Agent 的过程中,我发现一个很容易和 Tool、MCP、System Prompt 混淆的概念:Skill

很多 Agent 系统都会同时出现 Tool、Skill、MCP、Workflow 等概念。刚开始接触时,很容易把 Skill 理解成"另一个 Tool",或者认为 Skill 只是 System Prompt 的一个别名。

但实际上,它们解决的问题并不相同。

一个简单的理解是:

Tool 解决"Agent 能做什么",Skill 解决"Agent 如何完成一类任务"。

例如,一个 Agent 需要回答"帮我分析最近 AI Agent 的技术发展":

  • Web Search Tool:负责搜索网页

  • Fetch Tool:负责获取网页内容

  • Knowledge Base Tool:负责检索本地知识

  • Skill:负责规定什么时候搜索、怎么搜索、如何整理结果、是否需要引用、如何生成最终回答

因此,Skill 并不是一个孤立的工具,而更像是一个可复用的任务能力模块

本文将从 Tool、Prompt、MCP、Skill 四个概念开始,逐步介绍 Skill 的作用,以及如何在一个个人知识库 Agent 中设计 Skill。


2. Skill 到底是什么?

先给出一个定义:

Skill 是对某一类任务所需的知识、规则、流程和工具调用方式进行封装后形成的可复用能力模块。

这里有几个关键词:

  • 任务类型

  • 规则

  • 流程

  • 工具

  • 可复用

例如,我们可以设计一个:

复制代码
WebSearch Skill

它并不一定自己去访问互联网,而是告诉 Agent:

复制代码
什么时候应该搜索?
搜索什么?
如何选择关键词?
需要调用几个搜索工具?
如何处理搜索结果?
最终答案是否需要引用?

底层真正完成搜索工作的,还是:

复制代码
WebSearch Tool

因此可以把它简单抽象成:

复制代码
Skill
   ↓
任务规则 + 执行流程 + Tool 使用规范
   ↓
Tool
   ↓
实际执行动作

3. 为什么有了 Tool,还需要 Skill?

这是理解 Skill 最关键的问题。

假设我们给 Agent 提供三个工具:

复制代码
search_web()
search_knowledge_base()
read_document()

从能力上看,Agent 已经什么都能做了。

但用户提出:

"帮我看看最近 AI Agent 中 MCP 的发展情况,并结合我自己的知识库分析一下。"

Agent 现在面临的问题不是"没有工具",而是:

应该怎么组合工具完成任务?

例如它可能选择:

复制代码
search_knowledge_base()
    ↓
发现知识库没有最新信息
    ↓
search_web()
    ↓
read_document()
    ↓
整理答案

也可能直接:

复制代码
search_web()
    ↓
整理答案

甚至可能:

复制代码
search_knowledge_base()
    ↓
search_knowledge_base()
    ↓
search_knowledge_base()

不断重复调用。

这说明:

Tool 只是提供能力,并不能天然决定复杂任务的执行策略。

这就是 Skill 的价值。


4. Tool、Skill、Agent 三者的关系

可以用一个简单的分层方式理解。

复制代码
                Agent
                  │
          决定当前任务是什么
                  │
                  ▼
                Skill
        任务规则 + 执行策略
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
      Tool      Tool      Tool
        │         │         │
        ▼         ▼         ▼
     搜索网页   查询数据库   读取文件

例如:

复制代码
用户:
"总结一下我知识库中的 Go 并发相关内容"

Agent 判断:

复制代码
这是"知识库总结任务"

于是加载:

复制代码
KnowledgeSummary Skill

Skill 再规定:

复制代码
1. 优先检索知识库
2. 获取相关文档
3. 对多个文档进行归纳
4. 避免凭空补充知识库中没有的内容
5. 输出总结并附带引用

然后调用:

复制代码
KnowledgeBaseSearch Tool
DocumentRead Tool

所以:

Agent 负责决策,Skill 负责方法,Tool 负责执行。


5. Skill 和 System Prompt 有什么区别?

很多人第一次接触 Skill 时都会产生一个问题:

"这些规则直接放到 System Prompt 不就行了吗?"

从功能上来说,当然可以。

例如直接把所有规则写进 System Prompt:

复制代码
你是一个个人知识库 Agent。

如果用户询问个人知识:
优先查询知识库。

如果用户询问实时信息:
优先使用联网搜索。

如果需要阅读完整文档:
调用文档读取工具。

回答知识库问题时必须提供引用。

......

随着 Agent 能力增加,System Prompt 很容易越来越长:

复制代码
System Prompt
├── 知识库检索规则
├── 网页搜索规则
├── 文档总结规则
├── 数据分析规则
├── SQL 规则
├── 报告生成规则
├── MCP Tool 使用规则
├── 错误处理规则
└── ...

最终会出现两个问题。

5.1 Prompt 越来越庞大

所有能力都塞进去,导致上下文越来越长。

5.2 所有能力都被同时加载

用户只是让 Agent 总结一份文档,却把联网搜索、SQL 分析、代码生成等大量规则全部带进去。

Skill 的一个重要思想就是:

将能力拆分,在需要时加载。

例如:

复制代码
System Prompt
    ↓
识别用户任务
    ↓
选择 Skill
    ↓
加载对应规则
    ↓
执行任务

这样就从:

复制代码
一个超大的 Prompt

变成:

复制代码
基础 Prompt
+
按需加载的 Skill

6. Skill 和 MCP 有什么区别?

Skill 和 MCP 经常一起出现,因此很容易混淆。

实际上,两者处于不同层次。

MCP 更关注"怎么接入工具"

MCP 可以理解成一种标准化的工具接入方式。

例如 Agent 想使用:

复制代码
GitHub
数据库
搜索引擎
文件系统
第三方 API

可以通过 MCP Server 对外提供 Tool。

结构可以理解成:

复制代码
Agent
  │
MCP Client
  │
MCP Server
  │
Tool
  │
真实服务

MCP 解决的是:

Agent 怎么发现和调用外部能力。


Skill 更关注"怎么完成任务"

Skill 解决的是:

当我要完成某一类任务时,应该采用什么策略。

因此:

复制代码
MCP = 能力接入机制
Tool = 原子执行能力
Skill = 任务执行方法
Agent = 决策与编排

它们不是互斥关系,反而可以一起使用。

例如:

复制代码
Web Search Skill
       │
       ▼
   MCP Client
       │
       ▼
 Web Search MCP
       │
       ▼
Search Tool

这里 Skill 负责"搜索策略",MCP 负责"工具接入"。


7. 一个实际例子:个人知识库 Agent

假设我们正在开发一个个人知识库 Agent。

它拥有两个核心工具:

复制代码
KnowledgeBaseSearch
WebSearch

用户输入:

"什么是 RAG?另外帮我看看 2026 年 RAG 有哪些新的应用方向。"

这其实包含了两个不同性质的问题:

复制代码
什么是 RAG?
    ↓
本地知识问题

2026 年有哪些新的应用方向?
    ↓
实时信息问题

如果没有 Skill,模型可能:

复制代码
先调用知识库
   ↓
发现没有最新资料
   ↓
再调用 Web Search

甚至可能反复尝试知识库。


7.1 可以定义两个 Skill

Knowledge Q&A Skill

复制代码
适用于:
用户询问个人知识库中的内容。

执行规则:
1. 优先检索知识库
2. 根据查询内容生成检索关键词
3. 获取相关文档片段
4. 基于检索结果回答
5. 输出引用
6. 不编造知识库不存在的内容

Web Research Skill

复制代码
适用于:
涉及实时信息、新闻、最新资料的问题。

执行规则:
1. 判断问题是否需要实时信息
2. 构造搜索关键词
3. 调用 Web Search
4. 筛选相关结果
5. 必要时读取原文
6. 整理多个来源
7. 生成带引用的回答

这样 Agent 就不需要"每次从零思考应该怎么做"。


8. Skill 可以不仅仅包含 Prompt

这是理解 Skill 时另一个非常重要的点。

如果把 Skill 理解成:

"一段额外的 Prompt"

实际上还是太简单。

一个完整 Skill 可以包含:

复制代码
Skill
├── Description
├── Instruction
├── Workflow
├── Tool Selection
├── Constraints
├── Output Format
└── Examples

例如:

复制代码
name: web_research

description: >
  用于需要实时信息的研究型任务

instructions:
  - 判断用户问题是否涉及实时信息
  - 优先使用搜索工具
  - 对多个来源进行交叉验证
  - 输出关键结论和来源

tools:
  - web_search
  - page_reader

constraints:
  - 不得把搜索不到的信息当作事实
  - 最终答案必须说明来源

所以 Skill 更准确地说是:

任务能力的结构化封装。


9. Skill 的核心价值:能力模块化

当 Agent 越来越复杂时,最重要的问题之一就是:

如何避免所有能力都堆在一个 Agent 里面?

例如一个大型 Agent 可能拥有:

复制代码
知识库问答
网页搜索
文档总结
SQL 查询
代码分析
报告生成
数据分析
邮件处理

如果全部依赖一个超大的 Prompt,维护会越来越困难。

可以拆成:

复制代码
skills/
├── knowledge_qa/
├── web_research/
├── document_summary/
├── sql_analysis/
├── code_analysis/
└── report_generation/

每个目录对应一种能力。

这样带来的一个明显好处就是:

Skill 可以独立开发、测试、迭代。

例如修改:

复制代码
Web Research Skill

不会影响:

复制代码
Document Summary Skill

10. Skill 与 Workflow 的区别

另一个容易混淆的概念是 Workflow。

可以简单理解:

复制代码
Skill
= "怎么完成一类任务"

Workflow
= "这个任务具体按照什么步骤执行"

例如:

复制代码
报告生成 Skill

告诉 Agent:

复制代码
生成报告需要:
收集资料
分析资料
组织结构
生成正文
检查事实

而 Workflow 则可能明确规定:

复制代码
Step 1:搜索资料
Step 2:读取网页
Step 3:抽取事实
Step 4:生成大纲
Step 5:生成正文
Step 6:执行校验

因此:

复制代码
Skill
    ↓
定义能力和策略

Workflow
    ↓
定义具体执行流程

Skill 可以包含 Workflow,但二者并不是完全等价的。


11. Skill 如何参与 Agent 决策?

一个比较典型的实现方式是:

复制代码
User Query
    ↓
Task Classification
    ↓
Skill Selection
    ↓
Skill Loading
    ↓
Tool Selection
    ↓
Execution
    ↓
Result Processing
    ↓
Final Answer

例如:

复制代码
用户:
"总结我上传的这份 Redis 文档"

Agent 判断:

复制代码
Task = Document Summary

选择:

复制代码
DocumentSummary Skill

然后 Skill 告诉 Agent:

复制代码
1. 读取完整文档
2. 提取章节结构
3. 总结核心概念
4. 保留关键技术细节
5. 输出分层结构

然后调用:

复制代码
DocumentRead Tool

最终生成:

复制代码
总结结果

12. Skill 如何解决工具路由问题?

在实际开发 Agent 的时候,一个很常见的问题就是:

Agent 明明知道有 Web Search,却经常先调用知识库工具。

例如:

复制代码
用户:
"今天有哪些 AI Agent 新闻?"

Agent 可能:

复制代码
KnowledgeBaseSearch
    ↓
没有结果
    ↓
WebSearch

这虽然最终可能得到正确答案,但存在两个问题:

  1. 多调用了一次工具

  2. 增加了延迟和 Token 消耗

更严重的是,如果知识库工具执行成本比较高,问题会更加明显。

这时候可以通过 Skill 明确路由策略。

例如:

复制代码
Realtime Research Skill

适用条件:
- 新闻
- 今日
- 最近
- 最新
- 当前价格
- 当前政策
- 实时数据

规则:
遇到以上类型问题时,优先使用 Web Search。
不要先尝试 Knowledge Base Search。

于是:

复制代码
用户问题
    ↓
是否属于实时研究?
    ↓
是
    ↓
Realtime Research Skill
    ↓
Web Search

这样可以把"工具选择逻辑"从一个模糊的模型决策变成更加明确的任务策略。


13. Skill 是否一定要由 LLM 选择?

不一定。

这是实际系统设计时非常重要的一点。

可以采用:

复制代码
LLM Router

让模型判断:

复制代码
Knowledge QA
Web Research
Document Summary
Code Analysis

也可以采用:

复制代码
Rule Router

例如:

复制代码
包含"今天""最新""最近"
    → WebResearch Skill

包含"我的知识库""我上传的文档"
    → Knowledge Skill

还可以使用:

复制代码
Rule + LLM Hybrid

例如:

复制代码
第一层:
规则判断明显场景

第二层:
复杂问题交给 LLM 分类

第三层:
进入对应 Skill

对于生产系统来说,这种方式通常更容易控制成本和稳定性。


14. Skill 的另一个价值:约束 Agent

Skill 不只是让 Agent "知道怎么做",还可以用于限制 Agent "不能怎么做"。

例如:

复制代码
SQL Analysis Skill

可以规定:

复制代码
只允许 SELECT
禁止 UPDATE
禁止 DELETE
禁止 DROP
单次查询最多返回 1000 行
超过限制必须分页

再比如:

复制代码
Knowledge Base Skill

可以规定:

复制代码
没有检索结果:
不能直接编造答案

有检索结果:
优先依据检索内容回答

需要引用:
必须保留来源信息

因此 Skill 其实还承担了一部分:

任务级安全约束和行为规范


15. Skill 的一个简单数据结构

如果自己设计 Skill 系统,可以从非常简单的结构开始。

例如:

复制代码
type Skill struct {
    Name        string
    Description string
    Instructions string
    Tools       []string
}

例如:

复制代码
webSearchSkill := Skill{
    Name:        "web_research",
    Description: "处理需要实时信息的研究任务",
    Instructions: `
        1. 判断问题是否需要实时信息
        2. 优先使用 Web Search
        3. 必要时读取网页原文
        4. 综合多个来源
        5. 输出引用
    `,
    Tools: []string{
        "web_search",
        "page_reader",
    },
}

Agent 运行时:

复制代码
skill := skillManager.Get("web_research")

prompt := basePrompt + skill.Instructions

再让 Agent 使用:

复制代码
skill.Tools

对应的工具即可。

当然,真正复杂的系统还会加入:

复制代码
Version
Metadata
Dependencies
Permissions
Examples
Workflow
OutputSchema

但对于一个 MVP 来说,没有必要一开始就设计得特别复杂。


16. 一个更完整的 Skill 架构

如果进一步扩展,可以设计成:

复制代码
                    Agent
                      │
                Skill Router
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
     Knowledge      Research    Summary
       Skill         Skill       Skill
          │           │           │
          └───────────┼───────────┘
                      ▼
                 Tool Manager
                      │
       ┌──────────────┼──────────────┐
       ▼              ▼              ▼
   KB Search       Web Search     File Read
       │              │              │
       └──────────────┼──────────────┘
                      ▼
                    Tools

如果工具来自外部系统:

复制代码
Skill
  ↓
Tool Manager
  ↓
MCP Client
  ↓
MCP Server
  ↓
External Tool

这样 Skill 和 MCP 就可以自然结合起来。


17. Skill 的设计原则

在实际开发中,我认为有几个原则比较重要。

17.1 一个 Skill 聚焦一种任务

不要设计一个:

复制代码
万能 Skill

同时负责:

复制代码
搜索
总结
代码分析
SQL
知识库问答

应该拆成多个能力模块。


17.2 Skill 描述"方法",Tool 描述"动作"

例如:

复制代码
Tool:
search_web(query)

而 Skill 描述:

复制代码
什么时候搜索
怎么构造 query
搜索几个来源
怎么筛选结果
什么时候停止搜索
如何引用

这样职责更清晰。


17.3 Skill 不应该过度依赖某一个 Agent

一个好的 Skill 应该尽可能做到:

复制代码
Agent A 可以使用
Agent B 也可以使用

这也是 Skill 能够复用的原因。


17.4 Skill 中的规则应该尽可能明确

例如:

复制代码
"适当地使用知识库"

这种规则比较模糊。

更好的写法是:

复制代码
涉及用户个人文档时,优先调用知识库检索工具。

涉及最新信息时,禁止优先调用知识库,
直接进入 Web Research 流程。

规则越明确,Agent 的行为越容易稳定。


18. Skill 并不是越多越好

当 Skill 越来越多时,也会产生新的问题。

例如:

复制代码
30 个 Skill

Agent 需要从里面判断到底加载哪些。

如果 Skill 描述非常相似:

复制代码
Knowledge Query
Knowledge QA
Knowledge Search
Knowledge Research

模型反而更容易选错。

因此 Skill 系统同样需要考虑:

复制代码
能力边界
名称设计
描述清晰度
优先级
依赖关系
冲突处理

本质上,这其实已经进入:

Agent 能力管理和路由设计


19. 在我的个人知识库 Agent 中如何设计 Skill?

如果是一个类似个人知识库 Agent 的系统,我会优先拆成下面几个 Skill:

复制代码
skills/
├── knowledge_qa
├── web_research
├── document_summary
├── knowledge_compare
└── report_generation

Knowledge QA

负责:

复制代码
个人知识查询
知识库检索
引用
多轮上下文

Web Research

负责:

复制代码
实时信息
联网搜索
网页阅读
多来源整合

Document Summary

负责:

复制代码
长文档总结
章节归纳
重点提取
结构化输出

Knowledge Compare

负责:

复制代码
多个知识来源对比
差异分析
优缺点整理

Report Generation

负责:

复制代码
资料收集
结构规划
内容生成
引用整理
最终报告

这样整个 Agent 就从:

复制代码
一个什么都能做的大模型

逐渐变成:

复制代码
基础 Agent
+
多个可组合 Skill
+
统一 Tool 层

20. 最终理解:Skill 到底是什么?

学到这里,可以把几个概念放在一起:

复制代码
Prompt
    ↓
告诉模型"应该怎么表现"

Tool
    ↓
提供一个具体动作

MCP
    ↓
标准化 Tool 的发现和调用

Skill
    ↓
封装一类任务的知识、规则和执行策略

Workflow
    ↓
定义任务具体按照哪些步骤执行

Agent
    ↓
根据用户任务进行决策、规划和执行

用一个生活中的例子来类比:

复制代码
Tool = 一把锤子

Skill = 木工技能

Workflow = 做一张桌子的具体步骤

MCP = 标准化工具接口

Agent = 木匠

木匠不是因为"拥有锤子"就会做桌子。

真正决定他能不能完成任务的,是:

复制代码
知道什么时候用锤子
知道什么时候用电钻
知道先做哪一步
知道什么时候检查
知道最终应该达到什么结果

这部分能力,就非常接近 Skill 的概念。


21. 总结

Skill 的核心并不是"多了一层 Prompt",而是:

把 Agent 完成某一类任务所需要的知识、规则、工具和执行策略封装成一个独立、可复用的能力模块。

因此可以记住下面这句话:

复制代码
Tool 负责"做什么"
Skill 负责"怎么做"
MCP 负责"怎么接入 Tool"
Workflow 负责"按什么步骤做"
Agent 负责"什么时候做、做什么"

对于简单 Agent,Skill 甚至可以只是:

复制代码
Instructions + Tools

但随着系统复杂度提升,它最终可以演化成:

复制代码
Skill
├── Instruction
├── Tool
├── Workflow
├── Constraint
├── Output Schema
└── Examples

这也是为什么在复杂 Agent 系统中,Skill 更适合作为能力模块化和任务路由的抽象层,而不是简单地把它理解成一个 Tool。

对于正在构建个人知识库 Agent、RAG Agent 或 MCP Agent 的开发者来说,一个值得实践的方向就是:

复制代码
Agent
  ↓
Skill Router
  ↓
Skill
  ↓
Tool / MCP
  ↓
Execution

当 Agent 从"能调用工具"进一步发展到"知道如何稳定地完成任务"时,Skill 就开始体现它真正的价值。

相关推荐
LuminousCPP1 小时前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端
日拱一卒的小田2 小时前
ZYNQ学习笔记4-ZYNQ的SD卡控制器2
笔记·学习
江湖人称菠萝包2 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter8-绘图
笔记·qt·qt5
xieliyu.2 小时前
JVM 垃圾回收机制详解:从标记过程、回收算法到垃圾收集器
java·jvm·笔记·java-ee
xieliyu.2 小时前
前端基础:常见CSS选择器用法
前端·css·笔记·vscode
周玉奎先生2 小时前
河南少商新材料CGM灌浆料:扎根河南工程现场的水泥基灌浆材料
经验分享·笔记·零售
动词ing2 小时前
【学习笔记】动态规划+背包问题
笔记·学习
智者知已应修善业12 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程