Skill 与 Agent:AI 开发中两个最容易混淆的概念

1 阅读1分钟

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 模式


四、核心区别一览

对比维度SkillAgent
本质工具/插件智能体/系统
有无大脑❌ 无✅ 有 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 开发的路径建议:

  1. 先搞懂一个 Skill 怎么写(单一功能,容易理解)
  2. 再搞懂 Agent 的 ReAct 循环(思考→行动→观察)
  3. 最后学多 Agent 协作(多个 Agent 分工合作)

你已经在这条路上了——加油!🚀


如果这篇文章对你有帮助,欢迎点赞收藏~有问题欢迎评论区交流。