简介:技能包正成为AI编程助手中流行的程序性知识封装方式,但手写符合规范的技能文件并不容易。本文介绍一种自举式解法:把编写规范、模板与校验脚本本身封装成“元技能”,让AI辅助完成新技能的创建、检查与迭代,并覆盖触发描述写法、渐进式披露、校验闭环与团队治理等关键设计,帮你低成本沉淀可复用的任务方法论。
在前两篇文章中,我们讨论过如何与AI编程助手签订“项目契约”——在仓库根目录放置一份全局指令文件,约定技术栈、代码风格与协作规则;也演示过如何一行代码不写,仅靠对话完成一个项目框架的搭建。但对话式开发有一个天然短板:真正复杂的工作流程,靠临时组织的提示词很难每次都稳定复现。
于是,“技能包”开始流行。所谓技能包,是一套标准化的程序性知识封装格式:它把完成某类任务所需的指令、脚本、参考文档与模板,组织在固定的目录结构里,AI Agent可以在运行时自动发现并按需加载这些内容。同一时期业界推动的模型外部工具接入协议,走的也是类似路径——把“怎么做”从对话层面的口口相传,变成工程层面的可复用资产。
从实现上看,一个技能就是一个文件夹,其中必须包含一个说明文件(通常命名为SKILL.md),承载元数据与核心指令;此外还可以按需放入可选资源:
pdf-skill/├── SKILL.md # 技能元数据与核心指令(必需)├── forms.md # 表单填写指南(可选)├── reference.md # 详细参考文档(可选)└── scripts/ # 实用脚本(可选)└── extract_fields.py
SKILL.md一般由两部分构成:头部是YAML形式的元数据,核心是name(技能标识)与description(触发描述);正文则是面向AI的执行指令,说明在什么场景下、按什么步骤、产出什么结果。
工作机制可以概括为三步:
这就是“渐进式披露”:元数据常驻上下文,细节按需展开。直接收益有两方面——输出更稳定(AI每次都按同一套流程办事),上下文更节省(不相关的技能不占用注意力)。此前我们在项目中使用“头脑风暴”类技能完成需求采访与执行规划,本质上就是这套机制在发挥作用。
听起来只要写一份Markdown就行,但要写出让AI“该用时必用、不该用不误用”的技能,门槛并不低:
这些痛点指向一个有趣的观察:“如何编写一个规范的技能包”本身,恰恰是一套有明确步骤、固定产出和客观校验标准的程序性知识。而程序性知识,正是技能包最擅长封装的东西。于是答案呼之欲出——用技能来写技能。
这种“自举”思路并不新鲜:编译器可以用自己编译自己,代码生成器可以生成代码生成器。落地到技能体系,就是设计一个“技能创建”元技能:它的职责不是完成业务任务,而是辅助开发者创建新的技能包。
一个可参考的元技能目录结构如下:
skill-creator/├── SKILL.md # 元技能的工作流程指令├── reference.md # 技能编写规范速查├── templates/│ └── skill_template.md # 新技能骨架模板└── scripts/└── validate_skill.py # 结构校验脚本
它的SKILL.md头部大致是:
---name: skill-creatordescription: 当用户需要新建、修改或检查技能包时使用;指导完成符合规范的SKILL.md编写、目录组织与结构校验。---
正文则定义固定工作流:先采访需求,再确定技能边界,随后基于模板生成骨架并填充内容,最后执行校验并给出改进建议。配套的骨架模板形如:
---name: {{skill_name}}description: 当{{触发场景}}时使用;本技能负责{{任务边界}}。---# {{技能名}}## 适用场景(何时使用、何时不使用)## 执行步骤1. ...2. ...## 输出要求(格式、示例、验收标准)## 依赖资源- reference.md:详细规范- scripts/xxx.py:自动化脚本
校验脚本负责把“规范”从口头约定变成机器检查,示意如下:
import re, sys, pathlibimport yamlREQUIRED_KEYS = ["name", "description"]def validate(skill_dir: str) -> list:root = pathlib.Path(skill_dir)skill_md = root / "SKILL.md"problems = []if not skill_md.exists():return [f"缺少必需文件: {skill_md}"]text = skill_md.read_text(encoding="utf-8")m = re.match(r"^---\s*\n(.*?)\n---\s*\n", text, re.S)if not m:return ["缺少合法的 YAML frontmatter"]meta = yaml.safe_load(m.group(1)) or {}for key in REQUIRED_KEYS:if not str(meta.get(key, "")).strip():problems.append(f"元数据字段缺失或为空: {key}")for ref in re.findall(r"(?:scripts/|templates/)[\w\-.]+|reference\.md", text):if not (root / ref).exists():problems.append(f"正文引用的资源不存在: {ref}")return problemsif __name__ == "__main__":issues = validate(sys.argv[1])print("\n".join(issues) if issues else "校验通过")
这套组合拳的效果是:开发者只需用自然语言描述“我想要一个什么技能”,元技能就会完成采访、起草、格式校验与自查,把过去依赖个人经验的写作过程,变成一条标准化的生产流水线。
以“帮我做一个代码评审技能”为例,元技能的介入过程大致是:
元技能的价值不止于个人提效。对团队而言,它天然是一份“活的规范”:所有人通过同一个元技能创建技能,产出的技能在结构、命名、质量基线上自动对齐。再辅以三项治理手段——维护技能目录索引、约定废弃流程、为每个技能保留典型任务样例用于回归验证——技能库就能像代码库一样被长期经营。
同时要划清职责边界:项目契约文件负责全局约定(技术栈、代码风格、禁区),技能包负责具体任务的标准作业流程,两者互补而非替代。无论你使用的是本地部署的AI编程助手,还是接入百度智能云等云上模型服务的智能编程工具,这套方法论都同样适用。
技能包解决的是“让AI稳定地做好一类事”,而元技能解决的是“让做好这件事的门槛足够低”。用技能来写技能,本质上是用工程手段复制工程能力。建议的推进节奏是:先手写一两个技能,把规范真正吃透;再把这些经验沉淀成元技能;此后便可批量地把团队里重复出现的任务方法论固化为技能资产,让AI编程助手的能力边界随业务一起生长。