1. 项目概述:构建自动化技能生成器的实践
这个项目本质上是一个"元技能"——一个能够自动生成其他技能的技能。作为一名长期从事AI工具开发的工程师,我一直在寻找将个人专业知识转化为可复用组织资产的方法。skill-creator正是这样一个解决方案:它允许用户通过简单的功能描述、使用场景和示例用法,自动生成完整的Skill说明文档和相关配套内容。
这种"套娃式"设计(用技能来创建技能)不仅展示了技能创建的全过程,更深入体现了模块化设计的核心理念。在实际工作中,我们经常需要为不同业务场景创建各种专用技能,而手动编写每个技能的文档和资源既耗时又容易出错。skill-creator通过标准化流程解决了这个问题,使技能创建过程变得高效且一致。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技能系统的设计理念解析
2.1 技能的本质与价值定位
技能本质上是一种模块化的能力封装,它将专业知识、工作流程和工具集成打包成可复用的单元。在我的实践中,技能系统主要解决三个关键问题:
- 知识沉淀:将个人或团队的专有知识转化为结构化、可传承的组织资产
- 流程标准化:确保复杂工作流能够以一致的方式执行,减少人为错误
- 工具集成:为特定任务提供即插即用的工具支持,避免重复造轮子
一个设计良好的技能应该像一本精炼的"入职指南",能够让AI助手快速掌握某个特定领域的专业能力。例如,我们团队开发的财务分析技能,包含了公司特有的报表模板、数据清洗规则和分析模型,新成员无需长时间培训就能产出符合要求的分析报告。
2.2 技能系统的架构原则
在设计skill-creator时,我遵循了几个核心架构原则:
简洁至上原则:每个技能只包含必要信息。在实践中,我们会严格评估每条信息的必要性——"Claude真的需要这个说明吗?"、"这段内容的token成本值得吗?"。例如,在创建PDF处理技能时,我们移除了所有基础概念解释,只保留具体的操作指令和参数说明。
自由度匹配原则:根据任务特性调整指令的具体程度。我将任务分为三类:
- 高自由度任务:提供基于文本的原则性指导(如创意写作)
- 中等自由度任务:提供带参数的伪代码或脚本框架(如数据分析)
- 低自由度任务:提供具体可执行的脚本(如系统配置)
渐进式加载设计:采用三级加载系统优化资源使用:
- 元数据(名称+描述):始终加载(约100token)
- SKILL.md主体内容:触发时加载(<5000token)
- 捆绑资源:按需加载(无硬性限制)
3. 技能的核心组件与实现细节
3.1 技能目录结构规范
每个技能都遵循标准化的目录结构,这是多年实践总结出的最佳方案:
code复制skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter metadata (required)
│ └── Markdown instructions (required)
└── Bundled Resources (optional)
├── scripts/ - 可执行代码(Python/Bash等)
├── references/ - 参考文档
└── assets/ - 输出用资源文件
关键设计决策:
- 将scripts、references和assets分离,避免资源混用
- 禁止README等辅助文档,保持专注
- 采用Markdown+YAML组合,兼顾可读性和机器可处理性
3.2 SKILL.md文件编写规范
3.2.1 元数据部分
元数据是技能的门面,需要精心设计。以docx处理技能为例:
yaml复制name: docx-processor
description: |
专业的.docx文档处理功能,包括:
(1) 创建符合公司模板的新文档
(2) 批量修改文档内容与格式
(3) 处理修订记录和批注
(4) 提取文档元数据和文本内容
当需要处理MS Word文档时使用此技能。
经验之谈:
- 名称要简短具代表性
- 描述要列举具体功能和使用场景
- 避免使用模糊的术语
- 将"何时使用"的信息全部放在描述中
3.2.2 主体内容编写
主体内容采用"倒金字塔"结构:先给结论,再提供细节。例如在数据分析技能中:
code复制## 数据清洗步骤
1. 运行`clean_data.py`脚本处理原始数据
- 参数说明:`--input`指定源文件,`--output`指定输出位置
- 示例:`python scripts/clean_data.py --input raw.csv --output cleaned.csv`
> 注意:确保输入文件为UTF-8编码,否则需先运行`convert_encoding.py`
详细的数据清洗规则见references/data_cleaning.md
最佳实践:
- 使用祈使句/不定式形式
- 复杂流程分步骤说明
- 关键参数提供示例
- 注意事项用引用块突出
- 详细内容移入references
3.3 资源文件管理策略
3.3.1 scripts目录使用规范
脚本应该具有以下特点:
- 单一职责:每个脚本只做一件事
- 参数化设计:通过命令行参数控制行为
- 充分测试:确保在各种情况下可靠运行
例如,我们的PDF旋转脚本:
python复制# scripts/rotate_pdf.py
import PyPDF2
import argparse
def rotate_pdf(input_path, output_path, degrees):
with open(input_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
writer = PyPDF2.PdfWriter()
for page in reader.pages:
page.rotate(degrees)
writer.add_page(page)
with open(output_path, 'wb') as output_file:
writer.write(output_file)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--input', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--degrees', type=int, default=90)
args = parser.parse_args()
rotate_pdf(args.input, args.output, args.degrees)
3.3.2 references目录管理技巧
参考资料管理的关键点:
- 按主题分文件存储
- 大文件添加搜索模式
- 保持内容更新及时
例如数据库技能可能包含:
- references/schema.md:数据库表结构
- references/query_examples.md:常用查询示例
- references/performance.md:性能优化指南
3.3.3 assets目录使用场景
资源文件典型用例:
- 报告模板(Word/PPT)
- 品牌素材(logo、字体)
- 前端脚手架代码
- 标准合同模板
4. skill-creator的实现过程
4.1 需求分析与设计
skill-creator需要解决的核心问题:
- 如何将模糊的需求转化为结构化技能
- 如何自动生成符合规范的技能文档
- 如何组织相关资源文件
解决方案架构:
- 使用模板引擎生成SKILL.md
- 通过对话收集技能信息
- 自动创建标准目录结构
- 生成基础脚本和资源文件
4.2 核心实现代码
skill-creator的核心是一个Python脚本,主要功能包括:
python复制# skill_creator.py
import yaml
from jinja2 import Template
import os
from datetime import datetime
SKILL_TEMPLATE = """---
name: {{ name }}
description: {{ description }}
---
# {{ name }} 使用指南
## 功能概述
{{ functionality }}
## 使用场景
{% for scenario in scenarios %}
- {{ scenario }}
{% endfor %}
## 基础用法示例
```bash
{{ basic_usage }}
注意事项:{{ notes }}
"""
def create_skill(skill_info, output_dir):
# 创建目录结构
os.makedirs(os.path.join(output_dir, 'scripts'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'references'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'assets'), exist_ok=True)
# 渲染SKILL.md
template = Template(SKILL_TEMPLATE)
content = template.render(**skill_info)
# 写入文件
with open(os.path.join(output_dir, 'SKILL.md'), 'w') as f:
f.write(content)
# 创建示例脚本
if skill_info.get('create_sample_script'):
with open(os.path.join(output_dir, 'scripts', 'sample.py'), 'w') as f:
f.write("# 示例脚本\n")
print(f"技能 {skill_info['name']} 已创建于 {output_dir}")
code复制
### 4.3 使用示例
创建PDF处理技能:
```python
skill_info = {
"name": "pdf-processor",
"description": "提供PDF文档的创建、编辑和转换功能",
"functionality": "支持PDF合并、拆分、旋转、加密解密等操作",
"scenarios": [
"需要批量处理PDF文档时",
"需要将多个PDF合并为一个时",
"需要调整PDF页面方向时"
],
"basic_usage": "python scripts/process_pdf.py --input file.pdf --output result.pdf",
"notes": "输入文件必须是有效的PDF格式",
"create_sample_script": True
}
create_skill(skill_info, "output/pdf-processor")
5. 技能开发的最佳实践与避坑指南
5.1 常见问题解决方案
问题1:技能过于庞大
- 症状:SKILL.md超过500行,加载缓慢
- 解决方案:将详细内容拆分为references文件
- 示例:将API参考文档移到references/api.md
问题2:技能触发不准确
- 症状:在不相关场景下激活技能
- 解决方案:优化description字段,明确使用边界
- 示例:添加"仅在...时使用"的限定语句
问题3:脚本执行失败
- 症状:生成的脚本在某些环境无法运行
- 解决方案:添加环境检查代码
- 示例:在脚本开头验证Python版本和依赖包
5.2 性能优化技巧
-
上下文管理:
- 将不常用的参考文档设为按需加载
- 对大文件添加grep搜索模式
- 使用脚本代替冗长的说明
-
资源复用:
- 创建基础技能作为父类
- 通过技能组合实现复杂功能
- 共享常用工具脚本
-
缓存策略:
- 对频繁使用的数据建立缓存
- 实现增量更新机制
- 对稳定内容进行预编译
5.3 版本控制策略
-
目录命名规范:
- 主版本:skill-name/v1/
- 次要版本:skill-name/v1.2/
- 开发版本:skill-name/dev/
-
变更记录:
- 在SKILL.md顶部添加简版变更说明
- 详细变更历史存入references/changelog.md
-
兼容性处理:
- 重大变更维护并行版本
- 提供迁移指南
- 弃用旧功能时给出明确提示
6. 技能生态的扩展思考
6.1 技能组合模式
通过技能组合可以构建更复杂的能力:
- 管道模式:将多个技能串联使用
示例:数据采集 → 清洗 → 分析 → 可视化 - 混合模式:同时应用多个技能
示例:文档编写技能 + 格式检查技能 - 条件模式:根据上下文动态选择技能
6.2 技能质量评估体系
建立技能质量评估指标:
- 使用效率:激活准确率、执行成功率
- 资源占用:上下文使用量、执行时间
- 维护成本:变更频率、依赖复杂度
- 用户反馈:满意度评分、改进建议
6.3 技能生命周期管理
完整的技能生命周期包含:
- 规划阶段:需求分析、原型设计
- 开发阶段:实现、测试、文档
- 部署阶段:发布、培训、推广
- 运营阶段:监控、维护、优化
- 退役阶段:归档、替代方案
在实际项目中,我们会为每个技能建立生命周期卡片,跟踪各阶段状态和指标。例如,财务报告生成技能当前处于"运营阶段",上月使用次数为247次,平均执行时间1.2分钟,用户满意度4.8/5.0。
