OpenClaw Skill开发实战指南:从入门到独立发布

  发布时间:2026-03-26 11:47:52   作者:码头码农   我要评论
用OpenClaw也有一段时间了,不得不说这工具确实香,但时间一长,就发现官方自带的那些Skill不太够用了,后来就想,与其凑合用,不如自己写一个,这一写不要紧,发现这里门道还挺多,今天就把踩过的坑整理出来供大家参考

前言

用OpenClaw也有一段时间了,不得不说这工具确实香。但时间一长,就发现官方自带的那些Skill不太够用了。

比如我想让它帮我查查股票,发现没有。比如我想让它读飞书文档,官方那个用起来总是差点意思。

后来就想,与其凑合用,不如自己写一个。这一写不要紧,发现这里门道还挺多。今天就把踩过的坑整理出来,供大家参考。

一、Skill到底是啥?

1.1 先搞清楚概念

OpenClaw里的Skill,本质上就是一个文件夹:

my-skill/
├── SKILL.md          // 必须有,这是核心
├── scripts/          // 可选,放脚本
└── resources/       // 可选,放资源文件

重点是SKILL.md——这玩意儿就是AI的说明书。AI能不能用好这个Skill,全看它写得清不清楚。

1.2 工作流程

你发消息 → Agent判断用哪个Skill → 读取SKILL.md → 按说明执行操作 → 返回结果

就这么个流程,没啥神秘的。

1.3 加载优先级

位置优先级啥意思
/skills最高当前工作区专用
~/.openclaw/skills所有Agent都能用
内置Skill最低官方自带的

如果你在workspace里写了个跟内置同名的Skill,会直接覆盖掉它。这个机制挺有用的,可以魔改官方Skill。

二、实战:写一个股票查询Skill

2.1 需求先说清楚

我就一个朴素的需求:

  • 能查A股、港股、美股
  • 显示当前价格和涨跌幅
  • 免费,不想花冤枉钱

技术方案很简单,用新浪财经的免费接口就行。

2.2 动手建目录

在终端执行下面命令:

mkdir -p ~/.openclaw/workspace/skills/stock-query
cd ~/.openclaw/workspace/skills/stock-query

2.3 重点:写好SKILL.md

这是最关键的一步,直接决定AI能不能正确使用这个Skill。文件内容如下:

---
name: stock_query
description: 查询A股、港股、美股实时行情
metadata: { "openclaw": { "emoji": "📈", "requires": { "bins": ["curl"] } } }
---
# 股票行情查询 Skill
## 什么时候用
用户问股票价格、涨跌幅、行情的时候用。
## 能查什么
- A股:上证、深证、创业板,还有个股
- 港股:恒生指数、腾讯阿里这些
- 美股:苹果特斯拉这些
## 怎么用
### 查A股
查询上证指数:
curl -s "https://hq.sinajs.cn/list=s_sh000001"
查询茅台:
curl -s "https://hq.sinajs.cn/list=s_sh600519"
### 查港股
查询恒生指数:
curl -s "https://hq.sinajs.cn/list=rt_hkHSI"
查询腾讯:
curl -s "https://hq.sinajs.cn/list=rt_hk00700"
### 查美股
查询苹果:
curl -s "https://hq.sinajs.cn/list=n_aapl"
查询特斯拉:
curl -s "https://hq.sinajs.cn/list=n_tsla"
## 代码规则
| 市场 | 前缀怎么写 | 例子 |
|------|------------|------|
| 上证 | s_sh | 600519 |
| 深证 | sz_ | 000001 |
| 港股 | rt_hk | 00700 |
| 美股 | n_ | aapl |
## 返回什么
接口返回的是原始数据,自己解析一下。解析后给人看的内容包括:
- 当前价格
- 涨跌多少钱
- 涨跌幅
- 最高最低
- 成交量
## 注意点
- 新浪接口有频率限制,别疯狂请求
- 美股数据可能有延迟
- 建议加个缓存,5分钟内不重复查

2.4 想更可控?加个自定义工具

如果觉得让AI直接调bash不太安全,可以自己写个Node.js工具。创建tools.js文件,内容如下:

// tools.js
const http = require('http');
async function getStockPrice(code, market = 'a股') {
  let url;
  switch(market) {
    case '港股':
      url = 'https://hq.sinajs.cn/list=rt_hk' + code;
      break;
    case '美股':
      url = 'https://hq.sinajs.cn/list=n_' + code.toLowerCase();
      break;
    default:
      // A股自动判断沪市还是深市
      if (code.startsWith('6')) {
        url = 'https://hq.sinajs.cn/list=s_sh' + code;
      } else {
        url = 'https://hq.sinajs.cn/list=sz_' + code;
      }
  }
  return new Promise((resolve, reject) => {
    http.get(url, (res) => {
      let data = '';
      res.on('data', chunk => data += chunk);
      res.on('end', () => {
        const match = data.match(/="([^"]+)"/);
        if (match) {
          resolve(parseStockData(match[1]));
        } else {
          resolve({ error: '没找到这只股票' });
        }
      });
    }).on('error', reject);
  });
}
function parseStockData(raw) {
  const parts = raw.split(',');
  if (parts.length < 30) return { error: '数据好像有问题' };
  const name = parts[0];
  const open = parseFloat(parts[1]);
  const close = parseFloat(parts[2]);
  const high = parseFloat(parts[3]);
  const low = parseFloat(parts[4]);
  const change = close - open;
  const changePercent = (change / open * 100).toFixed(2);
  return {
    name: name,
    current: close.toFixed(2),
    change: change.toFixed(2),
    changePercent: changePercent + '%',
    changeType: change >= 0 ? '涨' : '跌'
  };
}
module.exports = { getStockPrice };

2.5 配置文件里的一些门道

---
name: stock_query
description: 股票行情查询Skill
metadata: {
  "openclaw": {
    "emoji": "📈",
    "requires": { "bins": ["curl", "node"] },
    "primaryEnv": "STOCK_API_KEY",
    "os": ["linux", "darwin", "win32"]
  }
}
user-invocable: true
---

配置项说明:

字段干啥的
emoji显示的图标
requires.bins需要哪些命令
primaryEnv需要哪个环境变量
os支持哪些系统
user-invocable能不能直接调用

三、本地测试怎么搞

3.1 让Agent刷新一下

最简单的方式就是在对话里说一声"刷新一下Skill列表"。

或者重启Gateway:

openclaw gateway restart

3.2 试一把

查茅台:茅台现在多少钱
查苹果:苹果股票啥价
查腾讯:腾讯控股咋样了

3.3 调试心得

如果跑不通,先看日志:

openclaw gateway --verbose

先手动调一下接口,确认能跑通再说:

curl -s "https://hq.sinajs.cn/list=s_sh600519"

四、发布到ClawHub

4.1 目录结构

stock-query/
├── SKILL.md
├── tools.js
└── README.md

4.2 发布命令

先装CLI:

npm install -g clawhub

登录:

clawhub login

发布:

clawhub publish ./stock-query

4.3 别人怎么用

安装:

clawhub install stock-query

更新:

clawhub update stock-query

五、常见问题

5.1 Skill不生效

查这几个点:

  • 目录名和name对不上
  • SKILL.md位置不对
  • YAML格式写错了
  • Gateway没重启

5.2 接口调不通

可能原因:

  • 网络问题,有些API国内访问不了
  • 频率太高被限了
  • 接口本身挂了

解决思路:准备备选方案。新浪不行就换东方财富:

curl -s "https://push2.eastmoney.com/api/qt/stock/get?fields=f43,f44,f45,f46,f47,f48,f50,f51,f52,f57&secid=1.600519"

5.3 AI理解错了

这很正常。解决办法就是在SKILL.md里把"什么时候用""什么时候不用"写得更细,越具体越好。

六、进阶玩法

6.1 缓存得加上

同一个问题5分钟内别调接口了,浪费资源。缓存在~/.cache/stock-query/目录。

6.2 错误处理要做好

别把原始错误信息暴露给用户,不太好。接口出问题就先试试备选接口,都不行就说"暂时查不了,稍后再试"。

6.3 输出用中文

既然是中国人用,就用中文返回,别中英文混杂。

正确示例:茅台 1695.00元 涨5块 (+0.30%)

错误示例:Maotai: 1695.00, change: +5.00 (+0.30%)

写在最后

开发Skill这件事,说难也不难,关键就三点:

  • SKILL.md写清楚——AI能不能用好全看这个
  • 工具选对——bash能搞定的事没必要整那么复杂
  • 多测——别想当然,踩坑很正常

熟练了之后,你会发现这玩意儿真的很好用。任何重复性的工作都可以变成一个Skill,让AI帮你干。

到此这篇关于OpenClaw Skill开发实战指南:从入门到独立发布的文章就介绍到这了,更多相关OpenClaw Skill开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

相关文章

最新评论