标签 YAML 规范 下的文章

想让 AI 帮你自动清理电脑、分析股票或者发日报?你需要给它编写一个 Skill (技能)

其实写一个 Skill 并不难,它本质上就是一个配置文件加上一段代码

本文档将手把手教你如何创建一个标准的 Skill,并避开新手最容易踩的坑。

一、 YAML 头部元数据 (Frontmatter)

每个 Skill 的入口文件(通常叫 SKILL.md),由 “身份证” (YAML) 和 “躯干” (文件结构) 组成,最开头都必须有一段被三根短横线 --- 包裹的内容。

这叫做 YAML Frontmatter (头部元数据)

通俗地说,这就是给 AI 看的身份证。AI 通过它来知道这个技能叫什么、能干什么。

1. 一个标准的身份证长这样:

--- name: system-cleaner description: "清理电脑里的垃圾文件,释放C盘空间" tags: ["清理", "系统", "优化"]
version: 1.0.0 ---

2. 这里的每一行代表什么?

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

字段类型必填说明
nameString技能 ID。建议使用 kebab-case (小写短横线),如 git-helper。
descriptionString核心 Prompt。智能体依靠这句话来理解技能用途。建议包含具体动词(如 "清理"、“生成”)。
tagsArray关键词列表。用于模糊匹配和分类检索。
versionString版本号。遵循语义化版本 (Major.Minor.Patch)。

二、文件夹要怎么放?(目录结构)

写代码最怕乱。为了以后好维护,建议你按照下面的结构来整理文件。

这就好比把衣服、裤子和袜子分开放进不同的抽屉,找起来才快。

推荐的 “三抽屉” 结构:

my-skill/                  # 你的技能总文件夹
├── SKILL.md               # [身份证] 上面写的 YAML 就放这里
├── scripts/               # [工具箱] 所有的代码脚本放这里
│   ├── main.ps1           # 比如 PowerShell 脚本
│   └── utils.py           # 比如 Python 脚本
├── config/                # [设置] 配置文件放这里
│   └── settings.json      # 比如你想让用户设置“清理哪个盘”,就写在这里
└── data/                  # [仓库] 存放运行结果
    └── logs/              # 如果有日志,就生成在这里 

三、 代码实战 (The Code)

光有配置是不够的,Skill 的灵魂在于代码。

Skill 的本质是命令行工具 (CLI)。智能体通过命令行调用你的脚本,并读取打印的输出。

  1. 实战演练:编写 “Hello World” Skill

我们来编写一个简单的 Python 脚本,它接收一个名字参数,并输出问候语。

  1. 脚本代码 (scripts/main.py)

import argparse
import sys

# 1. 设置参数解析 (让脚本能听懂 AI 的指令) # AI 会以 `python main.py --name "LO"` 的方式调用
parser = argparse.ArgumentParser(description="Greeter Skill")
parser.add_argument("--name", type=str, required=True, help="要问候的名字")

# 2. 解析参数
args = parser.parse_args()

# 3. 执行逻辑 (这里可以写任何业务逻辑)
greeting = f"👋 你好,{args.name}!Skill 运行成功!" # 4. 输出结果 (这是 AI 唯一能看到的东西!) # 必须使用 print 输出。AI 会捕获 stdout 作为执行结果。 print(greeting)
  1. 进阶技巧:健壮性与反馈

  • 错误处理: AI 看不到报错弹窗。如果出错,必须打印错误信息并以非 0 状态码退出。
try:
    # 业务逻辑... except Exception as e:
    print(f"❌ 发生错误: {str(e)}")
    sys.exit(1) # 告诉 AI 任务失败 
  • 依赖管理:如果用了第三方库,请在根目录创建 requirements.txt
  1. 核心连接:配置与交互

你已经建了 config 文件夹,现在教你怎么用它。

2.1 读取外部配置 (Reading Config)

不要把参数写死在代码里!用 json 库读取 settings.json

import json
import os

# 动态找到 config 文件夹 (不管用户把 Skill 放在哪)
current_dir = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(current_dir, "..", "config", "settings.json")

# 读取配置
with open(config_path, "r", encoding="utf-8") as f:
    config = json.load(f)

print(f"✅ 读取到配置: {config}")

2.2 与用户对话 (Interaction)

有时候需要问用户 “确定吗?”。

# 1. 打印问题 (AI 会展示给用户) print("❓ 确认执行操作吗?(y/n)")

# 2. 等待输入 (脚本会暂停)
user_input = input().strip().lower()

if user_input == 'y':
    print("🚀以此执行...")
else:
    print("🛑 操作取消")

四、 新手避坑指南 (千万别踩这些雷!)

YAML 这种格式虽然看起来简单,但它脾气很怪。很多新手写代码一次过,却在 YAML 上卡半天。

  1. 它是 “空格控”,严禁使用 Tab 键!

YAML 依靠缩进来分层级。

  • 雷区:千万不要用键盘左上角的 Tab 键来缩进!

  • 正确做法:老老实实按 空格键。一般按 2 下或 4 下空格。

  1. 冒号后面必须有空格

这是最容易被忽略的错误。

  • 错误写法:name:my-skill (冒号后面紧挨着字)

  • 正确写法:name: my-skill (冒号后面加了个空格)

  1. 还有什么要注意的?

  • 路径别写死 (No Absolute Paths):

    • 不要在代码里写 D:\我的项目\scripts 这种绝对路径。别人的电脑可能只有 C 盘。

      • 建议:使用 “相对路径”。也就是告诉程序 “就在当前文件夹的下一级找”。
  • 幂等性 (Idempotency):

    • 脚本应支持重复运行。比如创建文件夹前,先检查它是否已经存在。
  • 自测 (Self-Test):

    • 在提交给 AI 之前,先自己在终端里跑一遍命令:python scripts/main.py --name "Test",确保没有报错。

总结

写 Skill 其实就三句话:

  1. 写好 YAML 身份证,注意冒号后要空格

  2. 把代码和配置分开放,保持目录整洁

  3. 代码里多打印进度提示,方便 AI 理解


📌 转载信息
原作者:
Y_yuHou
转载时间:
2026/1/16 16:50:03