2026.06.03 | youres | 24次围观
为什么需要自定义OpenClaw技能?
OpenClaw作为一款强大的本地AI智能体框架,其核心魅力在于可扩展的技能(Skill)系统。虽然官方和社区已经提供了90+技能,但在实际工作中,我们经常会遇到需要特定功能的情况。
比如:你需要一个自动抓取竞争对手价格并生成报表的技能;或者需要一个能自动登录公司内部系统执行操作的技能。这些场景下,掌握OpenClaw技能开发能力,就像给你的AI助手装上了"自定义零件"的能力。
OpenClaw技能架构解析
一个标准的OpenClaw技能包含以下核心文件结构:
- SKILL.md - 技能说明文档,定义触发条件、使用场景、参数说明
- scripts/ - 可执行脚本目录,存放实际业务逻辑
- config/ - 配置文件目录,存放API密钥、环境变量等
- README.md - 用户使用指南
实战案例:开发一个"每日科技新闻摘要"技能
下面我以一个真实案例,演示如何从零开发一个实用技能。这个技能的目标是:每天早上8点,自动搜索指定关键词的科技新闻,生成摘要并保存到指定位置。
第一步:创建技能目录结构
daily-tech-news/
├── SKILL.md # 技能定义文件
├── scripts/
│ └── fetch_news.js # 核心抓取脚本
├── config/
│ └── sources.json # 新闻源配置
└── README.md # 使用说明
第二步:编写SKILL.md(关键!)
SKILL.md是OpenClaw识别和使用技能的核心,必须包含以下信息:
---
name: daily-tech-news
description: |
每日自动抓取科技新闻并生成摘要。
触发词:每日科技新闻、科技新闻摘要、tech news digest
metadata:
openclaw:
emoji: "📰"
---
# 每日科技新闻摘要技能
## 触发条件
当用户提到以下任一需求时,应激活此技能:
- "帮我获取今日科技新闻"
- "生成科技新闻摘要"
- "每日科技资讯汇总"
## 使用方法
1. 配置感兴趣的新闻源(编辑 config/sources.json)
2. 设置推送时间(通过cron定时任务)
3. 指定输出格式(Markdown/HTML/纯文本)
## 技术实现
本技能通过调用NewsAPI和新浪科技RSS源,结合OpenClaw的在线搜索能力,
实现智能化新闻筛选和摘要生成。
第三步:实现核心功能脚本
scripts/fetch_news.js 的核心逻辑:
const axios = require('axios');
const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);
async function fetchTechNews(keywords = ['AI', '大模型', '自动驾驶']) {
// 1. 使用OpenClaw的online-search技能获取最新新闻
const searchCommand = 'node "C:\\Program Files\\QClaw\\v0.2.23.532\\resources\\openclaw\\config\\skills\\online-search\\scripts\\prosearch.cjs" --keyword="' + keywords.join(' ') + '" --freshness=24h';
try {
const { stdout } = await execPromise(searchCommand);
const searchResult = JSON.parse(stdout);
if (searchResult.success) {
// 2. 提取前5条重要新闻
const topNews = searchResult.data.docs.slice(0, 5);
// 3. 生成结构化摘要
const summary = generateSummary(topNews);
// 4. 保存结果
require('fs').writeFileSync(
'./output/daily_tech_news.md',
summary,
'utf8'
);
return summary;
}
} catch (error) {
console.error('新闻获取失败:', error);
return null;
}
}
function generateSummary(newsItems) {
let markdown = '# 今日科技新闻摘要\n\n';
markdown += '> 生成时间: ' + new Date().toLocaleDateString('zh-CN') + '\n\n';
newsItems.forEach((item, index) => {
markdown += '## ' + (index + 1) + '. ' + item.title + '\n\n';
markdown += '- **来源**: ' + (item.site || '未知来源') + '\n';
markdown += '- **日期**: ' + item.date + '\n';
markdown += '- **摘要**: ' + item.passage.substring(0, 150) + '...\n\n';
markdown += '🔗 [阅读原文](' + item.url + ')\n\n';
markdown += '---\n\n';
});
return markdown;
}
// 导出供OpenClaw调用
module.exports = { fetchTechNews };
关键技巧与避坑指南
1. 路径处理必须用双反斜杠
在Windows环境下开发OpenClaw技能时,最容易出现的问题就是路径处理。错误示例:
// ❌ 错误 - 单反斜杠会被当作转义字符
const scriptPath = 'C:Program FilesQClawscriptsprosearch.cjs';
// ✅ 正确 - 双反斜杠或正斜杠
const scriptPath = 'C:\\Program Files\\QClaw\\scripts\\prosearch.cjs';
// 或者
const scriptPath = 'C:/Program Files/QClaw/scripts/prosearch.cjs';
2. 异步操作必须用Promise包装
OpenClaw的技能脚本通常需要调用外部命令或API,务必使用async/await或Promise确保执行顺序:
// ✅ 推荐写法
async function main() {
console.log('开始执行技能...');
const result1 = await step1();
const result2 = await step2(result1);
console.log('技能执行完成');
return result2;
}
// ❌ 避免回调地狱
function main() {
step1(function(err, result1) {
if (err) return handleError(err);
step2(result1, function(err, result2) {
if (err) return handleError(err);
console.log(result2);
});
});
}
3. 错误处理要完善
技能可能会因为网络、权限、配置错误等原因失败,必须做好错误捕获和用户提示:
async function safeExecute() {
try {
const result = await riskyOperation();
return { success: true, data: result };
} catch (error) {
console.error('技能执行失败:', error.message);
// 提供可操作的错误提示
if (error.code === 'ENOTFOUND') {
return {
success: false,
message: '网络连接失败,请检查网络设置后重试'
};
}
return {
success: false,
message: '未知错误: ' + error.message
};
}
}
技能测试与调试
开发完成后,需要通过以下步骤测试技能:
- 单元测试:直接运行scripts/下的脚本,验证核心逻辑
- 集成测试:将技能复制到OpenClaw的skills目录,重启网关
- 触发测试:在对话中说"测试每日科技新闻技能",观察是否被正确触发
- 日志检查:查看OpenClaw的日志输出,定位问题
| 测试阶段 | 检查要点 | 常见问题 |
|---|---|---|
| SKILL.md格式 | YAML front matter是否正确 | 缩进错误、缺少分隔线 |
| 脚本可执行性 | node脚本能否正常运行 | 缺少依赖、路径错误 |
| 触发识别 | OpenClaw能否识别触发词 | description描述不清晰 |
| 权限问题 | 能否读写目标文件/目录 | Windows UAC拦截 |
进阶:技能打包与分享
当你的技能开发完成并测试稳定后,可以通过以下方式分享给社区:
- 打包为.zip:使用标准zip格式,保留目录结构
- 编写详细README:包含安装步骤、配置说明、常见问题
- 提交到SkillHub:通过
skillhub_install工具发布 - 版本管理:在SKILL.md中标注版本号,方便用户更新
相关资源与内链
- 官方技能开发文档:参考OpenClaw安装目录下的
docs/skill-development.md - SkillHub社区:https://github.com/openclaw/skills
- 相关问题解答:OpenClaw中文教程站
- 调试工具:使用
openclaw gateway logs --follow实时查看技能执行日志
总结与展望
OpenClaw技能开发并不神秘,核心是理解"触发-执行-反馈"的流程。通过本文的实战案例,你应该已经掌握了:
- 技能的基本目录结构和文件作用
- SKILL.md的编写规范和触发词设计
- 实际开发中的避坑技巧(路径、异步、错误处理)
- 测试、调试、打包的完整流程
随着OpenClaw生态的不断发展,掌握技能开发能力将让你能够打造真正个性化的AI助手。下一次,当你发现现有技能无法满足需求时,不妨尝试自己动手,构建一个专属的AI功能扩展。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论