Skill 与 Agent:AI 开发中两个最容易混淆的概念
入门 AI 开发时,很多人会被这两个词搞懵:Skill 和 Agent 到底有什么区别?都是 Python 文件,都能调用工具,为什么要分开?本文用最直白的方式,彻底讲清楚这两个概念。
一、先从一个比喻开始
想象你开了一家餐厅:
- Agent = 餐厅的大厨:他会思考、决策,根据客人的需求决定做什么菜、用什么食材、什么顺序出菜。他是有主动意识的执行者。
- Skill = 大厨手边的菜谱和工具:炒锅、菜谱、调味料……这些本身不会思考,但大厨需要它们才能完成任务。
用户需求
↓
[Agent 大脑] → 思考 → 决定用哪个 Skill
↓
[Skill 工具] → 执行 → 返回结果
↓
[Agent 大脑] → 整合结果 → 回答用户
二、Skill 是什么?
Skill(技能/插件) 是一个具有明确功能边界的可调用模块。它本身不会主动做任何事,只在被调用时执行特定任务。
Skill 的三个核心特征
1. 功能单一 每个 Skill 只做一件事:查天气、搜索网页、发消息、签到……职责越单一越好。
2. 被动执行 Skill 不会主动触发,必须被 Agent 或用户显式调用。
3. 有描述文件
在 OpenClaw 等平台中,Skill 通常有一个 SKILL.md 说明文件,告诉 AI 系统这个技能是干什么的、怎么用。
skill/
SKILL.md ← 给 AI 看的说明书(自然语言描述)
scripts/
get_weather.py ← 实际执行逻辑
SKILL.md 长什么样?
---
name: weather
description: 查询天气预报,支持全球城市
---
## 使用方法
curl "wttr.in/{城市名}?format=3"
## 参数
- city: 城市名称,如:上海、北京
AI 读懂这个文件后,就知道什么时候该调用它、怎么调用。
三、Agent 是什么?
Agent(智能体) 是一个能够自主感知、思考、决策并执行任务的 AI 系统。它有一个「大脑」(LLM),有一套工具(Skill 或函数),有一个运行循环。
Agent 的四个核心要素
┌─────────────────────────────────────┐
│ Agent │
│ │
│ ┌─────────┐ ┌────────────────┐ │
│ │ 感知 │ │ 决策/规划 │ │
│ │ Perceive│───▶│ Plan │ │
│ └─────────┘ └───────┬────────┘ │
│ │ │
│ ┌─────────┐ ┌───────▼────────┐ │
│ │ 记忆 │ │ 执行工具 │ │
│ │ Memory │ │ Act/Tools │ │
│ └─────────┘ └────────────────┘ │
└─────────────────────────────────────┘
1. 感知(Perceive):接收用户输入、环境信息
2. 决策(Plan):LLM 大脑分析需求,决定下一步做什么
3. 执行(Act):调用工具/Skill,获取外部信息或执行操作
4. 记忆(Memory):记住对话历史,支持多轮交互
最简单的 Agent 代码结构
def run_agent(user_input):
messages = [{"role": "user", "content": user_input}]
while True:
# 1. LLM 思考:要做什么?
response = llm.chat(messages, tools=TOOLS)
# 2. 不需要工具 → 直接回答
if not response.tool_calls:
return response.content
# 3. 需要工具 → 调用工具
for tool_call in response.tool_calls:
result = execute_tool(tool_call) # 这里调用 Skill
messages.append(tool_result(result))
# 4. 拿到工具结果 → 继续思考
这个循环:思考 → 行动 → 观察 → 再思考,就是 Agent 的本质,也叫 ReAct 模式。
四、核心区别一览
| 对比维度 | Skill | Agent |
|---|---|---|
| 本质 | 工具/插件 | 智能体/系统 |
| 有无大脑 | ❌ 无 | ✅ 有 LLM |
| 主动性 | 被动,等待调用 | 主动,自主决策 |
| 复杂度 | 低,单一功能 | 高,多工具协调 |
| 入口文件 | SKILL.md(自然语言) | Python/代码(逻辑) |
| 调用方 | Agent 或平台 | 用户或系统 |
| 典型例子 | 查天气、搜索、签到 | ChatGPT、AutoGPT |
| 能否独立运行 | ❌ 需要宿主 | ✅ 独立运行 |
五、它们如何配合工作?
一个完整的 AI 应用,通常是这样的结构:
┌──────────────────────────────────────────┐
│ Agent │
│ ┌────────┐ │
│ │ LLM │ ← 大脑,负责思考和决策 │
│ └───┬────┘ │
│ │ 调用 │
│ ┌───▼──────────────────────────────┐ │
│ │ Skill 工具箱 │ │
│ │ [天气] [搜索] [签到] [发消息] │ │
│ └──────────────────────────────────┘ │
└──────────────────────────────────────────┘
实际工作流程举例:
用户说:「今天上海天气适合出门吗?顺便帮我掘金签到」
Step 1: Agent 接收输入
↓
Step 2: LLM 分析:需要查天气 + 掘金签到,两个任务
↓
Step 3: 调用 weather Skill → 返回「晴天,22°C」
↓
Step 4: 调用 juejin_checkin Skill → 返回「签到成功,+200矿石」
↓
Step 5: LLM 整合结果,生成最终回答
↓
Step 6: 「上海今天晴天22°C,非常适合出门!掘金签到也完成了,获得200矿石 🎉」
六、在 OpenClaw 中的对应关系
如果你用过 OpenClaw(或类似的 AI 助手平台),可以这样理解:
OpenClaw 平台
│
├── Agent(就是 AI 助手本身,有 LLM 大脑)
│ ↓ 读取并调用
└── Skills(扩展能力的插件)
├── weather/SKILL.md → 查天气
├── baidu-search/SKILL.md → 百度搜索
├── mx-stocks/SKILL.md → 股票筛选
└── juejin/SKILL.md → 掘金签到
- SKILL.md 是写给 AI 看的「工具说明书」,用自然语言描述这个工具是干什么的
- AI Agent 读懂说明书后,在合适的时机自动调用对应的脚本
- 这就是为什么 Skill 的入口是
.md文件,而不是.py文件
七、自己写 Agent 时怎么设计 Skill?
如果你在用 Python 自己写 Agent(比如基于 LangChain 或直接调用 OpenAI API),Skill 在代码里就是工具函数 + 描述:
# Skill 的代码形式:函数 + JSON Schema 描述
TOOLS_SCHEMA = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市天气", ← 这就是给 LLM 看的「SKILL.md」
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
}
}
}
}
]
# Skill 的实现
def get_weather(city: str) -> str:
return f"{city}:晴天,22°C"
本质上,无论是 OpenClaw 的 SKILL.md,还是 OpenAI 的 JSON Schema,都在做同一件事:告诉 LLM 这个工具叫什么、能做什么、需要什么参数。形式不同,目的一样。
八、总结
用一句话记住:
Agent 是会思考的大脑,Skill 是它手里的工具。
| 记忆方法 | |
|---|---|
| Skill | 螺丝刀——功能单一,用的时候才拿起来 |
| Agent | 工程师——知道什么时候用哪把螺丝刀 |
学 AI 开发的路径建议:
- 先搞懂一个 Skill 怎么写(单一功能,容易理解)
- 再搞懂 Agent 的 ReAct 循环(思考→行动→观察)
- 最后学多 Agent 协作(多个 Agent 分工合作)
你已经在这条路上了——加油!🚀
如果这篇文章对你有帮助,欢迎点赞收藏~有问题欢迎评论区交流。