OpenClaw 技能开发指南:构建自定义智能助手能力
Posted on Thu 09 April 2026 in 技术教程
9.构建自定义智能助手能力
引言
OpenClaw 的核心优势在于其可扩展的技能系统。通过技能开发,用户可以将特定的功能模块化,使 AI 助手能够执行从简单的文件操作到复杂的 API 集成等各种任务。本文作为 OpenClaw 系列教程的第九篇,将系统性地讲解技能开发的全过程,涵盖从基础概念到实战开发的完整知识体系。
1. 技能系统概述
1.1 什么是技能?
技能是 OpenClaw 的功能模块,每个技能对应一个特定的能力领域。OpenClaw 技能采用文档驱动设计,通过 SKILL.md 文件提供使用指导和最佳实践,而不是直接控制工具调用。
技能的核心作用: - 提供使用指南:告诉智能体何时使用特定功能 - 定义最佳实践:提供工具使用的正确方式和参数 - 设置使用边界:明确技能适用的场景和限制 - 提供示例代码:展示具体的命令行或工具调用示例
1.2 技能系统工作原理
OpenClaw 技能不是传统的插件系统,而是智能体的参考指南。其工作流程如下:
用户请求 → 智能体分析 → 匹配相关技能 → 参考 SKILL.md → 执行工具调用 → 返回结果
↓
提供指导而非控制
1.3 技能与工具的关系
技能为工具使用提供上下文指导,而不是直接调用工具。智能体根据技能文档的指导,决定是否以及如何使用工具:
天气技能 SKILL.md:
- 告诉智能体:当用户问天气时,可以使用 curl 查询 wttr.in
- 提供具体的 curl 命令格式
- 智能体参考这些信息,决定执行相应命令
2. 技能开发基础
2.1 技能文件结构
OpenClaw 技能通常是一个单独的 SKILL.md 文件,位于技能目录中。标准技能包含以下部分:
~/.npm-global/lib/node_modules/openclaw/skills/
├── skill-name/
│ └── SKILL.md # 核心技能文档
└── other-skill/
└── SKILL.md
2.2 SKILL.md 文件规范
SKILL.md 文件采用 Markdown 格式,通常包含以下结构:
---
name: skill-name
description: "技能简要描述"
metadata:
{
"openclaw":
{
"emoji": "🎯",
"requires": { "bins": ["required-command"] },
},
}
---
# 技能标题
## When to Use
✅ **使用场景:**
- 场景1描述
- 场景2描述
## When NOT to Use
❌ **避免使用场景:**
- 不适用场景1
- 不适用场景2
## 具体实现
提供具体的命令示例、工具调用方式等。
## 示例
展示典型的使用案例。
## 注意事项
安全限制、性能考虑等。
3. 实战分析:天气查询技能
3.1 现有技能分析
OpenClaw 自带的天气技能(weather)提供了完整的实现参考。让我们分析其设计:
3.2 技能实现解析
查看实际的天气技能文件:
---
name: weather
description: "Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location."
metadata:
{
"openclaw":
{
"emoji": "☔",
"requires": { "bins": ["curl"] },
},
}
---
# Weather Skill
## When to Use
✅ **USE this skill when:**
- "What's the weather?"
- "Will it rain today/tomorrow?"
- "Temperature in [city]"
- "Weather forecast for the week"
## When NOT to Use
❌ **DON'T use this skill when:**
- Historical weather data
- Climate analysis or trends
- Severe weather alerts
## Commands
### Current Weather
```bash
# One-line summary
curl "wttr.in/London?format=3"
# Detailed current conditions
curl "wttr.in/London?0"
Forecasts
# 3-day forecast
curl "wttr.in/London"
# Week forecast
curl "wttr.in/London?format=v2"
Quick Responses
"What's the weather?"
curl -s "wttr.in/London?format=%l:+%c+%t+(feels+like+%f),+%w+wind,+%h+humidity"
Notes
- No API key needed (uses wttr.in)
- Rate limited; don't spam requests
- Works for most global cities
### 3.3 设计要点
1. **清晰的边界定义**:明确说明何时使用和何时不使用
2. **具体的命令示例**:提供可直接运行的 curl 命令
3. **格式选项丰富**:展示不同的输出格式
4. **实用注意事项**:包含速率限制等实际考虑
## 4. 高级技能设计:GitHub 信息查询
### 4.1 技能设计思路
虽然 OpenClaw 技能本身不包含自动化监控逻辑,但可以设计一个 GitHub 信息查询技能,提供获取仓库状态的指导。这样的技能应该:
- 提供查询 GitHub 仓库信息的命令示例
- 说明如何检查最新提交、问题或发布
- 给出处理 API 限制的建议
- 提供常见查询场景的解决方案
### 4.2 技能设计示例
```markdown
---
name: github-info
description: "Get information about GitHub repositories, including commits, issues, and releases."
metadata:
{
"openclaw":
{
"emoji": "🐙",
"requires": { "bins": ["curl", "jq"] },
},
}
---
# GitHub Repository Information
## When to Use
✅ **USE this skill when:**
- "Check latest commits for [repo]"
- "What's new in [project]"
- "GitHub repository status"
- "Recent releases of [library]"
## When NOT to Use
❌ **DON'T use this skill when:**
- Real-time monitoring needed → use GitHub Actions or webhooks
- Automated notifications → use GitHub Watch feature
- Bulk data analysis → use GitHub API directly with scripts
## Basic Queries
### Latest Commits
```bash
# Get latest 5 commits
curl -s -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/openclaw/openclaw/commits?per_page=5 | \
jq '.[] | {sha: .sha[:7], author: .commit.author.name, message: .commit.message[:50]}'
Recent Releases
# Get latest release
curl -s -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/openclaw/openclaw/releases/latest | \
jq '{name: .name, tag: .tag_name, published: .published_at, url: .html_url}'
Open Issues
# Get open issues
curl -s -H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/openclaw/openclaw/issues?state=open&per_page=5" | \
jq '.[] | {number: .number, title: .title, user: .user.login}'
Rate Limiting
GitHub API has rate limits (60 requests per hour for unauthenticated requests):
# Check rate limit status
curl -s -H "Accept: application/vnd.github.v3+json" \
https://api.github.com/rate_limit | \
jq '.resources.core'
Authentication (Optional)
For higher rate limits, use a personal access token:
# With authentication
curl -s -H "Authorization: token YOUR_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/openclaw/openclaw/commits
Notes
- Respect GitHub's rate limits
- Use jq for JSON parsing (install via package manager)
- For frequent queries, consider caching results
- Authenticated requests have higher limits (5000/hour)
## 5. 技能开发最佳实践
### 5.1 设计原则
1. **单一职责原则**:每个技能只负责一个明确的功能领域
2. **明确边界**:清晰定义技能的输入、输出和副作用
3. **可配置性**:提供必要的配置选项,适应不同使用场景
4. **向后兼容**:技能更新时保持接口兼容性
### 5.2 文档规范
完整的技能文档应包括:
```markdown
## 版本历史
- v1.0.0 (2026-04-09): 初始版本,基础天气查询
- v1.1.0 (2026-04-16): 添加多日预报和缓存支持
## 依赖说明
- 需要网络连接
- 依赖 wttr.in 或 OpenWeatherMap API
## 性能考虑
- API 调用频率限制
- 响应时间优化
- 内存使用监控
## 安全注意事项
- 输入验证和清理
- API 密钥管理(如使用付费 API)
- 数据隐私保护
5.3 测试策略
- 单元测试:验证单个功能的正确性
- 集成测试:测试技能与工具的协同工作
- 性能测试:评估响应时间和资源消耗
- 兼容性测试:确保在不同环境下的稳定性
6. 调试与优化
6.1 常见问题排查
技能不被识别
# 检查技能文件位置
ls -la ~/.npm-global/lib/node_modules/openclaw/skills/
# 查看可用技能列表
openclaw skills list
# 检查技能文件格式
grep -n "^---" ~/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md
技能使用问题
由于技能是指导性文档而非执行代码,调试主要关注: 1. 技能匹配:智能体是否正确识别了使用场景 2. 命令正确性:提供的示例命令是否有效 3. 边界清晰度:使用/不使用条件是否明确
6.2 技能优化建议
- 完善使用场景:明确列出所有适用情况
- 提供具体示例:包含可直接运行的命令
- 设置清晰边界:避免技能被误用
- 包含实用提示:如速率限制、依赖要求等
6.2 性能优化技巧
- 缓存策略:对频繁查询的数据实施缓存
- 批量处理:合并多个小请求为单个大请求
- 异步执行:对耗时操作采用异步处理
- 资源限制:设置合理的并发数和频率限制
7. 技能部署与分发
7.1 技能安装位置
OpenClaw 技能通常安装在以下位置:
# 系统技能目录(npm 全局安装)
~/.npm-global/lib/node_modules/openclaw/skills/
# 自定义技能目录
~/.openclaw/skills/ # 用户自定义技能位置
7.2 创建自定义技能
要创建自定义技能,可以在用户目录下创建:
# 创建自定义技能目录
mkdir -p ~/.openclaw/skills/my-custom-skill
# 创建 SKILL.md 文件
cat > ~/.openclaw/skills/my-custom-skill/SKILL.md << 'EOF'
---
name: my-custom-skill
description: "My custom skill description"
---
# My Custom Skill
## When to Use
- When user needs specific functionality
## Implementation
Provide guidance and examples here.
EOF
7.2 社区分享
将技能分享给 OpenClaw 社区的步骤:
- 代码整理:确保代码质量和文档完整性
- 许可证选择:选择合适的开源许可证(如 MIT、Apache 2.0)
- 仓库创建:在 GitHub 或 GitLab 创建技能仓库
- 文档编写:提供详细的安装和使用说明
- 社区提交:在 OpenClaw Discord 社区分享链接
7.3 版本管理
为技能添加版本控制:
## 版本历史
### v1.2.0 (2026-04-23)
- 新增:支持多语言城市名称
- 优化:缓存策略改进
- 修复:时区处理问题
### v1.1.0 (2026-04-16)
- 新增:多日天气预报支持
- 优化:错误处理机制
- 文档:添加详细使用示例
### v1.0.0 (2026-04-09)
- 初始版本发布
- 基础天气查询功能
- 支持中文城市名称
8. 实用技能设计思路
8.1 文件整理指导技能
技能目的:提供文件整理的最佳实践和命令示例
技能内容示例:
---
name: file-organizer
description: "Guidance for organizing files by type, date, or project."
---
# File Organization Guidance
## When to Use
- "Organize my downloads folder"
- "Sort files by type"
- "Clean up old files"
## Command Examples
### Organize by File Type
```bash
# Create directories for different file types
mkdir -p ~/Downloads/{images,docs,archives,code}
# Move files to appropriate directories
mv ~/Downloads/*.jpg ~/Downloads/*.png ~/Downloads/*.gif ~/Downloads/images/ 2>/dev/null || true
mv ~/Downloads/*.pdf ~/Downloads/*.doc ~/Downloads/*.docx ~/Downloads/docs/ 2>/dev/null || true
mv ~/Downloads/*.zip ~/Downloads/*.tar ~/Downloads/*.gz ~/Downloads/archives/ 2>/dev/null || true
Find and Remove Old Files
# Find files older than 30 days
find ~/Downloads -type f -mtime +30 -exec ls -la {} \;
# Remove files older than 90 days (with confirmation)
find ~/Downloads -type f -mtime +90 -exec rm -i {} \;
Notes
- Always backup important files before bulk operations
- Use
-iflag for interactive deletion - Consider using
trashcommand instead ofrmfor recoverable deletion
### 8.2 笔记整理指导技能
**技能目的**:提供从各种来源整理笔记的方法
**技能内容示例**:
```markdown
---
name: note-organizer
description: "Guidance for collecting and organizing notes from various sources."
---
# Note Organization Guidance
## When to Use
- "Organize my reading notes"
- "Combine notes from different sources"
- "Create a summary from meeting notes"
## Source-Specific Guidance
### From Kindle Highlights
```bash
# Kindle highlights are usually in My Clippings.txt
# Extract and format highlights
grep -A1 -B1 "Your Highlight" ~/Documents/My\ Clippings.txt | \
sed 's/==========/---/g' > ~/Documents/kindle_highlights.md
From Web Articles
# Use readability tools to extract main content
# Install readability-cli if needed
# npm install -g readability-cli
readable https://example.com/article > ~/Documents/article_summary.md
Combining Multiple Notes
# Combine markdown files with headers
for file in ~/Documents/notes/*.md; do
echo "# $(basename "$file" .md)" >> combined_notes.md
echo "" >> combined_notes.md
cat "$file" >> combined_notes.md
echo -e "\n---\n" >> combined_notes.md
done
Notes
- Maintain consistent formatting across notes
- Use tags or categories for easy searching
- Regular review and cleanup of old notes ```
9. 正确理解 OpenClaw 技能
9.1 技能的本质
需要明确的是,OpenClaw 技能不是传统意义上的插件或扩展。它们不包含可执行代码,也不直接控制工具调用。技能的本质是:
- 指导性文档:为智能体提供使用特定功能的指南
- 最佳实践集合:汇集了完成特定任务的有效方法
- 使用边界定义:明确说明何时使用和何时不使用
- 命令示例库:提供可直接运行或参考的命令
9.2 技能的局限性
理解技能的局限性同样重要: - 不包含自动化逻辑:技能本身不会自动执行任何操作 - 不控制工具调用:智能体参考技能内容,但自主决定是否及如何使用工具 - 不保证执行结果:技能质量取决于文档的完整性和准确性 - 需要智能体理解:技能效果依赖于智能体对文档的理解能力
9.3 技能的价值
尽管有上述局限性,技能仍然具有重要价值: - 知识标准化:将最佳实践文档化,避免重复探索 - 使用一致性:确保相同任务采用相似的处理方式 - 学习加速:新用户可以通过技能快速了解如何完成特定任务 - 质量提升:经过验证的方法可以提高任务完成质量
10. 总结
OpenClaw 技能系统为智能体提供了结构化的知识参考,使得 AI 助手能够更有效地完成特定类型的任务。通过本文的讲解,你应该已经掌握了:
- 技能的正确理解:技能是指导性文档,而非执行代码
- 技能文件结构:SKILL.md 的标准格式和内容要求
- 技能设计原则:如何创建清晰、实用的技能文档
- 实际案例分析:通过现有技能学习最佳实践
- 技能部署方法:如何创建和安装自定义技能
创建优秀的 OpenClaw 技能需要: - 清晰的场景定义:明确说明技能适用的具体场景 - 实用的命令示例:提供可直接运行或修改的命令 - 完整的边界说明:避免技能被误用于不合适的场景 - 详细的注意事项:包含依赖、限制、安全考虑等信息
随着 OpenClaw 生态系统的发展,技能库的丰富将为用户提供更多高质量的任务指导。无论是简单的文件操作,还是复杂的数据查询,都可以通过精心设计的技能文档获得更好的支持。
系列文章导航 - 1. OpenClaw 核心概念详解 - 2. OpenClaw 安装指南 - 3. OpenClaw 配置指南 - 4. OpenClaw 基本应用指南 - 5. OpenClaw TUI 使用指南 - 6. OpenClaw WebUI 使用指南 - 7. OpenClaw QQBot 集成指南 - 8. OpenClaw 微信 ClawBot 指南 - 9. OpenClaw 技能开发指南(本文)
相关资源 - OpenClaw 官方文档 - OpenClaw GitHub 仓库 - 技能开发示例 - OpenClaw 社区 Discord
本文基于 OpenClaw v1.0.0 编写,内容更新于 2026年4月9日。技能开发的具体实现可能随版本更新而变化,建议查阅最新官方文档获取最新信息。