理解Skill

文章目录

    • [1.Skill 是什么](#1.Skill 是什么)
    • [2.Skill 的组成部分](#2.Skill 的组成部分)
      • [2.1. 知识文档 --- SKILL.md](#2.1. 知识文档 — SKILL.md)
      • [2.2. 加载器 --- skill_loader.py](#2.2. 加载器 — skill_loader.py)
      • [2.3. 底层依赖 --- Tool 系统](#2.3. 底层依赖 — Tool 系统)
    • [3.完整的 Skill 流程](#3.完整的 Skill 流程)
    • [4.Skill和 Tool、MCP 的区别](#4.Skill和 Tool、MCP 的区别)
    • 5.代码

1.Skill 是什么

Skill = 知识文档 + Tool 执行能力。它不是独立的新技术,而是把Tool 包装在一个"按需加载知识"的框架里。

来自:什么是Skill?

Skill是包含指令、脚本和资源的文件夹,Claude 可以动态加载这些文件夹来改进专业任务的性能。技能教会 Claude 如何以可重复的方式完成特定任务,无论是使用您公司的品牌指南创建文档、使用您组织的特定工作流程分析数据,还是自动化个人任务。

设计目标:节省 token 。LLM 的上下文窗口有限,不该把所有领域知识(PDF 处理、图片编辑、音视频转换等)都塞进 system prompt。Skill 的做法是:用到时才加载(渐进式加载)

来自:使用MCP的代码执行:构建更高效的agent

MCP 为代理连接多种工具和系统提供了基础协议。然而,一旦连接过多服务器,工具定义和结果可能会消耗过多令牌,降低代理效率。随着MCP使用规模的扩大,有两种常见模式会增加agent成本和延迟:

1.工具定义会让上下文窗口过载;

2.中间工具的结果会消耗额外的token。


2.Skill 的组成部分

2.1. 知识文档 --- SKILL.md

每个 Skill 是一个 Markdown 文件,结构分两部分:

markdown 复制代码
---
name: pdf
description: 当用户想处理 PDF 时激活此 Skill
---
这里是实际的知识内容...
  • YAML 元数据 (两个 -- 之间):Skill 的名称、描述、触发条件
  • 正文:领域知识(API 用法、代码示例、最佳实践)

2.2. 加载器 --- skill_loader.py

skill_loader.py 只有 23 行,核心逻辑:

def load(path: str) -> tuple[dict, str]: # 1. 读文件 # 2. 检查是否以 --- 开头(没有就直接返回全文) # 3. 用 --- 分割,取 parts[1] → YAML 元数据,parts[2] → 正文 # 4. 返回 (metadata, body)

返回的 metadata 用来判断是否该激活此 Skillbody 是注入到 LLM 上下文的实际知识。

2.3. 底层依赖 --- Tool 系统

Skill 本身不包含执行逻辑,它只是给 LLM 提供"知识"。LLM 看完知识后,如果需要操作文件、执行命令,还是通过 ToolExecutor 调用内置工具(read/write/bash 等)。


3.完整的 Skill 流程

复制代码
用户:"帮我提取这个 PDF 里的表格"
    │
    ▼
① 检测关键词 → 匹配到 "pdf" Skill
    │
    ▼
② 加载 skills/pdf/SKILL.md
   → metadata.name = "pdf"
   → body = "## pdfplumber...extract_tables()..."
    │
    ▼
③ 把 body 注入到 system prompt
   "你是 PDF 专家,参考以下指南:
    ### Extract Tables
    with pdfplumber.open(...) as pdf:
        tables = page.extract_tables()..."
    │
    ▼
④ LLM 根据知识,决定调用 Tool
   比如:bash({"command": "pip install pdfplumber"})
        → ToolExecutor 执行 → 结果返回 LLM
    │
    ▼
⑤ LLM 最终给出回答

注意:④是可选步骤。如果用户只是问"PDF 有几种提取表格的方法",LLM 只靠 SKILL.md 的知识就能回答,不需要调用工具。


4.Skill和 Tool、MCP 的区别

概念 解决什么问题 怎么说
Tool LLM 需要执行本地操作 "给你一个函数,你可以调用它"
MCP LLM 需要调用远程服务 "给你一个远程 API,你可以调用它"
Skill LLM 不懂某个领域知识 "给你一份文档,你先读懂了再干活"

一句话Tool 给 LLM MCP 给 LLM 远程手Skill 给 LLM 大脑的参考资料

5.代码

skill_loader.py:

python 复制代码
"""Skill 加载模块"""

import yaml

def load(path: str) -> tuple[dict, str]:
    """解析 SKILL.md 文件,返回 (metadata, content)。"""
    with open(path, "r", encoding="utf-8") as f:
        content = f.read()

    if not content.startswith("---"):
        return {}, content

    # 找到第二个 ---
    parts = content.split("---", 2)  # 只分割成三部分:前导空字符串、metadata、剩余内容
    if len(parts) < 3:
        return {}, content

    # 划分元数据和正文
    metadata = yaml.safe_load(parts[1])
    body = parts[2].strip()

    return metadata or {}, body

if __name__ == "__main__":
    import sys
    from pathlib import Path

    # 默认测试文件(相对于脚本所在目录)
    script_dir = Path(__file__).parent
    test_file = script_dir / "skills/pdf/SKILL.md" 

    if len(sys.argv) > 1:
        test_file = Path(sys.argv[1])

    print(f"Loading: {test_file}")
    print("=" * 50)

    meta, body = load(str(test_file))

    print("METADATA:")
    for k, v in meta.items():
        display = f"{v[:60]}..." if isinstance(v, str) and len(v) > 60 else v
        print(f"  {k}: {display}")

    print(f"\nCONTENT (first 300 chars):\n{body[:300]}...")

skill.md文件:

markdown 复制代码
---
name: pdf
description: Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
license: Proprietary. LICENSE.txt has complete terms
---

# PDF Processing Guide

## Overview
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

参考:

1.什么是Skill?

2.Code execution with MCP: Building more efficient agents.

3.https://github.com/lasywolf/Learn-OpenClaw

相关推荐
昇腾知识体系8 小时前
CANN 安装升级避坑:version.cfg 查版本、银河麒麟找不到驱动、nnrt --version 无输出排查
人工智能·华为·知识图谱
java_logo8 小时前
Claude 遭大规模「蒸馏」?过去 8 个月,AI 行业另一场战争被摊开了
人工智能·claude·qwen·ai 安全·kimi·模型蒸馏·anthropic
yychen_java8 小时前
第二篇:从世界模型到 Physical AI——一套可落地的工业智能体架构
人工智能·架构
matlab代码8 小时前
基于matlab多尺度形态学提取眼前节组织【源码73期】
图像处理·人工智能·计算机视觉
IT_陈寒8 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
Mininglamp_27188 小时前
MCP和A2A之后,机器人网络里还缺一层开放通信协议
人工智能·agent·多智能体·具身智能
angered8 小时前
「AI 应用 / AI Agent」行业日报 · 2026-09-08
人工智能·ai编程
wxl7812279 小时前
深度解析:无本体VLA/WLA模型选型、数据采集与家用机器人产业终局
人工智能
羞儿9 小时前
AI Agent理论提升与体系构建
人工智能·智能体