E1 · 进阶深入

Skills 开发教程:创建与发布自定义技能包

2026-09-30
📌 本页已按官方口径订正:删除了无法核实的斜杠命令(如 /skills validate、/skills test、/skills publish、/skills reload、/workbuddy login 等)与登录/发布流程。官方对技能的管理是「设置 → 技能」面板:安装走「上传技能 / 查找技能 / 创建技能」,启停在「已安装」中通过开关控制。下文中的技能包结构为示意示例,具体请以官方《技能》文档与技能包模板为准。

WorkBuddy 的 Skills 技能包是扩展 AI 能力的核心机制。如果说 MCP 连接器让 WorkBuddy 能"使用工具",那么 Skills 则让 WorkBuddy 能"掌握技能"——一个 Skill 封装了特定领域的知识、提示词模板、工具调用链和工作流逻辑。本文将从零开始,带你完成一个自定义 Skill 的开发、调试、测试和发布全流程。

📁目录结构(社区常见做法,示意)

社区里流传的技能包大多按下面的方式组织文件。注意:这是「常见做法」而不是「官方规范」——官方并未公开技能包的目录与字段标准,你导入成功的技能包长什么样,就以那个为准:

my-skill/
├── manifest.json        # 技能元数据(必需)
├── README.md            # 技能说明文档
├── prompts/             # 提示词模板
│   ├── system.md        # 系统提示词
│   ├── user-template.md # 用户输入模板
│   └── few-shot/        # Few-shot 示例
│       ├── example-1.md
│       └── example-2.md
├── tools/               # 工具定义
│   └── tools.json       # 工具列表与参数 Schema
├── workflows/           # 工作流定义
│   └── main.json        # 主工作流
├── knowledge/           # 领域知识库
│   ├── glossary.md      # 术语表
│   └── best-practices.md
├── tests/               # 测试用例
│   ├── test-cases.json
│   └── expected/        # 期望输出
│       └── case-1.json
└── assets/              # 静态资源
    └── icon.svg         # 技能图标

通常元数据文件(manifest.json 之类)承载「技能叫什么、干什么用、什么时候触发」,其余目录按需添加。一个最简技能可以只有元数据 + 一段提示词。

📋技能包的组成(示意,非官方规范)

⚠️ 先说清楚不确定性:官方《技能》文档描述的是「设置 → 技能」里的三个入口(上传技能 / 查找技能 / 创建技能),并没有公开一份技能包的目录结构与字段规范。下面这段结构是社区技能包常见的组织方式,用于帮你理解「技能里都装了些什么」,不要当成官方规范照抄。真正的做法是:优先用官方「查找技能 / 创建技能」入口,需要手写时以你导入成功过的技能包为样板。

一个技能包通常包含这几类内容——核心是「让模型知道什么时候该用它、该怎么做」:

{
  "name": "code-reviewer",
  "version": "1.2.0",
  "description": "智能代码审查技能,支持多语言代码质量分析",
  "author": "your-name",
  "license": "MIT",
  "category": "development",
  "tags": ["code-review", "quality", "security"],

  "entry": "prompts/system.md",
  "tools": "tools/tools.json",
  "workflows": ["workflows/main.json"],

  "dependencies": {
    "mcp": ["filesystem", "git"],
    "skills": []
  },

  "permissions": {
    "filesystem": "read",
    "network": false,
    "subprocess": false
  },

  "config": {
    "severity_threshold": {
      "type": "string",
      "enum": ["low", "medium", "high"],
      "default": "medium",
      "description": "报告的最低严重级别"
    },
    "languages": {
      "type": "array",
      "items": { "type": "string" },
      "default": ["javascript", "python", "java"],
      "description": "支持审查的编程语言"
    }
  },

  "compatibility": {
    "workbuddy": ">=1.5.0"
  }
}

关键字段说明

✍️提示词模板编写

提示词是 Skill 的核心逻辑载体。WorkBuddy 支持在 Markdown 中使用模板语法:


# 角色
你是一位资深代码审查专家,擅长 {{languages}} 语言的代码质量分析。

# 审查标准
按照以下维度逐项审查:
1. **代码规范**:命名、格式、注释是否符合团队规范
2. **逻辑正确性**:边界条件、异常处理、并发安全
3. **性能**:时间/空间复杂度、不必要的计算
4. **安全**:注入风险、敏感数据暴露、权限越权
5. **可维护性**:函数粒度、耦合度、可测试性

# 输出格式
以 Markdown 表格输出审查结果:

| 文件 | 行号 | 级别 | 类别 | 问题描述 | 修改建议 |
|------|------|------|------|----------|----------|

仅报告 {{severity_threshold}} 及以上级别的问题。

模板中的 {{变量}} 会从 config 中取值,用户可在技能设置中修改。也可以在调用时动态传入:


请审查以下代码变更:

## 变更文件
{{file_list}}

## Diff 内容
{{diff_content}}

## 上下文
{{context}}

🔧工具定义

Skill 可以定义专属工具,扩展 WorkBuddy 的可调用能力:

// tools/tools.json
[
  {
    "name": "run_linter",
    "description": "对指定文件运行代码检查工具",
    "parameters": {
      "type": "object",
      "properties": {
        "files": {
          "type": "array",
          "items": { "type": "string" },
          "description": "待检查的文件路径列表"
        },
        "linter": {
          "type": "string",
          "enum": ["eslint", "pylint", "checkstyle"],
          "description": "使用的检查工具"
        }
      },
      "required": ["files"]
    }
  },
  {
    "name": "get_git_diff",
    "description": "获取 Git 变更的 diff 内容",
    "parameters": {
      "type": "object",
      "properties": {
        "base": { "type": "string", "default": "main" },
        "scope": { "type": "string", "enum": ["staged", "unstaged", "all"] }
      }
    }
  }
]

工具的实际执行由 MCP 连接器承担,这里定义的是 Skill 层面的工具调用意图和参数约束,WorkBuddy 会自动路由到对应的 MCP 连接器。

🔄工作流定义

工作流将多个步骤编排为自动化流程:

// workflows/main.json
{
  "name": "full-review",
  "steps": [
    {
      "id": "get_diff",
      "tool": "get_git_diff",
      "params": { "scope": "staged" }
    },
    {
      "id": "lint",
      "tool": "run_linter",
      "params": { "files": "{{steps.get_diff.result.files}}" }
    },
    {
      "id": "review",
      "prompt": "prompts/user-template.md",
      "params": {
        "diff_content": "{{steps.get_diff.result.diff}}",
        "file_list": "{{steps.get_diff.result.files}}",
        "lint_result": "{{steps.lint.result}}"
      }
    }
  ],
  "output": "{{steps.review.result}}"
}

工作流支持步骤间数据传递({{steps.id.result}})、条件分支、并行执行等高级编排能力。

🐛开发调试

本地加载

开发阶段,把技能包导入 WorkBuddy 即可:在「设置 → 技能」面板点击「添加技能 → 上传技能」,拖拽或点击选择本地技能包文件,导入后系统会自动完成配置,无需额外操作。

导入后可在「已安装」列表中用开关启用或关闭该技能——关闭后技能仍保留在列表中,只是不参与模型的自动调用,重新开启即可恢复。

测试用例

在 tests/test-cases.json 中定义测试:

[
  {
    "name": "检测空指针异常",
    "input": {
      "code": "function getAge(user) { return user.age; }",
      "language": "javascript"
    },
    "expected": {
      "contains": ["空指针", "null", "undefined"],
      "severity": "high"
    }
  },
  {
    "name": "忽略合规代码",
    "input": {
      "code": "function add(a, b) { return a + b; }",
      "language": "javascript"
    },
    "expected": {
      "issues_count": 0
    }
  }
]

发布前建议按这些用例逐条手工验证,确保正向场景与边界场景都符合预期。

🚀发布流程

1. 质量检查

发布前建议自行完成一轮检查,重点确认:技能包文件完整、权限声明与实际行为一致、依赖可用、测试用例全部通过。

2. 版本管理

遵循语义化版本:

更新 manifest.json 中的 version 字段,并建议同步 Git 标签。

3. 对外分享与上架

官方技能市场以官方推荐技能为主,自定义技能一般不直接上架。若要与他人共享,可把技能包文件(或代码仓库地址)发给对方,对方在技能面板「添加技能 → 上传技能」中导入即可使用。

4. 分享与协作

团队协作时,推荐这些做法:

💡最佳实践

📚 参考资料

💬 你想为 WorkBuddy 开发什么自定义 Skill?在开发过程中遇到了哪些问题?欢迎分享你的技能开发经验!