为什么需要自定义 OpenClaw 技能?
大多数用户接触 OpenClaw 是从现成的 Skill 市场开始的——安装一个技能,立刻拥有新能力。但当你的需求超出通用场景时,现成技能往往力不从心。
比如我最近遇到一个真实案例:某电商运营团队需要每天自动抓取竞品价格并生成报告。市面上的爬虫技能要么太通用(需要反复配置),要么太封闭(无法对接内部 ERP)。最终他们选择自己开发 OpenClaw 技能,3 天就上线了专属的价格监控系统。
这就是自定义技能的核心价值:把你的业务逻辑封装成可复用的 AI 能力。
OpenClaw 技能架构深度解析
要开发技能,首先要理解 OpenClaw 的技能加载机制。很多人照搬模板却不知道原理,导致调试时一头雾水。
技能目录结构
my-skill/
├── SKILL.md # 技能描述(AI 读取这个决定何时调用)
├── scripts/
│ └── main.cjs # 核心逻辑(Node.js 脚本)
├── config.json # 配置文件(可选)
└── README.md # 人类阅读的文档(可选)
SKILL.md 的底层逻辑
很多人以为 SKILL.md 只是说明文档,实际上它是 AI 决策的核心依据。OpenClaw 在每次对话时都会:
- 扫描所有技能的 SKILL.md
- 提取
description字段 - 与用户意图匹配,决定是否调用该技能
所以 SKILL.md 的 description 不是写给人看的,是写给 AI 看的。我见过太多技能因为 description 写得太模糊(比如"处理文件"),导致 AI 永远不调用它。
实战:开发一个"竞品价格监控"技能
下面我用一个完整案例演示技能开发流程。这个技能实现:
- 输入:竞品 URL 列表
- 处理:自动抓取价格并存入 SQLite
- 输出:生成 Markdown 报告
Step 1: 编写 SKILL.md
---
name: price-monitor
description: |
竞品价格监控工具。当用户提到"监控价格"、"追踪竞品"、"价格对比"时触发。
支持电商网站(淘宝、京东、亚马逊)的价格抓取和趋势分析。
metadata:
openclaw:
emoji: "📊"
---
# 竞品价格监控技能
当用户需要监控电商产品价格时,调用此技能。
## 使用场景
- 每日自动抓取竞品价格
- 生成价格趋势图表
- 价格异常预警
Step 2: 实现核心逻辑 (scripts/main.cjs)
const axios = require('axios');
const sqlite3 = require('sqlite3');
const { promisify } = require('util');
async function fetchPrice(url) {
// 注意:真实场景需要用 Puppeteer 绕过反爬
// 这里用简化示例
const response = await axios.get(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
});
// 实际项目中用 Cheerio 解析 DOM
// 这里省略解析逻辑
return {
price: 299.00,
currency: 'CNY',
timestamp: Date.now()
};
}
async function saveToDB(data) {
const db = new sqlite3.Database('./price_history.db');
const run = promisify(db.run.bind(db));
await run(
"INSERT INTO prices (url, price, timestamp) VALUES (?, ?, ?)",
[data.url, data.price, data.timestamp]
);
db.close();
}
module.exports = { fetchPrice, saveToDB };
调试技巧:我是如何把调试时间缩短 70% 的
技能开发最痛苦的环节是调试。你改了代码,不知道 AI 有没有调用最新版本,也不知道参数为什么传错了。
这里分享 3 个我实战总结的调试技巧:
1. 使用 qclaw env 技能快速验证环境
很多技能失败是因为依赖缺失。在技能根目录执行:
node -e "require('./scripts/main.cjs'); console.log('依赖正常')"
如果报错,用 qclaw env 技能自动安装缺失的依赖(比如 pip install 或 npm install)。
2. 在 SKILL.md 中添加"测试命令"
我在每个技能的 SKILL.md 末尾加一段:
## 测试命令(开发用)
```bash
node scripts/main.cjs --test --url=https://example.com
```
这样 AI 在调用前会先执行测试命令,确保环境正常。
3. 利用 OpenClaw 的"工具调用日志"
OpenClaw 会在 ~/.openclaw/logs/tool-calls.log 记录每次技能调用的参数和返回值。我习惯用:
tail -f ~/.openclaw/logs/tool-calls.log | grep "price-monitor"
实时查看我的技能是否被调用,以及传参是否正确。
性能优化:让技能响应速度提升 3 倍
默认情况下,OpenClaw 每次调用技能都会重新启动 Node.js 进程。对于需要初始化的技能(比如加载 ML 模型),这会非常慢。
解决方案:使用长驻进程模式
修改技能逻辑,支持"服务端模式":
// scripts/main.cjs
if (process.argv.includes('--server')) {
// 长驻模式:启动 HTTP 服务器
const express = require('express');
const app = express();
app.post('/fetch', async (req, res) => {
const data = await fetchPrice(req.body.url);
res.json(data);
});
app.listen(3000, () => console.log('技能服务器运行中'));
} else {
// 命令行模式:单次执行
const url = process.argv[2];
fetchPrice(url).then(console.log);
}
然后在 SKILL.md 中告诉 AI:
## 调用方式
如果服务器已启动(检查端口 3000),调用 POST http://localhost:3000/fetch
否则,执行:node scripts/main.cjs --url=...
常见坑点汇总(我的血泪史)
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 技能不被 AI 调用 | SKILL.md 的 description 太模糊 | 用具体场景词("监控价格"而非"处理数据") |
| 中文乱码 | 脚本输出编码非 UTF-8 | 在脚本开头设置 process.stdout.setEncoding('utf8') |
| 依赖找不到 | Node.js 版本不匹配 | 在 SKILL.md 中声明 engines: { "node": ">=22" } |
| 权限错误 | 技能尝试写入系统目录 | 所有文件操作使用 path.join(os.homedir(), '.openclaw-skills/...') |
进阶:让技能支持多平台(Windows/Mac/Linux)
OpenClaw 技能的一个隐藏难点是跨平台兼容性。我在开发"文件批量处理"技能时踩过坑:
- Windows 路径用
\,Linux 用/ - PowerShell 和 bash 的命令行参数转义规则不同
- 临时目录位置不同(Windows 是
%TEMP%,Linux 是/tmp)
我的跨平台模板:
const os = require('os');
const path = require('path');
const TEMP_DIR = os.tmpdir(); // 自动适配平台
const CONFIG_DIR = path.join(os.homedir(), '.openclaw-skills', 'my-skill');
// 路径拼接永远用 path.join()
const filePath = path.join(CONFIG_DIR, 'data.json');
发布与分享:让更多人用上你的技能
开发完技能后,可以通过 SkillHub 分享给社区:
- 在官网注册账号
- 打包技能:
zip -r my-skill.zip my-skill/ - 上传并填写技能描述(注意:这里的描述是给人类看的,要详细)
- 等待审核(通常 1-2 天)
审核通过后,其他用户就可以通过:
skillhub install my-skill
一键安装你的技能。
总结与展望
OpenClaw 技能开发的核心不是"会写代码",而是理解 AI 的决策逻辑:
- SKILL.md 的 description 是 AI 的"大脑索引"
- 脚本的输出格式直接影响 AI 的后续决策
- 跨平台兼容性决定了技能的可用性
未来,我认为技能开发会向"低代码"方向发展——可能不需要写 JavaScript,只用 YAML 配置就能完成 80% 的技能。但在那之前,掌握本文的实战技巧,足以让你构建出专业级的 OpenClaw 技能。
内链推荐:如果你对 OpenClaw 的基础安装还有疑问,可以参考我们的 OpenClaw 安装配置完整教程,或者了解 OpenClaw 高级自动化技巧 来进一步提升效率。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论