第 8 课:Skills(上)— 结构与本质

9 阅读8分钟

所属阶段:第二阶段「组件精讲」(第 4-14 课) 前置条件:第 7 课 本课收获:掌握 Skill 标准结构,理解 Skill 与传统文档的本质差异


一、本课概述

Agent 是执行者,Skill 是知识库。Agent 告诉 AI "做什么",Skill 告诉 AI "怎么做"。

本课回答三个问题:

  1. Skill 的本质是什么? — 不是文档,是 AI 可执行的知识模块
  2. Skill 的标准结构是什么? — 四段式:When to Use、How It Works、Examples、Anti-Patterns
  3. Skill 放在哪里? — 仓库内精选 vs 用户目录生成,两个位置有本质区别

二、Skill 的本质:给 AI 执行的知识

2.1 传统文档 vs Skill

很多人第一次看 Skill 文件会觉得"这不就是文档吗?"。表面上看确实像文档,但设计目标完全不同。

对比维度传统文档ECC Skill
受众人类开发者AI 编程助手
风格解释性、循序渐进指令性、条件触发
触发方式人主动查阅系统根据 description 自动匹配加载
效果人读完后理解概念AI 加载后直接按流程执行
长度可以很长(教程)严格控制(<500 行,800 行上限)
示例教学目的,可以简化必须可复制粘贴,能直接使用
反模式可选必须有 — 防止 AI 犯已知错误

2.2 一个关键洞察

传统文档写给不知道答案的人,帮助他们理解。

Skill 写给已经有能力但缺少上下文的 AI,帮助它在特定场景下做出正确决策。

类比

  • 传统文档 = 教科书(从零教起)
  • Skill = 飞行检查清单(飞行员已经会开飞机,清单确保不遗漏关键步骤)

2.3 为什么 AI 需要 Skill

大语言模型有训练数据,已经"知道"很多编程知识。但它有三个固有缺陷:

  1. 知识截止 — 训练数据有截止日期,不知道最新的最佳实践
  2. 无项目上下文 — 不知道你团队的编码规范和架构约定
  3. 无优先级 — 知道 100 种做法,但不知道在当前场景下哪种最合适

Skill 解决的就是这三个问题:提供最新实践、注入项目上下文、建立优先级。


三、Skill 标准四段式结构

3.1 结构总览

---
name: your-skill-name
description: 一句话描述,系统自动发现和加载的唯一依据
origin: ECC
---

# 标题

简短概述。

## When to Activate(触发条件)
描述何时应该使用此 Skill。

## Core Concepts / How It Works(工作原理)
核心概念和工作流。

## Code Examples(示例)
可直接使用的代码示例。

## Anti-Patterns(常见错误)
展示不应该怎么做。

3.2 各段详解

第一段:When to Activate(触发条件)

这是 Skill 与传统文档最大的区别。传统文档没有"触发条件"这个概念 — 人自己决定什么时候看。

Skill 的触发条件告诉系统在什么场景下自动加载这个 Skill

## When to Activate

- Starting a new project or module
- Reviewing code for quality and maintainability
- Refactoring existing code to follow conventions
- Setting up linting, formatting, or type-checking rules

设计要点

  • 用动词开头(Starting、Reviewing、Refactoring)
  • 描述场景,不是描述 Skill 内容
  • 既不能太宽(所有场景都触发 = 噪音),也不能太窄(没有场景触发 = 废物)

第二段:How It Works(工作原理)

核心知识内容。与传统文档不同,这里不需要从基础概念讲起,直接给出可操作的指导

## Code Quality Principles

### 1. Readability First
- Code is read more than written
- Clear variable and function names
- Self-documenting code preferred over comments

### 2. KISS (Keep It Simple, Stupid)
- Simplest solution that works
- Avoid over-engineering

第三段:Examples(示例)

示例必须满足两个条件:

  1. 可直接复制粘贴 — 不是教学用的伪代码
  2. 展示对比 — 同时给出好的和差的做法
## Code Examples

// BAD: Deep nesting + mutation
function processUsers(users) {
  if (users) {
    for (const user of users) {
      if (user.active) {
        user.verified = true;  // mutation!
      }
    }
  }
}

// GOOD: Early returns + immutability
function processUsers(users) {
  if (!users) return [];
  return users
    .filter(user => user.active)
    .map(user => ({ ...user, verified: true }));
}

第四段:Anti-Patterns(常见错误)

这是 Skill 的防御层。AI 模型会犯一些反复出现的错误,Anti-Patterns 段就是针对这些已知陷阱的"疫苗"。

## Anti-Patterns

- Testing implementation details instead of behavior
- Tests depending on each other (shared state)
- Asserting too little (passing tests that don't verify anything)
- Not mocking external dependencies

四、frontmatter 字段详解

4.1 三个字段

---
name: coding-standards
description: Baseline cross-project coding conventions for naming,
  readability, immutability, and code-quality review.
origin: ECC
---
字段作用注意事项
nameSkill 的唯一标识小写加连字符,与目录名一致
description系统自动发现和加载的唯一依据最关键的一行
origin来源标记ECC 表示官方精选

4.2 description 字段的重要性

description 是整个 Skill 中最关键的一行。 为什么?

系统加载 Skill 的流程:

用户发出请求
    │
    ▼
系统扫描所有 Skill 的 description
    │
    ▼
匹配度最高的 Skill 被加载到上下文
    │
    ▼
AI 按照 Skill 内容执行

description 就是 Skill 的"搜索关键词"。如果 description 写得不好:

问题表现后果
太泛"帮助写出更好的代码"几乎所有场景都匹配 → 噪音
太窄"React 18 useEffect cleanup in StrictMode"极少场景匹配 → 被埋没
不精确"代码审查"和 code-reviewer Agent 冲突

好的 description 示例

# 好:精确描述覆盖范围,包含关键词
description: Baseline cross-project coding conventions for naming,
  readability, immutability, and code-quality review. Use detailed
  frontend or backend skills for framework-specific patterns.

# 好:明确说明不做什么,减少误触发
description: Test-Driven Development workflow enforcing RED-GREEN-REFACTOR
  cycle. Not for test debugging  use tdd-troubleshooting instead.

五、Skill 放置策略

5.1 两个放置位置

ECC 的 Skill 有两个放置位置,它们的性质完全不同:

位置路径性质来源
仓库内精选skills/经过审查的高质量 Skill社区贡献 + 维护者审核
用户目录~/.claude/skills/个人/团队 Skill自动生成或手动导入

5.2 两者的关系

skills/                        ~/.claude/skills/
(仓库内,版本控制)             (用户目录,个人使用)

 ┌──────────────┐              ┌──────────────┐
 │ 精选 Skill    │   手动复制   │ 个人 Skill    │
 │ 社区审核      │ ──────────→ │ 项目特定      │
 │ PR 合并流程   │              │ 自动生成      │
 └──────────────┘              └──────────────┘

  不自动同步!

关键点:两个目录不自动同步。如果你在 skills/ 中更新了一个 Skill,~/.claude/skills/ 中的旧版本不会自动更新。

5.3 什么放哪里

场景放置位置原因
通用最佳实践(如 TDD 工作流)skills/社区共享,需要审核质量
团队特定编码规范~/.claude/skills/项目相关,不需要社区审核
/learn 命令自动提取的模式~/.claude/skills/自动生成,个人使用
/skill-create 从 git 历史生成的~/.claude/skills/项目特定知识

六、质量清单

根据 CONTRIBUTING.md 的要求,一个合格的 Skill 必须满足以下条件:

6.1 必须满足

  • 聚焦单一领域 — 一个 Skill 解决一类问题,不要大杂烩
  • description 精确 — 能被正确触发,不误触发
  • 有 "When to Activate" 段 — 明确触发场景
  • 有实际可用的代码示例 — 可复制粘贴
  • 有 Anti-Patterns — 展示不该怎么做
  • <500 行(800 行绝对上限)
  • 无敏感信息 — 没有 API Key、私有路径

6.2 加分项

  • 引用相关 Skill(Related Skills 段)
  • 说明与哪些 Agent 配合使用
  • 说明 Skill 的边界(什么不在范围内)

6.3 Skill 过长怎么办

如果一个 Skill 超过 500 行,通常说明它试图覆盖太多内容。正确做法:

# 差:一个 1200 行的 "fullstack-patterns" Skill

# 好:拆成三个独立 Skill
frontend-patterns/SKILL.md    (300 行)
backend-patterns/SKILL.md     (350 行)
api-design/SKILL.md            (250 行)

七、本课练习

练习 1:阅读 3 个 Skill,提取共性(15 分钟)

分别打开以下三个 Skill,对比它们的结构:

cat skills/coding-standards/SKILL.md
cat skills/tdd-workflow/SKILL.md
cat skills/security-review/SKILL.md

回答问题:

  • 三个 Skill 都有哪些共同段落?
  • description 字段的写法有什么共同特点?
  • Anti-Patterns 段的内容风格是什么?(提示:都是"不要做 X"的负面指令)

练习 2:评价 description 质量(10 分钟)

判断以下 description 的质量(好/差/需改进),并说明理由:

  1. description: "帮助开发者写出更好的代码"
  2. description: "Django ORM query optimization patterns including select_related, prefetch_related, and annotate for N+1 prevention"
  3. description: "代码"
  4. description: "Baseline cross-project coding conventions for naming, readability, immutability, and code-quality review. Use detailed frontend or backend skills for framework-specific patterns."

练习 3:设计 Skill 的 description(10 分钟)

为以下假想 Skill 各写一个 description(1-2 句话):

  1. 一个关于 PostgreSQL 索引优化的 Skill
  2. 一个关于 React Server Components 的 Skill
  3. 一个关于 Git rebase 工作流的 Skill

练习 4(选做):Skill vs Agent 边界思考

假设你要提升团队的代码审查质量。应该写一个 Skill 还是创建一个 Agent?为什么?

提示:如果需要执行动作(读 git diff、搜索代码)→ Agent。如果只需要提供知识(审查清单、最佳实践)→ Skill。实际上 ECC 两者都有:code-reviewer Agent 加载 coding-standards Skill。


八、本课小结

你应该记住的内容
Skill 的本质给 AI 执行的知识模块,不是给人看的文档
四段式结构When to Activate → How It Works → Examples → Anti-Patterns
description整个 Skill 最关键的一行,决定能否被正确触发
放置位置skills/(精选)vs ~/.claude/skills/(个人),不自动同步
质量标准聚焦单一领域、<500 行、有示例、有反模式

九、下节预告

第 9 课:Skills(下)— 编程 Skill 地图与编写实战

下节课我们将纵览 ECC 全部 286 个 Skill 中与编程/架构相关的 85 个 Skill 的分布地图,然后动手编写一个完整的 Skill。你将了解从核心开发到前端、后端、测试、DevOps、AI/Agent 的完整技能覆盖。

预习建议:浏览 skills/ 目录,数一下有多少个子目录。随机打开 3-5 个 Skill 感受一下内容深度。