Skill(技能)在 AI Agent(智能体)领域,通常是指一个封装好的、可被大模型调用的能力单元。它让 Agent 不仅能“说话”,还能“做事”——比如搜索网页、读写文件、调用 API、操作数据库等。


1. Skill 是什么?有什么用?

  • 本质:一个 Skill 包含三个核心要素:
    • 描述(告诉模型这个技能何时能用、怎么用)
    • 参数定义(需要哪些输入)
    • 执行逻辑(具体完成任务的代码或提示模板)
  • 用途
    • 把复杂任务拆成可复用的模块
    • 让 LLM 能够使用工具,突破纯文本限制
    • 组合多个 Skill 完成多步自动化流程
    • 在不同 Agent 之间共享能力(在同一框架内)

2. 哪些软件 / 平台使用了 Skill 概念?

很多 Agent 框架或平台都有类似“技能”的设计,只是叫法可能不同:

平台/框架 对应概念 文件化支持
Microsoft Semantic Kernel Skill(最典型,分 Semantic Skill 和 Native Skill) ✅ 严格的目录结构
AutoGPT (AutoGPT Platform) Skill(Beta),通过 Python 包扩展 ✅ 特定 Python 文件结构
LangChain Tool(工具),也可视为 Skill 无强制文件结构,通过代码定义
Coze(扣子) 插件、工作流(低代码 Skill) UI 配置,不直接暴露文件
Home Assistant(语音助手) Skill(自定义对话技能) 有约定的 YAML/Python 结构
Rasa Action(自定义动作) Python 代码文件

还有其他框架如 CrewAI、MetaGPT 等,大多用“Tool”一词,但本质和 Skill 相同。


3. 是否对所有 Agent 通用?

不通用。
每个框架对 Skill 的接口规范、描述语言、加载方式、调用协议都不一样。
例如,Semantic Kernel 的 skprompt.txt + config.json 结构就无法直接被 AutoGPT 识别。
但它们的设计思想是相通的:把能力抽象成元数据+执行体,学会了一种,就很容易理解其他框架的实现。


4. 典型的文件结构(以两大框架为例)

🔹 Microsoft Semantic Kernel 的 Skill 结构

MySkills/
  MyWeatherSkill/
    GetWeather/
      skprompt.txt      # 语义技能的提示模板
      config.json        # 技能的配置(参数、描述等)
    GetCityCode/           # 另一个函数(可以是原生代码)
      run.py               # Python 原生函数
  • skprompt.txt 内容示例:
    根据下面的用户输入,提取城市名称并返回天气情况。
    用户输入: {{$input}}
    天气情况:
    
  • config.json 示例:
    {
      "schema": 1,
      "type": "completion",
      "description": "根据输入获取某个城市的天气",
      "completion": { "max_tokens": 150, "temperature": 0.0 },
      "input": {
        "parameters": [
          { "name": "input", "description": "用户输入的自然语言", "defaultValue": "" }
        ]
      }
    }
    

🔹 AutoGPT 的 Skill 结构(新版平台)

my_skill/
  __init__.py
  skill.py          # 必须包含一个 Skill 类
  • skill.py 示例骨架:
    from autogpt.skills import BaseSkill
    
    class MyWeatherSkill(BaseSkill):
        def __init__(self):
            super().__init__(
                name="WeatherSkill",
                description="Get weather for a city",
                parameters={...}
            )
    
        async def execute(self, city: str) -> str:
            # 调用天气 API 或计算逻辑
            return f"{city} 的天气是晴天"
    

5. 如何编写自己的 Skill(以 Semantic Kernel 为例)

假设你想创建一个“计算两个数之和”的 Skill。

步骤一:创建目录结构

在项目下建立:

MyMathSkill/
  Add/
    skprompt.txt
    config.json

步骤二:编写提示模板 skprompt.txt

计算 {{$number1}} 和 {{$number2}} 的和。
结果:

步骤三:编写配置 config.json

{
  "schema": 1,
  "type": "completion",
  "description": "将两个数字相加",
  "completion": { "max_tokens": 50, "temperature": 0 },
  "input": {
    "parameters": [
      { "name": "number1", "description": "第一个数字", "defaultValue": "" },
      { "name": "number2", "description": "第二个数字", "defaultValue": "" }
    ]
  }
}

步骤四:在代码中加载并使用

import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

kernel = sk.Kernel()
kernel.add_chat_service("gpt", AzureChatCompletion("deployment", "endpoint", "key"))

# 导入技能
skill = kernel.import_semantic_skill_from_directory("./MyMathSkill", "MyMathSkill")

# 运行技能
result = await kernel.run_async(skill["Add"], input_context="number1=5, number2=3")
print(result)  # 输出类似 "8"

如果你想写原生代码技能(不依赖提示模板)

from semantic_kernel.skill_definition import sk_function, sk_function_context_parameter
from semantic_kernel.orchestration.sk_context import SKContext

class MathSkill:
    @sk_function(description="Add two numbers")
    @sk_function_context_parameter(name="number1", description="First number")
    @sk_function_context_parameter(name="number2", description="Second number")
    def add(self, context: SKContext) -> int:
        return int(context["number1"]) + int(context["number2"])

然后把 MathSkill 类注册给 Kernel 即可。


总结

  • Skill 是 Agent 的工具箱,让大模型能真正执行任务。
  • 不同平台有各自的 Skill 规范,不通用,但思路一致。
  • 文件结构最常见的就是“文件夹 + 配置文件 + 提示(或代码)”,Semantic Kernel 是这方面的典型代表。
  • 编写自己的 Skill 只需:描述清楚能力 → 定义好输入参数 → 实现执行逻辑(提示或代码)→ 在框架中注册
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐