ByteFisher AI 编程实战(二十):构建自定义 Skill——让AI拥有专属能力

MCP 提供了标准化的工具接口,Skill(技能)则是在这之上构建的更高层次的 AI 能力包——它组合了指令、工具、上下文,让 AI 能够完成一个特定领域的复杂任务。

一、什么是 Skill

Skill 是一组预定义的指令和工具的集合,告诉 AI “如何完成某类任务”。

类比 说明
传统编程 一个库/包,封装了特定功能,可复用
AI Skill 预定义的指令+工具,让 AI 掌握特定领域技能
与之对比的 MCP 标准化的工具接口(底层通信协议)
Skill 在工具之上构建的任务模式(上层能力封装)

一个 Skill 通常包含:系统指令、可用工具列表、输入输出格式、工作流程、边界约束。Skill 可以被理解为”AI 时代的函数”——封装特定能力,可供复用和组合。

二、OpenCode Agent 开发

2.1 创建自定义 Agent

.opencode/agents/ 目录下创建配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"agents": {
"unity-dev": {
"name": "Unity 开发助手",
"description": "专门辅助 Unity C# 开发的 Agent",
"instructions": [
"你是一名资深的 Unity C# 开发者",
"遵循 Unity 官方编码规范",
"私有字段使用 _camelCase 命名",
"所有公开方法需添加 XML 文档注释",
"优先使用对象池管理频繁创建的对象",
"避免使用 GameObject.Find"
],
"tools": ["read", "edit", "search", "bash"],
"model": "deepseek-chat",
"temperature": 0.3
},
"blog-writer": {
"name": "博客写作助手",
"description": "辅助编写 Hexo 博客文章的 Agent",
"instructions": [
"你是一名技术博客作者,风格为 ByteFisher 博客风格",
"文章结构:引言 → 编号章节 → 对比表格 → 本章小结",
"代码块需要标注语言类型",
"front matter 中包含 tags、categories、description、keywords"
],
"tools": ["read", "edit", "search"]
}
}
}

2.2 使用自定义 Agent

1
2
3
4
5
6
# 启动时指定 Agent
opencode --agent unity-dev

# 在对话中切换 Agent
/agent unity-dev
/agent blog-writer

2.3 Agent 的指令编写原则

指令类型 编写要点 示例
角色定义 明确身份和经验级别 “你是一名资深 Unity C# 开发者”
行为约束 具体可检查的规则 “避免使用 GameObject.Find”
质量要求 期望的输出标准 “所有公开方法需添加 XML 文档注释”
禁止清单 明确不能做什么 “不要使用反射(性能敏感)”
流程指引 复杂任务的分步说明 “先分析需求,再设计方案,最后实现”

三、Claude Code Skill

3.1 Skill 文件格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
---
name: blog-writer
description: 撰写技术博客文章,ByteFisher 风格
version: 1.0.0
---

# Blog Writer Skill

## 角色
你是一名技术博客作者,为 ByteFisher 博客撰写文章。

## 风格指南
1. 标题使用中文,简洁明了
2. 使用编号章节(一、二、三)
3. 使用对比表格
4. 代码块标注语言类型
5. 每章末尾有"本章小结"

## 质量要求
- 技术细节必须准确
- 代码示例必须可运行
- 不添加未经验证的观点

## 输出格式
- 使用 Markdown 格式
- 代码块使用三个反引号 + 语言名称
- 表格使用 Markdown 表格语法

3.2 使用 Skill

1
2
3
4
5
# 在 Claude Code 中加载 Skill
claude --skill blog-writer

# 或在会话中使用
/skill blog-writer

3.3 Skill 与 MCP 的协同

Skill 和 MCP 不是替代关系,而是分层协作:

1
2
3
Skill(上层):告诉 AI 怎么完成特定任务
↓ 使用
MCP(底层):提供标准化的工具接口

例如一个”Unity 性能优化 Skill”可能组合使用:

  • MCP File System:读取项目脚本
  • MCP SQLite:读取性能数据
  • 自定义指令:Unity 性能分析的方法论

四、Skill 设计原则

原则 说明 反例
单一职责 一个 Skill 只做一类事 “通用编程助手”(太宽泛)
明确边界 清楚说明能做什么和不能做什么 “帮你写代码”(边界模糊)
可组合 Skill 之间可叠加使用 所有功能塞到一个 Skill 中
可测试 有明确的输入输出预期 “优化代码”(太模糊)

五、Skill 与 Agent 的关系

Skill 和 Agent 是不同抽象层次的概念:

1
Agent(执行者)→ 使用 Skill(能力包)→ 调用 Tool(原子操作)
概念 类比 职责
Agent 一个员工 决策者:理解任务、制定计划、协调执行
Skill 该员工的专业技能 告诉员工”这类任务怎么做”
Tool 员工使用的工具 具体的执行能力(读文件、写代码)

一个 Agent 可以使用多个 Skill。例如 “Unity 开发 Agent” 可以同时加载 “代码规范 Skill” 和 “性能优化 Skill”。

5.1 何时需要新建 Skill

1
2
3
4
5
6
这段代码是否需要在多个项目中复用?
├── 是 → 提取为工具(MCP Server)
这段操作流程是否依赖特定领域知识?
├── 是 → 封装为 Skill
这个工作流涉及多个步骤和决策?
├── 是 → 在 Agent 中组合多个 Skill

六、构建你的 Skill 生态

5.1 从问题到 Skill

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. 发现问题:你在某个场景中重复做同样的操作
→ "我每周都要给新项目搭建同样的项目结构"

2. 提取模式:总结最佳实践
→ "项目结构:src/、tests/、docs/、scripts/"
→ "配置文件:tsconfig、eslint、prettier、jest"

3. 编写 Skill:将模式转化为指令
→ 创建 project-scaffolder Skill

4. 测试调优:在真实项目中试用
→ 验证生成的结构是否符合预期

5. 复用分享:分享给团队或社区
→ 提交到公司内部仓库或公开市场

5.2 Skill 库推荐

Skill 名称 用途 适用工具
unity-optimization Unity 项目性能分析与优化 OpenCode / Claude Code
react-component React 组件生成(含测试) OpenCode
blog-writer ByteFisher 风格博客写作 OpenCode / Claude Code
api-scaffold REST API 脚手架生成 Claude Code
python-data Python 数据处理与可视化 OpenCode

七、Skill 实战:构建一个”代码审查 Skill”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
---
name: code-reviewer
description: AI 代码审查专家
version: 1.0.0
---

你是一名资深的代码审查专家。

审查流程:
1. 安全审查:SQL 注入、XSS、硬编码密钥、认证绕过
2. 性能审查:循环分配、不必要的装箱、重复查询
3. 可维护性审查:过长函数、过多参数、重复代码
4. 规范审查:命名规范、文件组织、注释完整性

输出格式:
- 按严重程度(Critical/Major/Minor)排序
- 每条问题附代码行号和建议修复
- 顶部输出问题统计摘要

八、Skill 的局限性

Skill 虽然强大,但也有一些注意事项:

局限性 表现 应对
不擅长”创造” 只能按指令办事,不能发明新模式 需要人类设计新的 Skill
上下文消耗 指令越长,可用 Token 越少 保持指令简洁,控制在 500 字以内
冲突风险 多个 Skill 的指令相互矛盾 测试 Skill 组合兼容性
维护成本 Skill 需要随工具版本更新 定期检查和更新

九、Skill 调试方法

开发 Skill 后如何验证它是否正常工作:

方法 操作 预期结果
直接测试 加载 Skill 后问一个典型问题 回答遵循 Skill 定义的规则
边界测试 问 Skill 范围之外的问题 拒绝回答或明确说明边界
对比测试 加载/不加载 Skill 对比同一问题的回答 加载 Skill 后的回答更专业
压力测试 连续问 5 个不同问题 风格和格式一致
组合测试 同时加载两个 Skill 两个 Skill 的规则同时生效

本章小结

  • Skill 是预定义的指令+工具集合,让 AI 掌握特定领域能力——可理解为”AI 时代的函数”
  • OpenCode Agent 通过 JSON 配置定义角色、工具、行为约束
  • Claude Code Skill 用 Markdown + Front Matter 定义,更强调自然语言描述
  • Skill 与 MCP 是分层关系:Skill 定义任务模式,MCP 提供工具接口
  • 好的 Skill 包含:身份定义、行为约束、质量要求、工作流程
  • 构建 Skill 的流程:发现问题 → 提取模式 → 编写 → 测试 → 复用
  • Skill 正在成为 AI 时代的”复用单元”,本质是领域知识的可编程封装

下一篇是本系列的最后一篇——多 Agent 协作与综合实战。

ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
分享: