从零开始:打造一个生产级 OpenClaw Skill
本文详细记录了如何从零开始创建一个完整的 OpenClaw Skill,包括设计、开发、测试和发布的全过程。
🎯 项目背景
在学习 OpenClaw Skills 开发时,我发现缺少一个完整、实用、易学的教学项目。市面上的示例要么过于简单(只有一个 SKILL.md),要么过于复杂(如 M7 股票分析)。
因此,我决定创建一个中等复杂度的 Skill 项目——技术博客写作助手,它具备:
- ✅ 完整的目录结构(符合标准模板)
- ✅ 实用的功能(质量检测 + 标题生成)
- ✅ 清晰的代码(易于理解和扩展)
- ✅ 详细的文档(从设计到使用)
最终成果:
- 📦 GitHub 仓库: https://github.com/cloudzun/tech-blog-writer
- 📝 代码行数: ~1,200行
- 📚 文档字数: ~15,000字
- ⏱️ 开发时间: 2小时
📋 需求分析
核心功能
-
智能写作流程
- 需求分析 → 内容创作 → 质量检测 → 优化改进
-
质量检测系统
- 技术准确性(30分)
- 可读性(25分)
- 实用性(25分)
- 结构完整性(20分)
-
标题生成器
- 教程型标题
- 原理型标题
- 实战型标题
-
模板系统
- 标准化的文章结构
技术选型
| 组件 | 技术选择 | 理由 |
|---|---|---|
| 核心定义 | SKILL.md (YAML + Markdown) | OpenClaw 2.10+ 标准 |
| 脚本语言 | Python 3.8+ | 生态丰富、易读易写 |
| 配置格式 | JSON | 简单易用、易于解析 |
| 模板格式 | Markdown | 通用格式、易于编辑 |
🏗️ 项目架构设计
目录结构
tech-blog-writer/
├── SKILL.md # [必需] 核心定义文件
├── README.md # 项目说明
├── LICENSE # MIT 许可证
├── .gitignore # Git 忽略文件
│
├── scripts/ # 工具脚本
│ ├── quality_checker.py # 质量检测器
│ └── title_generator.py # 标题生成器
│
├── templates/ # 文章模板
│ └── tutorial-template.md # 教程模板
│
├── config/ # 配置文件
│ └── settings.json # 运行时配置
│
├── docs/ # 文档
│ └── design.md # 设计文档
│
└── data/ # 数据文件
└── examples.json # 示例数据
数据流设计
用户输入
│
▼
需求分析(SKILL.md)
│
▼
内容创作(SKILL.md + templates/)
│
▼
质量检测(scripts/quality_checker.py)
│
├──► 通过(≥70分)
│ └──► 输出最终文章
│
└──► 不通过(<70分)
└──► 返回修改建议 → 重新创作
💻 开发过程
步骤1:创建目录结构
# 创建项目目录
mkdir -p tech-blog-writer/{scripts,templates,config,docs,data}
cd tech-blog-writer
步骤2:编写 SKILL.md
这是 Skill 的核心文件,包含两部分:
2.1 YAML Frontmatter(元数据)
---
name: tech-blog-writer
description: 当用户提到"写技术博客"、"技术文章"、"教程"或"技术写作"时,自动激活技术博客写作助手系统
---
关键点:
name: 必须与目录名一致,使用小写 + 连字符description: 清晰描述触发场景,AI 用此判断是否激活
2.2 Markdown Body(详细指令)
# 技术博客写作助手 V1.0
## 版本历史
### V1.0.0 (2026-02-22)
- 初始版本
## 一、角色定义
你是一位经验丰富的技术博客作者...
## 二、核心能力
1. 文章结构设计
2. 技术深度把控
3. 代码示例质量
4. 质量检测
## 三、工作流程
### 步骤1:需求分析
### 步骤2:内容创作
### 步骤3:质量检测
### 步骤4:优化改进
## 四、规则约束
### 必须遵守
### 禁止事项
## 五、示例展示
### ✅ 好的示例
### ❌ 差的示例
## 六、输出格式
## 七、工具调用
## 八、配置文件
设计要点:
- 使用清晰的章节结构(## 一、二、三…)
- 提供好/坏示例对比
- 说明工具调用方式
- 记录版本历史
步骤3:开发质量检测器
创建 scripts/quality_checker.py:
3.1 核心类设计
class QualityChecker:
"""技术博客质量检测器"""
def __init__(self):
self.max_scores = {
"accuracy": 30, # 技术准确性
"readability": 25, # 可读性
"practicality": 25, # 实用性
"structure": 20 # 结构完整性
}
def check(self, content: str) -> QualityReport:
"""检测文章质量"""
# 执行各维度检测
accuracy_score = self._check_accuracy(content)
readability_score = self._check_readability(content)
practicality_score = self._check_practicality(content)
structure_score = self._check_structure(content)
# 计算总分
total_score = sum([...])
# 生成建议
suggestions = self._generate_suggestions(...)
return QualityReport(...)
3.2 检测维度实现
技术准确性(30分):
def _check_accuracy(self, content: str) -> Tuple[int, Dict]:
score = 0
# 1. 是否有代码示例(10分)
code_blocks = re.findall(r'```[\s\S]*?```', content)
if code_blocks:
score += 10
# 2. 代码块是否指定语言(5分)
if all(re.match(r'```\w+', block) for block in code_blocks):
score += 5
# 3. 是否有版本号说明(5分)
if re.search(r'v?\d+\.\d+', content):
score += 5
# 4. 是否有输出示例(10分)
if any(word in content for word in ['输出', 'output', '结果']):
score += 10
return score, details
可读性(25分):
def _check_readability(self, content: str) -> Tuple[int, Dict]:
score = 0
# 1. 段落长度适中(10分)
paragraphs = content.split('\n\n')
avg_length = sum(len(p) for p in paragraphs) / len(paragraphs)
if 100 <= avg_length <= 500:
score += 10
# 2. 使用标题分层(10分)
h2_count = len(re.findall(r'^##\s', content, re.MULTILINE))
if h2_count >= 3:
score += 5
# 3. 使用列表(5分)
list_count = len(re.findall(r'^\s*[-*]\s', content, re.MULTILINE))
if list_count >= 5:
score += 5
return score, details
3.3 建议生成
def _generate_suggestions(self, dimensions: Dict) -> List[str]:
suggestions = []
# 技术准确性建议
if dimensions["accuracy"] < 20:
suggestions.append("建议添加代码示例以提高技术准确性")
suggestions.append("建议为所有代码块指定编程语言")
# 可读性建议
if dimensions["readability"] < 15:
suggestions.append("建议使用更多二级标题(##)组织内容")
# 总分建议
total = sum(dimensions.values())
if total < 70:
suggestions.insert(0, f"⚠️ 总分 {total} 分,低于合格线(70分)")
return suggestions
步骤4:开发标题生成器
创建 scripts/title_generator.py:
4.1 标题公式设计
class TitleGenerator:
def __init__(self):
self.formulas = {
"tutorial": {
"name": "教程型",
"pattern": "[时间] + [动作] + [技术] + [结果]",
"templates": [
"{time}搞懂 {tech} {aspect}",
"手把手教你 {action} {tech}",
]
},
"principle": {
"name": "原理型",
"pattern": "深入理解 [技术] 的 [核心概念]",
"templates": [
"深入理解 {tech} 的 {aspect}",
"{tech} 工作原理详解",
]
},
"practical": {
"name": "实战型",
"pattern": "[动作] + [技术] + [场景]",
"templates": [
"用 {tech} 实现 {scenario}",
"{tech} 实战:{scenario}",
]
}
}
4.2 标题评分算法
def _score_title(self, title: str) -> int:
score = 50 # 基础分
# 长度适中(15-30字)
if 15 <= len(title) <= 30:
score += 20
# 包含数字
if any(char.isdigit() for char in title):
score += 10
# 包含动作词
action_words = ['搞懂', '教你', '实现', '搭建']
if any(word in title for word in action_words):
score += 10
# 包含时间承诺
if any(word in title for word in ['分钟', '小时']):
score += 10
return min(score, 100)
步骤5:创建配置文件
config/settings.json:
{
"version": "1.0.0",
"preferences": {
"target_audience": "intermediate",
"article_length": "medium",
"code_language": "python",
"output_language": "chinese"
},
"quality_thresholds": {
"excellent": 85,
"good": 70,
"acceptable": 60
}
}
步骤6:创建模板文件
templates/tutorial-template.md:
# {title}
> **摘要**:{summary}
## 前置知识
- **需要了解**:{prerequisites}
- **环境要求**:{environment}
## 核心概念
### {concept_name}
{concept_explanation}
## 实战演练
### 步骤1:{step1_name}
```{language}
{step1_code}
常见问题
Q1:{question1}
A:{answer1}
总结
- {summary_point1}
- {summary_point2}
---
### 步骤7:编写文档
#### 7.1 README.md(项目说明)
包含:
- 项目简介
- 安装步骤
- 快速开始
- 使用指南
- 故障排查
- 贡献指南
#### 7.2 docs/design.md(设计文档)
包含:
- 设计目标
- 架构设计
- 模块设计
- 扩展性设计
- 测试策略
#### 7.3 data/examples.json(示例数据)
```json
{
"examples": [
{
"title": "5分钟搞懂 Docker 容器化部署",
"quality_score": 88,
"highlights": [
"清晰的类比(集装箱)",
"完整的代码示例"
]
}
]
}
🧪 测试验证
单元测试
# 测试质量检测器
cd scripts/
python3 quality_checker.py "# Docker教程
Docker是一个容器化平台。
## 安装
运行命令安装。" --json
输出:
{
"success": true,
"score": 10,
"dimensions": {
"accuracy": 0,
"readability": 5,
"practicality": 0,
"structure": 5
},
"suggestions": [
"⚠️ 总分 10 分,低于合格线(70分)",
"建议添加代码示例以提高技术准确性"
]
}
集成测试
在 Claude Code 中测试完整流程:
你:帮我写一篇 Docker 教程
AI:
1. [分析需求] 目标读者:初学者
2. [生成大纲] Docker 是什么 → 为什么需要 → 第一个容器
3. [创作文章] 应用教程模板
4. [质量检测] 调用 quality_checker.py
5. [输出文章] 最终版本
📦 发布到 GitHub
步骤1:初始化 Git 仓库
cd tech-blog-writer
git init
步骤2:创建 .gitignore
# Python
__pycache__/
*.py[cod]
*.so
# Virtual Environment
venv/
env/
# IDE
.vscode/
.idea/
# OS
.DS_Store
步骤3:创建 LICENSE
MIT License
Copyright (c) 2026 HuaQloud
...
步骤4:提交代码
git add -A
git commit -m "Initial commit: Tech Blog Writer Skill v1.0.0
Features:
- Complete Skill structure
- Quality checker with 4 dimensions
- Title generator with 3 formulas
- Template system
- Configuration-driven design"
步骤5:推送到 GitHub
# 使用 gh CLI 创建仓库并推送
gh repo create tech-blog-writer \
--public \
--source=. \
--description="A complete OpenClaw Skill for technical blog writing" \
--push
结果:
- 🔗 仓库地址: https://github.com/cloudzun/tech-blog-writer
- ✅ 10个文件
- ✅ 2,390行代码
- ✅ 完整文档
📊 项目统计
代码统计
| 文件 | 行数 | 说明 |
|---|---|---|
| SKILL.md | ~250 | 核心定义文件 |
| quality_checker.py | ~450 | 质量检测器 |
| title_generator.py | ~300 | 标题生成器 |
| README.md | ~200 | 项目文档 |
| design.md | ~150 | 设计文档 |
| 总计 | ~1,350 |
功能统计
- ✅ 4个质量检测维度
- ✅ 3种标题公式
- ✅ 15+个检测项
- ✅ 10+个建议类型
💡 经验总结
设计经验
-
从简单开始
- 先实现最小可用版本
- 逐步添加功能
- 避免过度设计
-
模块化设计
- 每个脚本单一职责
- 配置与代码分离
- 便于测试和扩展
-
文档优先
- 先写 README
- 再写代码
- 文档驱动开发
开发经验
-
使用标准结构
- 符合 OpenClaw Skills 规范
- 便于他人理解
- 易于维护
-
提供详细注释
- 每个函数都有 docstring
- 关键逻辑添加注释
- 便于学习和修改
-
完善的错误处理
- 验证输入
- 捕获异常
- 返回友好的错误信息
测试经验
-
单元测试优先
- 先测试单个脚本
- 确保基础功能正常
- 再进行集成测试
-
边界测试
- 空输入
- 超长输入
- 特殊字符
-
真实场景测试
- 在 Claude Code 中实际使用
- 收集反馈
- 持续优化
🚀 后续优化方向
功能增强
-
新增检测维度
- SEO 优化检测
- 可访问性检测
- 多语言支持
-
标题优化
- 更多标题公式
- AI 生成标题
- A/B 测试支持
-
模板扩展
- 原理解析模板
- 实战案例模板
- 对比分析模板
性能优化
-
缓存机制
- 缓存检测结果
- 避免重复计算
-
并行处理
- 多维度并行检测
- 提高检测速度
-
增量检测
- 只检测修改部分
- 提高响应速度
🎓 学习建议
新手学习路径
-
第1天:理解结构
- 阅读 README.md
- 查看 SKILL.md
- 运行脚本测试
-
第2天:分析代码
- 阅读 quality_checker.py
- 理解检测逻辑
- 尝试修改参数
-
第3天:扩展功能
- 新增检测项
- 修改评分标准
- 添加新的标题公式
进阶学习路径
-
优化算法
- 改进检测准确性
- 优化性能
- 添加机器学习
-
扩展功能
- 集成更多工具
- 支持更多语言
- 添加 Web 界面
-
发布分享
- 发布到 GitHub
- 编写教程
- 收集反馈
📚 参考资源
- OpenClaw 官方文档: https://docs.openclaw.ai
- Skills 定制指南: https://github.com/cloudzun/Claude-Code-Guide-Zh
- 项目源码: https://github.com/cloudzun/tech-blog-writer
🎉 总结
通过这个项目,我们学到了:
- ✅ 如何设计一个完整的 OpenClaw Skill
- ✅ 如何实现质量检测系统
- ✅ 如何开发标题生成器
- ✅ 如何编写清晰的文档
- ✅ 如何发布到 GitHub
关键要点:
- 从简单开始,逐步迭代
- 模块化设计,易于扩展
- 文档优先,便于学习
- 测试驱动,确保质量
项目地址:https://github.com/cloudzun/tech-blog-writer
欢迎 Star、Fork 和贡献! 🌟
作者: HuaQloud
发布日期: 2026-02-23
版本: 1.0.0
标签: #OpenClaw #Skill #Tutorial #Python #AI