第 06 章

技能 Skills

把专业知识打包成可复用的能力包

一个 SKILL.md,让 AI 在对的场景自动变专家

有了记忆系统,AI 记住了你的项目规则。这一章更进一步 —— 把专业知识打包成可调用的能力包,让 AI 在合适的时机自动变专家。

专业的重复

有些任务需要专业流程,你每次都要重新指导 AI

代码审查的标准

每次审查都要说"从安全、性能、可维护性看,按严重程度排序……"——这套专业流程你重复了无数次。

数据库迁移的步骤

"先备份、再生成迁移、验证 schema、最后应用"——这种有固定步骤的专业任务,AI 不知道你的标准。

日志分析的套路

"先找 ERROR、再看堆栈、关联时间戳、总结根因"——你想让 AI 按你的方法分析,却每次都要重述。

技能(Skill)就是为这类场景设计的:把一套专业流程 + 领域知识打包进一个目录,AI 在合适的场景自动调用,无需你每次重述。

什么是 Skill

定义、白话、和命令的区别

Skill 是 Qoder CLI 中把专业知识打包成可复用功能的机制。每个 Skill 是一个目录,核心是 SKILL.md 文件,定义了技能描述、使用时机和执行指令。

说白了,Skill 就是一份"专家操作手册"——AI 平时是个通才,遇到匹配场景时调出对应手册,立刻变专家。

Skill 的特点

  • 智能调用:模型根据请求自动判断何时用
  • 也支持 /skill-name 手动触发
  • 适合复杂专业任务、固定流程
  • 可带脚本、模板、参考文档

Command 的特点

  • 必须显式输入 /command-name
  • 适合简单快捷操作
  • 主要是提示词封装
  • 不依赖模型判断场景
一句话区分:命令是"你主动喊它来",技能是"它自己知道该来了"。Skill 在内部其实是一种特殊 Command,但多了自动触发这个杀手锏。

SKILL.md 结构

frontmatter 加正文,这就是一个完整技能

每个 Skill 的核心文件是 SKILL.md,由两部分组成:YAML 元数据(frontmatter)和 Markdown 指令。

---
name: api-doc-generator
description: Generate comprehensive API documentation from code. Use when creating API docs, documenting endpoints, or generating OpenAPI specs.
---

# API Documentation Generator

When generating API documentation:
1. Identify all API endpoints and routes
2. Document request/response formats
3. Include authentication requirements
4. Add example requests and responses
5. Generate OpenAPI/Swagger specification if needed
字段必需说明限制
name是技能唯一标识小写字母/数字/连字符,≤64 字符
description是功能描述,模型据此判断何时用≤1024 字符

创建第一个 Skill

四步做出一个能用的日志分析技能

第 1 步:创建目录(用户级,所有项目可用)

mkdir -p ~/.qoder/skills/log-analyzer

第 2 步:编写 SKILL.md

---
name: log-analyzer
description: Analyze log files to identify errors, patterns, and performance issues. Use when debugging logs, investigating errors, or monitoring application behavior.
---

# Log Analyzer

## Instructions
1. Read the log file to understand its format
2. Identify and categorize issues (errors, warnings, bottlenecks)
3. Provide summary with severity, root cause, and fixes

第 3 步:验证加载(新会话自动加载,或运行中用 /skills reload)

What Skills are available?
(应显示 log-analyzer 及其描述)

第 4 步:测试触发——打开一个日志文件,说"分析这个日志里的错误",AI 应自动调用该技能。

存储位置

用户级和项目级,决定技能的可用范围

类型路径作用域适合场景
用户级 ~/.qoder/skills/{name}/SKILL.md 你的所有项目 个人工作流、通用工具
项目级 .qoder/skills/{name}/SKILL.md 仅当前项目 团队共享、项目特有
覆盖规则:同名时,项目级覆盖用户级。这让团队可以用项目级技能统一标准,而个人偏好放用户级不冲突。
团队协作实践:项目级技能目录 .qoder/skills/ 提交到 Git,全团队共享同一套专家流程;个人的实验性技能放用户级,不影响他人。

自动触发

description 写得好,技能才能在对的时机被调用

Skill 的自动触发完全依赖 description——模型根据用户请求和各技能描述做匹配。描述写得模糊,技能永远不被触发;写得具体,命中率飙升。

不推荐:模糊

description: Helps with logs

模型不知道什么时候该用它,用户说"分析日志"也未必命中。

推荐:具体

description: Analyze log files to identify errors, patterns, and performance issues. Use when debugging logs, investigating errors, or monitoring application behavior.

包含功能+使用时机+触发关键词。

description 三要素:① 做什么(功能);② 什么时候用(场景);③ 用户常说的关键词。把这三点写进 1024 字符内,就是好描述。

手动触发

不想等模型判断,也可以直接喊

有时你明确知道要用某个技能,不想赌自动触发,可以直接用斜杠命令手动调用:

/log-analyzer

这会强制加载该技能的完整 SKILL.md 并按其指令执行。

什么时候用手动

  • 自动触发没命中,但你确定要用
  • description 还没写好,正在测试
  • 想强制走某个特定流程

查看可用技能

# 问 AI
What Skills are available?

# 或用命令
/skills

# 文件系统查看
ls ~/.qoder/skills/
ls .qoder/skills/

渐进式披露

复杂技能用多文件组织,按需加载

简单技能一个 SKILL.md 够用。但复杂技能(如数据库迁移工具)有大量参考文档、脚本、模板——全塞进一个文件会让模型每次加载全部内容,浪费 token。

渐进式披露的思路:主文件只放核心指令,详细内容放辅助文件,需要时再引用。

database-migrator/
├── SKILL.md            # 核心:流程入口
├── MIGRATION_GUIDE.md  # 详细迁移模式
├── ROLLBACK.md         # 回滚策略
└── scripts/
    ├── generate_migration.py
    └── backup_db.sh
在 SKILL.md 中引用:
For detailed patterns, see [MIGRATION_GUIDE.md].
Run backup: python scripts/backup_db.sh
加载机制:启动时只加载每个 Skill 的 name + description(保持快速);请求匹配时才加载完整 SKILL.md;SKILL.md 里引用的辅助文件按需加载。这样既快又省。

最佳实践

写技能时容易踩的坑

应该做不要做
每个技能专注一个领域 写一个"coding-helper"什么都管
description 写清功能+时机+关键词 只写"帮助处理日志"这种模糊话
复杂技能用多文件分组织 把所有内容塞进一个 SKILL.md
共享前充分测试触发 写完就提交,不验证是否真的会被调用
记录版本变更历史 改了不记录,团队不知道升级了什么
判断该不该做成 Skill:如果一个专业任务你一周做 3 次以上,且有固定步骤或领域知识,就值得做成 Skill。偶尔做一次的,对话里说清就行。

排错指南

技能相关的高频问题

技能没被自动触发

检查:① SKILL.md 路径对不对;② frontmatter 的 YAML 有没有语法错(缩进、引号);③ description 是不是太模糊。修复:用 /skills 确认已加载;把 description 写具体;或直接 /skill-name 手动触发验证。

技能执行报错

原因:脚本没有执行权限,或依赖未安装。修复:chmod +x .qoder/skills/my-skill/scripts/*.py;在 SKILL.md 里声明依赖。

修改后没生效

原因:CLI 运行中没重载。修复:运行 /skills reload,或新开会话。

多个技能互相冲突

原因:描述重叠,模型难以区分。修复:在 description 里用不同关键词区分各自适用场景。

动手练习

做一个属于你工作流的技能

练习 1:最小技能

  • 挑一个你经常重复的专业任务(代码审查、文档生成、日志分析)
  • 在 ~/.qoder/skills/ 下创建目录和 SKILL.md
  • 写好 name + description + 核心指令

练习 2:测试自动触发

  • 用 /skills reload 加载
  • 不用 / 命令,直接用自然语言描述需求
  • 观察 AI 是否自动调用了你的技能
  • 没命中?回头改 description

练习 3:升级为多文件

  • 给技能加一个 REFERENCE.md 详细文档
  • 在 SKILL.md 里用 [REFERENCE.md] 引用
  • 体会渐进式披露的省 token 效果

本章回顾

带走的三个核心认知

Skill 是专家手册

把专业流程 + 领域知识打包,AI 匹配场景时自动变专家。

description 决定命运

功能 + 时机 + 关键词三要素,写得好自动触发才准。

多文件渐进披露

复杂技能分文件组织,按需加载,又快又省。

核心结论:Skill 让 AI 从"通用助手"升级为"领域专家团队"。你写的每一个 SKILL.md,都是把个人经验沉淀为可复用资产。

下一章,我们让 AI 学会"分工"——用子代理把不同任务委派给不同角色。

延伸阅读

继续本课程

官方资源