Skip to content

5.2 七种反模式——别这样写技能包

📋 多工具适用说明

本节的反模式是通用概念,适用于所有 AI 编程工具:

  • 太长、太模糊、过度授权、过度自动触发——所有工具的常见错误
  • 示例以 Claude Code 语法展示,但问题本质是通用的

引言

小王写了一个 200 行的技能包,涵盖代码审查的所有维度:安全性、性能、可维护性、测试覆盖……他觉得写得很全面。

结果:AI 加载这个技能包后表现反而变差了——它开始在不相关的问题上浪费 token,审查结果越来越泛泛。

写得多的技能包不如写得好的技能包。 以下是七种最常见的错误写法。


反模式一:技能包太长

症状:主文件超过 200 行(警告线),或超过 500 行(硬上限)

为什么有害:技能包加载后内容留在上下文中,每行都是持续的 token 开销。自动压缩后只保留前 5000 token。

反面示例:一个 190 行的"代码解释"技能包,16 个章节,6 种语言的考虑

行数标准

  • 推荐:50-150 行(甜蜜区)
  • 警告线:200 行(超过就该拆分)
  • 硬上限:500 行(可接受但需重构)

正确做法:拆分为多个小技能包,详细内容移到辅助文件(Claude Code 用 references/


反模式二:流程性指令放在项目指令文件

症状:项目指令文件里有"部署步骤"、"审查清单"等流程内容

为什么有害:项目指令文件每次会话、每轮请求都加载。偶尔才用的流程在 90% 的时间里浪费 token

判断标准:如果项目指令文件的某段从"是什么"变成了"怎么做",就是技能包的信号

正确做法:项目指令文件保持 200 行以内,流程内容移到技能包


反模式三:过度使用动态注入

症状:一个技能包用了 4+ 个 !command``

为什么有害:每个命令在调用时执行,增加延迟。大输出消耗 token

正确做法:只在 Claude 绝对需要实时数据时使用。能让 Claude 按需读取的文件,不要预处理注入


反模式四:技能包太通用

症状description: "全面的代码质量审查",内容适用于任何项目

为什么有害:通用技能包缺乏项目特定上下文,给 AI 没有护栏。而且通用技能包通常太长(见反模式一)

反面示例

yaml
description: 全面的代码质量审查
# 30 行通用建议,任何项目都适用 = 任何项目都不够好

正面示例(React 的 /verify):

yaml
description: 提交前验证变更
# 精确的 yarn 命令、明确的项目约定

正确做法:技能包应该特定于你的项目——引用精确命令、文件路径和约定


反模式五:描述太模糊

症状description: "帮助审查代码"

为什么有害:AI 用 description 判断何时自动触发(Claude Code 和 Windsurf 有此机制,Cursor 需手动触发)。模糊 = 不触发 = 技能包等于不存在

改进对比

描述效果
"帮助审查代码"Claude 不确定何时用,很少触发
"审查 PR 的代码质量、安全性和性能。当说'审查'、'review'、'帮我看看这个 PR'时使用"精准匹配

正确做法:前置关键用例,包含触发短语,可以"pushy"一点


反模式六:有副作用的技能包缺少手动控制(Claude Code 示例)

症状:部署技能包没有 disable-model-invocation: true

为什么有害:Claude 可能觉得"代码看起来准备好了"就自动部署

正确做法:deploy、commit、send-message 等有副作用的技能包必须设 disable-model-invocation: true(Claude Code),其他工具确保关键操作需用户确认


反模式七:指南型技能包使用隔离执行(Claude Code 示例)

症状

yaml
name: api-conventions
context: fork
agent: Explore
---
使用 REST API 时遵循以下约定……

为什么有害:fork 的子代理需要可执行的任务。只给指南没有任务,子代理返回空结果

正确做法:指南型技能包用 inline 模式(默认),或设 user-invocable: false 让 Claude 自动加载为背景知识


反模式速查

反模式核心问题一句话修复
技能包太长Token 浪费 + 遵从度下降拆分 + 移到辅助文件
流程在项目指令文件全量加载不经济提取为技能包
过度注入延迟 + Token 浪费只注入必需数据
技能包太通用无护栏 + 通常太长写项目特定的技能包
描述太模糊等于不存在加触发短语
副作用无保护自动部署风险加手动控制机制
指南用隔离执行子代理返回空用 inline 或 user-invocable: false

本节小结

📌 本节核心要点

  • 七种反模式都比"不会写"更危险——因为看起来"写对了"
  • 核心原则:简洁 > 全面、特定 > 通用、明确 > 模糊
  • 最致命的反模式:有副作用技能包没有手动控制
  • 最常见的反模式:技能包太长和描述太模糊

思考题

  1. 检查你写过的技能包,有没有踩中这些反模式?最常见的是哪个?
  2. "技能包太通用"和"技能包太长"经常一起出现,为什么?
  3. 你怎么判断一个技能包是"太通用"还是"恰好足够通用"(比如可以在多个项目中复用)?

下一节预告

理论够了,看真实项目怎么做的。下一节深入React、Anthropic 和 llm-wiki 三个项目的技能包设计——从他们的成功和失败中学习。

下一节:真实案例研究——React、Anthropic、llm-wiki