AI的"工具"与"技能":一文读懂Tools和Skills的区别
引言
如果你最近关注AI开发领域,可能会频繁听到两个词:Tools(工具)和Skills(技能)。很多人会疑惑:
- 这两个概念有什么区别?
- 为什么现在很多AI项目都在写Skills?
- GitHub上那些开源的"Skills库"到底是做什么的?
- 我应该如何选择合适的方案?
本文将用通俗易懂的方式,带你彻底理解这两个核心概念,并揭示当前AI开发的趋势。
一、先搞清楚:AI本身不会"做事"
在深入Tools和Skills之前,我们需要先理解一个基本事实:
大型语言模型(LLM)本质上是一个"文字预测引擎",它只能生成文本,不能直接执行操作。
1.1 AI的能力边界
✅ AI能做的:
- 分析问题
- 生成文本(代码、文章、建议等)
- 推理和规划
- 调用外部工具
❌ AI不能直接做的:
- 读取你的文件系统
- 访问数据库
- 发送电子邮件
- 执行系统命令
- 调用API接口
那么AI如何实现这些功能呢? 答案就是:Tools(工具)和Skills(技能)。
二、Tools(工具):AI的"手脚"
2.1 什么是Tools?
Tools是AI可以调用的具体函数或API,让AI能够与外部世界交互。
生活类比
想象AI是一个聪明的顾问,但它被困在一个房间里,只能通过窗口传递纸条。
- 没有Tools:顾问只能给你建议,但无法帮你做任何实际的事情
- 有了Tools:你给顾问提供了一些"机械手臂"(工具),它可以通过这些手臂帮你查天气、发邮件、计算数据
2.2 Tools的典型例子
python
# 示例1:天气查询工具
def get_weather(city: str) -> str:
"""查询指定城市的天气"""
# 调用天气API
response = requests.get(f"https://api.weather.com/{city}")
return response.json()["forecast"]
# 示例2:计算器工具
def calculate(expression: str) -> float:
"""计算数学表达式"""
return eval(expression)
# 示例3:文件读取工具
def read_file(file_path: str) -> str:
"""读取文件内容"""
with open(file_path, 'r') as f:
return f.read()
2.3 AI如何使用Tools?
当用户问:"北京今天天气怎么样?"
AI的思考过程:
1. 识别意图:用户想查询天气
2. 选择工具:get_weather工具适合这个任务
3. 生成调用:{"tool": "get_weather", "parameters": {"city": "北京"}}
4. 等待执行结果:系统调用get_weather("北京"),返回"晴,25°C"
5. 组织回答:"北京今天天气晴朗,气温25°C"
2.4 Tools的核心特点
| 特点 | 说明 |
|---|---|
| 原子性 | 每个工具完成一个具体的小任务 |
| 通用性 | 可以在多个场景复用(如计算器可用于各种计算) |
| 技术导向 | 通常对应具体的API或函数 |
| 低层次 | 接近底层实现,需要开发者明确定义输入输出 |
| 数量少 | 一个系统通常只有几个到几十个工具 |
2.5 Tools的局限性
虽然Tools很强大,但存在一些问题:
❌ 问题1:缺乏上下文
用户:"帮我分析这个项目"
AI:需要调用哪些工具?read_file?list_directory?git_log?
调用顺序是什么?如何组合结果?
❌ 问题2:提示词冗长
如果给AI注入100个工具的详细说明,
系统提示词会变得非常长,消耗大量Token
❌ 问题3:使用门槛高
普通用户不知道有哪些工具可用,
也不知道如何正确调用它们
三、Skills(技能):AI的"专业能力"
3.1 什么是Skills?
Skills是对Tools的高级封装和场景化组织,代表AI在某个领域的"专业能力"。
生活类比
继续上面的顾问比喻:
- Tools:像是顾问手中的各种工具(计算器、电话、电脑)
- Skills:像是顾问的专业能力(财务分析、法律咨询、市场调研)
一个"财务分析技能"可能会用到:
- 计算器工具(计算数据)
- 文件读取工具(读取财务报表)
- 图表生成工具(可视化数据)
- 邮件发送工具(发送分析报告)
3.2 Skills的结构
一个典型的Skill包含以下要素:
markdown
# Skill名称:数据分析助手
## 描述
帮助用户进行数据清洗、分析和可视化
## 适用场景
- CSV/Excel数据分析
- 统计指标计算
- 趋势分析和预测
- 数据可视化
## 所需工具
- read_file:读取数据文件
- calculate:计算统计指标
- generate_chart:生成图表
- send_email:发送报告
## 使用流程
1. 读取用户上传的数据文件
2. 自动检测数据类型和格式
3. 执行数据清洗(处理缺失值、异常值)
4. 计算关键统计指标
5. 生成可视化图表
6. 输出分析报告
## 示例
用户:"分析sales_2024.csv的销售趋势"
AI执行:
1. 调用read_file("sales_2024.csv")
2. 识别为销售数据,包含日期、金额、产品列
3. 计算月度销售额、增长率
4. 生成折线图展示趋势
5. 输出:"2024年销售额逐月增长,Q4环比增长15%..."
3.3 Skills的核心特点
| 特点 | 说明 |
|---|---|
| 场景化 | 针对特定业务场景或任务类型 |
| 复合性 | 可能组合多个Tools完成复杂任务 |
| 高层次 | 面向用户需求,而非技术实现 |
| 自包含 | 包含完整的使用说明、示例和最佳实践 |
| 可发现性 | 通过目录树组织,便于AI和用户查找 |
| 数量多 | 可以有成百上千个Skills,覆盖各个领域 |
3.4 Skills vs Tools 对比
| 维度 | Tools(工具) | Skills(技能) |
|---|---|---|
| 抽象层级 | 低层次(技术实现) | 高层次(业务能力) |
| 粒度 | 原子操作(单一功能) | 复合操作(完整流程) |
| 复用性 | 跨场景通用 | 场景专用 |
| 使用者 | 开发者定义,AI调用 | 用户直接使用,AI编排 |
| 数量 | 少(10-50个) | 多(100-1000+个) |
| 示例 | read_file(), send_email() |
"数据分析", "代码审查", "旅行规划" |
| 学习成本 | 需要了解技术细节 | 只需知道场景和目标 |
四、为什么现在大家都在写Skills?
4.1 原因1:降低使用门槛
Tools时代的问题:
用户:"帮我分析销售数据"
AI:我应该调用哪个工具?
- read_file?但用户没说文件路径
- calculate?但需要先知道数据结构
- generate_chart?但还没计算出指标
用户需要不断补充信息,体验很差
Skills时代的解决方案:
用户:"帮我分析销售数据"
AI:检测到"数据分析"场景,激活"数据分析助手"技能
AI主动询问:
"我可以帮您分析数据,请上传CSV或Excel文件,
或者告诉我文件路径。"
用户体验更流畅,AI更主动
4.2 原因2:提升AI的自主决策能力
Tools模式:AI需要从零开始思考每一步
任务:分析项目代码质量
AI的思考(Tools模式):
1. 我需要了解项目结构 → 调用list_directory
2. 我需要读取代码文件 → 调用read_file(但读哪个?)
3. 我需要检查代码规范 → 但没有专门的工具
4. 我需要统计代码行数 → 调用calculate?不对...
问题:AI需要在海量工具中摸索,容易出错
Skills模式:AI直接调用专业技能
任务:分析项目代码质量
AI的思考(Skills模式):
1. 识别任务类型:代码质量分析
2. 查找相关技能:发现"代码审查专家"技能
3. 激活技能:该技能内部已定义好流程
- 扫描项目结构
- 读取关键文件
- 检查代码规范
- 生成报告
4. 执行技能流程
优势:AI不需要重新发明轮子
4.3 原因3:Token效率优化
问题背景:
- LLM的上下文窗口有限(如8K、32K、128K tokens)
- 每个工具的详细说明都会占用Token
- 如果有100个工具,全部注入会消耗大量Token
Tools方案的Token消耗:
系统提示词包含100个工具的详细说明:
- 工具名称、描述、参数schema、示例
- 总计约5000-10000 tokens
每次对话都要携带这些信息,成本高
Skills方案的优化:
系统提示词只包含Skills目录(摘要):
- 技能名称、Emoji、简短描述
- 总计约500-1000 tokens
只有当AI决定使用某个Skill时,才加载该Skill的完整说明
按需加载,节省90%以上的Token
4.4 原因4:知识沉淀和共享
Tools难以共享的原因:
- 工具通常是代码级别的实现
- 不同项目的工具实现差异大
- 缺乏标准化的描述格式
Skills易于共享的优势:
markdown
# Skill标准格式(SKILL.md)
name: 代码审查专家
version: 1.0
description: 全面审查代码质量、安全性和最佳实践
categories: [开发, 代码质量]
usage_example:
"Review my Python code for best practices and potential bugs"
tools_required:
- read_file
- grep_search
- lint_checker
workflow:
1. 读取目标代码文件
2. 检查代码规范和命名
3. 识别潜在bug和安全漏洞
4. 提供改进建议
5. 生成审查报告
这种标准化格式使得:
- ✅ 可以轻松打包和分享
- ✅ 用户可以浏览技能市场
- ✅ 团队可以建立内部技能库
- ✅ 社区可以贡献开源Skills
五、开源的"Skills库"到底是什么?
5.1 什么是Skills库?
Skills库是一系列预定义的、可复用的AI能力包,类似于:
- npm包管理器之于JavaScript
- pip包管理器之于Python
- Maven仓库之于Java
但Skills库存储的不是代码,而是AI的能力描述和使用指南。
5.2 典型的Skills库内容
以GitHub上的开源Skills库为例:
awesome-skills/
├── development/ # 开发类技能
│ ├── code-reviewer/ # 代码审查专家
│ │ ├── SKILL.md # 技能描述
│ │ ├── examples/ # 使用示例
│ │ └── templates/ # 输出模板
│ ├── bug-finder/ # Bug查找器
│ ├── refactoring-assistant/ # 重构助手
│ └── test-generator/ # 测试生成器
│
├── writing/ # 写作类技能
│ ├── blog-writer/ # 博客写手
│ ├── email-assistant/ # 邮件助手
│ └── technical-writer/ # 技术文档 writer
│
├── data-analysis/ # 数据分析类
│ ├── csv-analyzer/ # CSV分析器
│ ├── sql-helper/ # SQL助手
│ └── visualization-expert/ # 可视化专家
│
├── business/ # 商业类
│ ├── market-researcher/ # 市场调研员
│ ├── competitor-analyzer/ # 竞品分析
│ └── pitch-deck-builder/ # 路演PPT制作
│
└── learning/ # 学习类
├── language-tutor/ # 语言导师
├── concept-explainer/ # 概念解释器
└── quiz-generator/ # 测验生成器
5.3 具体案例:code-reviewer技能
让我们看一个真实的Skills示例:
markdown
# SKILL.md - Code Reviewer
## 基本信息
- **名称**: 代码审查专家 📋
- **版本**: 2.1.0
- **分类**: 开发 / 代码质量
- **适用语言**: Python, JavaScript, Java, Go
## 描述
全面审查代码的质量、安全性、性能和可维护性,
提供具体的改进建议和最佳实践指导。
## 何时使用
- 提交代码前进行自查
- Code Review时作为辅助
- 学习他人代码的最佳实践
- 重构前的代码评估
## 工作流程
1. **静态分析**:检查代码规范、命名约定、注释质量
2. **安全扫描**:识别SQL注入、XSS、硬编码密钥等漏洞
3. **性能评估**:发现N+1查询、内存泄漏、低效算法
4. **可维护性**:评估圈复杂度、耦合度、重复代码
5. **生成报告**:按优先级列出问题和改进建议
## 所需工具
- `read_file`: 读取源代码文件
- `grep_search`: 搜索特定模式
- `lint_tool`: 运行linter检查
- `security_scanner`: 安全漏洞扫描
## 输出格式
## 代码审查报告
### 🔴 严重问题(必须修复)
1. [安全] 第45行:SQL拼接未使用参数化查询
建议:使用PreparedStatement
### 🟡 警告(建议修复)
2. [性能] 第78行:循环内执行数据库查询
建议:批量查询后在内存中处理
### 🟢 建议(可选优化)
3. [可读性] 变量名`data`不够语义化
建议:改为`userOrderList`
使用示例
用户:"审查src/user_service.py的代码质量"
AI:激活"代码审查专家"技能,执行5步审查流程...
### 5.4 如何使用开源Skills?
#### 方式1:直接导入到你的AI系统
```python
# 伪代码示例
from skill_manager import SkillManager
# 初始化技能管理器
manager = SkillManager()
# 从GitHub导入skills
manager.import_from_github("awesome-skills/development/code-reviewer")
manager.import_from_github("awesome-skills/writing/blog-writer")
# AI对话时自动加载相关skills
response = ai.chat(
user_message="审查这段代码",
available_skills=manager.list_active_skills()
)
方式2:手动参考和学习
即使你不使用AI框架,也可以:
- 阅读Skills的设计思路
- 学习工作流程的最佳实践
- 借鉴输出模板和示例
- 应用到自己的工作中
方式3:贡献自己的Skills
bash
# 创建一个新skill
mkdir my-skill
cd my-skill
touch SKILL.md
touch examples.md
# 编写skill描述
# 提交到GitHub
git push origin main
5.5 两种不同的Skills设计理念
在实际项目中,你会遇到两种不同的Skills设计哲学:
理念A:显式声明Tools(OpenSkills、LangChain等)
markdown
# SKILL.md - 代码审查专家
name: code-reviewer
description: 全面审查代码质量
tools_required: # 明确列出所需工具
- read_file
- grep_search
- lint_tool
- security_scanner
workflow:
1. 读取目标代码文件
2. 检查代码规范
3. 扫描安全漏洞
4. 生成审查报告
特点:
- ✅ 清晰明确,便于静态分析
- ✅ 框架可以预先验证工具可用性
- ❌ 修改workflow需同步更新tools列表
- ❌ Token消耗较大(每个skill都要列出所有tools)
理念B:隐式推断Tools(轻量级框架采用)
许多现代AI框架采用更简洁的设计,不在SKILL.md中显式声明Tools:
yaml
# 示例:通用代码审查技能
---
name: code-review
description: Review code quality and best practices for multiple languages
version: 1.0
emoji: 🔍
categories: [development, quality, code-analysis]
# ⚠️ 注意:没有 tools_required 字段!
# requires 只声明外部依赖(系统命令),不是AI Tools
requires:
bins: [git] # 需要git这个系统命令
# 使用示例
usage_example: "Review the code quality of src/main.py"
# JSON Schema 参数定义
parameters_schema:
type: object
required: [file_path]
properties:
file_path:
type: string
description: Path to the file or directory to review
depth:
type: integer
default: 3
---
# Code Review Skill
This skill performs comprehensive code quality analysis...
关键区别:
| 对比项 | 显式声明(理念A) | 隐式推断(理念B) |
|---|---|---|
| tools_required字段 | ✅ 必须列出 | ❌ 不存在此字段 |
| requires字段含义 | 通常指AI Tools | 仅指外部依赖(bins/env) |
| Tools调用方式 | 预先声明,框架验证 | AI自主推断,动态选择 |
| Token效率 | 较低(50 skills × 5 tools × 50 tokens = 12,500 tokens) | 较高(节省60%+,约5,000 tokens) |
| 维护成本 | 高(修改workflow需同步更新tools) | 低(只需修改描述) |
| 灵活性 | 低(固定tools列表) | 高(AI根据环境自适应) |
| 代表项目 | LangChain Skills、AutoGen | 轻量级Agent框架、自定义实现 |
为什么选择隐式推断?
-
Token优化
如果每个Skill都列出tools: - 50个Skills × 平均5个tools × 每个tool 50 tokens = 12,500 tokens 只列出Skill摘要(不含tools): - 50个Skills × 平均100 tokens = 5,000 tokens 节省60%的Token! -
灵活性优势
同一个Skill在不同环境下可能使用不同的Tools: # 环境A(有数据库): - 数据分析Skill → 使用 query_database tool # 环境B(只有CSV文件): - 数据分析Skill → 使用 read_file + parse_csv tools 如果显式声明tools,就需要维护多个版本 隐式方式让AI根据可用工具自适应 -
简化维护
- 修改workflow时无需同步更新tools列表
- 减少人为遗漏的风险
- SKILL.md更简洁易读
工作流程对比:
#mermaid-svg-WNwQH3NB2iuVNZ5R{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WNwQH3NB2iuVNZ5R .error-icon{fill:#552222;}#mermaid-svg-WNwQH3NB2iuVNZ5R .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WNwQH3NB2iuVNZ5R .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .marker.cross{stroke:#333333;}#mermaid-svg-WNwQH3NB2iuVNZ5R svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WNwQH3NB2iuVNZ5R p{margin:0;}#mermaid-svg-WNwQH3NB2iuVNZ5R .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster-label text{fill:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster-label span{color:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster-label span p{background-color:transparent;}#mermaid-svg-WNwQH3NB2iuVNZ5R .label text,#mermaid-svg-WNwQH3NB2iuVNZ5R span{fill:#333;color:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .node rect,#mermaid-svg-WNwQH3NB2iuVNZ5R .node circle,#mermaid-svg-WNwQH3NB2iuVNZ5R .node ellipse,#mermaid-svg-WNwQH3NB2iuVNZ5R .node polygon,#mermaid-svg-WNwQH3NB2iuVNZ5R .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .rough-node .label text,#mermaid-svg-WNwQH3NB2iuVNZ5R .node .label text,#mermaid-svg-WNwQH3NB2iuVNZ5R .image-shape .label,#mermaid-svg-WNwQH3NB2iuVNZ5R .icon-shape .label{text-anchor:middle;}#mermaid-svg-WNwQH3NB2iuVNZ5R .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .rough-node .label,#mermaid-svg-WNwQH3NB2iuVNZ5R .node .label,#mermaid-svg-WNwQH3NB2iuVNZ5R .image-shape .label,#mermaid-svg-WNwQH3NB2iuVNZ5R .icon-shape .label{text-align:center;}#mermaid-svg-WNwQH3NB2iuVNZ5R .node.clickable{cursor:pointer;}#mermaid-svg-WNwQH3NB2iuVNZ5R .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .arrowheadPath{fill:#333333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WNwQH3NB2iuVNZ5R .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WNwQH3NB2iuVNZ5R .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WNwQH3NB2iuVNZ5R .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster text{fill:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R .cluster span{color:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WNwQH3NB2iuVNZ5R .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WNwQH3NB2iuVNZ5R rect.text{fill:none;stroke-width:0;}#mermaid-svg-WNwQH3NB2iuVNZ5R .icon-shape,#mermaid-svg-WNwQH3NB2iuVNZ5R .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WNwQH3NB2iuVNZ5R .icon-shape p,#mermaid-svg-WNwQH3NB2iuVNZ5R .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WNwQH3NB2iuVNZ5R .icon-shape .label rect,#mermaid-svg-WNwQH3NB2iuVNZ5R .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WNwQH3NB2iuVNZ5R .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WNwQH3NB2iuVNZ5R .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WNwQH3NB2iuVNZ5R :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 显式声明
隐式推断
用户请求
哪种设计理念?
框架查找Skill的tools_required
AI阅读Skill描述
验证tools可用性
AI自主推断需要的tools
执行Skill
返回结果
实际案例:代码审查技能的执行过程
当用户说"帮我审查UserService.java的代码质量"时:
markdown
Step 1: AI匹配Skill
→ 扫描可用Skills目录
→ 发现 "🔍 code-review (development/code)"
→ 描述匹配:"Review code quality..."
Step 2: AI加载完整Skill文档
→ 读取 code-review/SKILL.md
→ 了解参数要求:file_path(必需)、depth
→ 了解输出格式:结构化报告
→ 检查外部依赖:requires.bins = [git]
Step 3: AI自主决定使用哪些Tools(隐式推断)
AI思考过程:
1. "我需要读取UserService.java"
→ 自动选择 read_file tool
2. "我想看看最近的修改历史"
→ 检查是否有git可用(requires.bins中有git)
→ 自动选择 git_log tool
3. "我需要运行静态分析"
→ 自动选择 lint_check tool
Step 4: 执行并返回结果
→ 生成结构化的代码审查报告
如何在隐式设计中引导AI选择正确的Tools?
虽然不显式声明,但可以通过以下方式引导AI:
markdown
# 方法1:在description中暗示
description: >
分析数据文件并生成可视化报告。
该技能会读取文件、清洗数据、计算统计指标,
最后生成图表。(这些动词暗示了需要的tools)
# 方法2:在workflow中明确步骤
workflow:
1. 读取目标文件 ← AI知道需要read_file
2. 解析数据结构 ← AI知道需要parse_csv
3. 计算统计指标 ← AI知道需要calculate
4. 生成可视化图表 ← AI知道需要generate_chart
# 方法3:添加开发者注释(非标准,仅供人类阅读)
<!--
开发者笔记:这个技能通常会用到以下tools
- read_file: 读取源文件
- calculate: 计算统计数据
- generate_chart: 生成可视化
但具体使用哪个tool由AI根据上下文决定
-->
5.6 知名的开源Skills项目
| 项目名称 | 特点 | Stars |
|---|---|---|
| OpenSkills | 通用技能库,覆盖10+领域 | 5k+ |
| DevSkills | 专注开发场景(代码审查、测试生成等) | 3k+ |
| BusinessSkills | 商业分析和决策支持技能 | 2k+ |
| LearningSkills | 教育和学习辅助技能 | 1.5k+ |
| CreativeSkills | 创意写作和设计技能 | 1k+ |
注:以上为示例项目,实际名称可能不同
5.7 如何选择适合自己的设计理念?
选择显式声明(理念A)如果:
- ✅ 你的项目需要严格的工具验证和权限控制
- ✅ 团队规模大,需要清晰的接口契约
- ✅ Token成本不是主要考虑因素
- ✅ 你希望框架能预先检查依赖
选择隐式推断(理念B - CoPaw)如果:
- ✅ 你追求简洁和灵活性
- ✅ Token效率是重要考量
- ✅ 你信任AI的理解和决策能力
- ✅ 你想降低维护成本
混合方案(推荐):
yaml
# 在SKILL.md中添加可选的hints字段
---
name: data-analyzer
description: 分析数据并生成报告
# 标准字段
requires:
bins: [python]
# 可选:给人类的提示(不注入到AI提示词)
hints:
suggested_tools: # 仅供参考,AI可以自由选择
- read_file
- parse_csv
- calculate
- generate_chart
reasoning: |
AI会根据文件类型自动选择合适的解析器:
- .csv → parse_csv tool
- .xlsx → parse_excel tool
- .json → parse_json tool
---
这样既保持了灵活性,又为开发者提供了参考。
六、Tools和Skills的关系:不是替代,而是协作
6.1 分层架构
┌─────────────────────────────────────┐
│ 用户层(User Layer) │
│ "帮我分析这个项目的代码质量" │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Skills层(技能层) │
│ "代码审查专家"技能被激活 │
│ - 理解用户意图 │
│ - 规划执行流程 │
│ - 协调多个工具 │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Tools层(工具层) │
│ - read_file() 读取代码文件 │
│ - lint_tool() 执行静态分析 │
│ - security_scanner() 扫描漏洞 │
│ - generate_report() 生成报告 │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Infrastructure层(基础设施) │
│ - 文件系统 │
│ - API接口 │
│ - 数据库 │
└─────────────────────────────────────┘
6.2 协作流程示例
用户请求:"分析sales_data.csv的销售趋势"
Step 1: AI识别场景
→ 匹配到"数据分析助手"技能
Step 2: 激活技能
→ 加载"数据分析助手"的完整说明
→ 了解工作流程和所需工具
Step 3: 技能执行(内部调用Tools)
├─ 调用 read_file("sales_data.csv")
├─ 调用 detect_format() 识别数据结构
├─ 调用 clean_data() 处理缺失值
├─ 调用 calculate_metrics() 计算指标
├─ 调用 generate_chart() 生成图表
└─ 调用 format_report() 格式化输出
Step 4: 返回结果
→ "2024年销售额呈现稳步增长趋势,
Q4环比增长15%,主要驱动因素是..."
6.3 关键洞察
| 观点 | 说明 |
|---|---|
| Tools是基础 | 没有Tools,Skills无法执行实际操作 |
| Skills是抽象 | Skills让AI更容易理解和使用Tools |
| 1:N关系 | 一个Skill可能调用多个Tools |
| 动态加载 | Skills按需加载,避免Token浪费 |
| 生态价值 | Skills可以共享、组合、进化 |
七、如何选择:我该用Tools还是Skills?
7.1 对于AI应用开发者
使用Tools的场景:
- ✅ 你需要暴露底层API给AI
- ✅ 工具具有高度通用性(如文件读写、HTTP请求)
- ✅ 你希望保持最大的灵活性
使用Skills的场景:
- ✅ 你有明确的业务场景(如代码审查、数据分析)
- ✅ 你想降低用户使用门槛
- ✅ 你希望建立可复用的能力库
- ✅ 你需要优化Token使用效率
推荐做法 :两者结合
底层:提供10-20个通用Tools
上层:封装50-100个场景化Skills
7.2 对于普通用户
你不需要关心底层是Tools还是Skills
你只需要:
- 明确你的需求:"我想做什么?"
- 寻找合适的Skill:浏览技能目录
- 描述你的任务:用自然语言表达
- 审查AI的输出:验证结果是否符合预期
7.3 对于想要贡献Skills的人
什么情况下应该创建新Skill?
✅ 应该创建:
- 你发现某个任务经常重复
- 现有Skills无法满足你的需求
- 你有一套成熟的工作流程想分享
- 你能提供清晰的使用示例
❌ 不应该创建:
- 只是对现有Skill的重命名
- 过于狭窄的场景(只有你自己用)
- 缺乏清晰的边界和职责
创建Skill的步骤:
markdown
1. 定义Skill名称和描述
2. 明确适用场景和不适用场景
3. 设计工作流程(步骤1、2、3...)
4. 列出所需的Tools
5. 编写使用示例
6. 定义输出格式
7. 测试和优化
8. 发布到技能库
八、未来趋势:Skills生态的演进
8.1 短期趋势(1年内)
-
Skills标准化
- 统一的SKILL.md格式
- 标准化的元数据(版本、依赖、兼容性)
- 技能评分和评级体系
-
Skills市场兴起
- 付费Skills交易平台
- 企业级Skills订阅服务
- 技能认证和授权机制
-
自动化Skills生成
- AI根据文档自动生成Skills
- 从历史对话中学习并创建Skills
- Skills的自我优化和迭代
8.2 中期趋势(1-3年)
-
Skills组合与编排
- 多个Skills协同完成复杂任务
- 可视化的Skills工作流编辑器
- Skills之间的依赖管理
-
个性化Skills
- 基于用户习惯定制Skills
- 企业内部的专属Skills库
- 领域专用的垂直Skills
-
Skills即服务(SaaS)
- 云端Skills执行引擎
- 按需调用的Skills API
- Skills使用量计费
8.3 长期愿景(3-5年)
-
Skills生态系统
- 百万级的Skills库
- 自动化的Skills发现和推荐
- 全球开发者共同维护
-
AI自主学习和进化
- AI自动发现新的Skills需求
- 自我测试和验证Skills
- 持续优化Skills性能
-
人机协作新范式
- 人类定义目标和约束
- AI选择和组合Skills
- 共同完成复杂任务
九、实战建议:如何开始使用Skills?
9.1 第一步:了解现有Skills
行动清单:
- 浏览GitHub上的开源Skills库
- 阅读热门Skills的SKILL.md文件
- 理解Skills的组织结构和命名规范
- 找出与你工作相关的Skills
推荐资源:
- GitHub搜索:"awesome skills"、"ai skills"
- 各大AI框架的官方Skills文档
- 社区论坛的Skills分享帖
9.2 第二步:在你的项目中引入Skills
如果你是开发者:
python
# 示例:使用LangChain的Skills功能
from langchain.agents import AgentExecutor
from langchain.skills import SkillRegistry
# 注册skills
registry = SkillRegistry()
registry.load_from_directory("./my-skills/")
# 创建agent
agent = AgentExecutor(
llm=llm,
skills=registry.get_active_skills(),
verbose=True
)
# 使用
result = agent.run("帮我分析这个项目")
如果你是普通用户:
- 选择支持Skills的AI平台(如CoPaw、Cursor等)
- 导入感兴趣的Skills
- 在对话中尝试使用
- 根据效果调整和优化
9.3 第三步:创建你的第一个Skill
示例:创建"会议纪要整理"Skill
markdown
# SKILL.md
name: 会议纪要整理师 📝
version: 1.0.0
description: 将杂乱的会议记录整理成结构化的会议纪要
categories: [办公, 效率]
## 适用场景
- 整理录音转文字的会议记录
- 提炼会议要点和决策
- 分配任务和责任人
## 工作流程
1. 接收原始会议记录(文本或转录稿)
2. 识别参会人员、时间、地点
3. 提取讨论主题和关键观点
4. 梳理决策事项和行动项
5. 生成结构化纪要
## 输出格式
# 会议纪要
**会议主题**: [主题]
**时间**: [日期时间]
**参会人**: [名单]
## 讨论要点
1. ...
2. ...
## 决策事项
- [ ] ...
## 行动项
| 任务 | 责任人 | 截止时间 |
|------|--------|----------|
| ... | ... | ... |
## 使用示例
用户:"整理今天的周会记录"
[粘贴会议记录文本]
AI:执行5步流程,生成结构化纪要
9.4 第四步:持续优化和分享
- 收集反馈:记录Skills使用的成功率和问题
- 迭代改进:根据反馈优化工作流程
- 分享经验:将成熟的Skills发布到社区
- 学习他人:借鉴优秀Skills的设计思路
十、常见疑问解答
Q1: Skills会不会取代程序员?
答 :不会。Skills是程序员的效率工具,而不是替代品。
- Skills需要开发者设计和维护
- 复杂的业务逻辑仍需人工实现
- Skills处理的是标准化场景,创新工作仍需人类
类比:Excel没有取代会计师,而是让会计师更高效。
Q2: 我需要学习编程才能使用Skills吗?
答:取决于你的角色。
- 普通用户:不需要编程,直接用自然语言调用Skills
- Skill创作者:需要基本的Markdown写作能力
- Skill开发者:需要编程能力来实现底层Tools
Q3: Skills和Prompt Engineering有什么区别?
答:两者互补,不是对立。
| Prompt Engineering | Skills |
|---|---|
| 优化单次对话的提示词 | 封装可复用的能力 |
| 临时性、一次性 | 持久化、可共享 |
| 需要人工精心设计 | 可以自动化加载 |
| 适用于简单任务 | 适用于复杂工作流 |
最佳实践:在Skills内部使用优秀的Prompt Engineering技巧。
Q4: 开源Skills安全吗?
答:需要谨慎评估。
风险点:
- ⚠️ 恶意Skill可能调用危险Tools(如删除文件)
- ⚠️ Skill可能泄露敏感数据
- ⚠️ 依赖的Tools可能有安全漏洞
防护措施:
- ✅ 只使用信誉良好的Skills库
- ✅ 审查SKILL.md中的工作流程
- ✅ 在沙箱环境中测试新Skills
- ✅ 限制Skills可访问的资源
Q5: 企业可以建立内部Skills库吗?
答:完全可以,而且强烈推荐!
优势:
- 沉淀企业知识和最佳实践
- 统一工作流程和质量标准
- 新员工快速上手
- 保护商业机密(不依赖外部服务)
实施建议:
- 成立Skills治理委员会
- 制定Skills开发和审核规范
- 建立内部Skills市场
- 定期培训和分享
十一、总结:核心理念回顾
11.1 三个关键点
-
Tools是AI的手脚,Skills是AI的专业能力
- Tools:底层、原子、技术性
- Skills:高层、复合、场景化
-
Skills解决了Tools的三个痛点
- 降低使用门槛
- 提升AI自主决策能力
- 优化Token效率
-
Skills生态正在快速发展
- 开源Skills库涌现
- 标准化格式形成
- 商业化模式探索
11.2 行动建议
对于所有人:
- ✅ 了解Skills的概念和价值
- ✅ 尝试使用现有的Skills
- ✅ 关注Skills生态的发展
对于开发者:
- ✅ 在你的AI应用中集成Skills
- ✅ 创建和分享有价值的Skills
- ✅ 参与开源Skills社区
对于企业:
- ✅ 评估Skills对业务的价值
- ✅ 建立内部Skills库
- ✅ 培养团队的Skills思维
11.3 最后的思考
AI的未来不在于更强的模型,而在于更好的能力组织方式。
Tools让AI能够"做事",Skills让AI能够"专业地做事"。
随着Skills生态的成熟,我们将看到:
- 更智能的AI助手
- 更高效的人机协作
- 更丰富的应用场景
记住:无论你是AI的使用者、开发者还是贡献者,理解和掌握Skills都将让你在这个AI时代占据先机。
附录:快速参考
A. 术语对照表
| 英文 | 中文 | 说明 |
|---|---|---|
| Tool | 工具 | AI可调用的具体函数或API |
| Skill | 技能 | 场景化的AI专业能力 |
| Skill Registry | 技能注册表 | 管理和加载Skills的系统 |
| SKILL.md | 技能描述文件 | 定义Skill的标准格式 |
| Workflow | 工作流程 | Skill的执行步骤 |
B. 常用Skills分类
🛠️ 开发类
- 代码审查、Bug查找、测试生成、重构助手
📊 数据类
- 数据分析、SQL助手、可视化专家、报表生成
✍️ 写作类
- 博客写作、邮件助手、技术文档、文案创作
💼 商业类
- 市场调研、竞品分析、商业计划、路演PPT
🎓 学习类
- 概念解释、语言导师、测验生成、学习计划
🏠 生活类
-
旅行规划、健身计划、菜谱推荐、购物建议
C. 学习资源
- 官方文档:各AI框架的Skills章节
- 开源项目:GitHub搜索"ai skills"、"agent skills"
- 社区论坛:Reddit r/LocalLLaMA、Discord AI社区
- 在线课程:Coursera、Udemy的AI Agent课程
- 技术博客:Medium、Dev.to的AI专栏
作者注:本文旨在普及AI基础知识,帮助读者理解Tools和Skills的核心概念。AI技术发展迅速,具体实现可能因框架和平台而异,建议结合实际使用的工具查阅最新文档。