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

Written by

in

文章目录
  • 用OpenClaw也有一段时间了,不得不说这工具确实香。但时间一长,就发现官方自带的那些Skill不太够用了。 比如我想让它帮我查查股票,发现没有。比如我想让它读飞书文档,官方那个用起来总是差点意思。 后来就想,与其凑合用,不如自己写一个。这一写不要紧,发现这里门道还挺多。今天就把踩过的坑整理出来,供大家参考。
  • 开发Skill这件事,说难也不难,关键就三点: SKILL.md写清楚——AI能不能用好全看这个 工具选对——bash能搞定的事没必要整那么复杂 多测——别想当然,踩坑很正常 熟练了之后,你会发现这玩意儿真的很好用。任何重复性的工作都可以变成一个Skill,让AI帮你干。 到此这篇关于OpenClaw Skill开发实战指南:从入门到独立发布的文章就介绍到这了,更多相关OpenClaw Skill开发内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!
  • 目录
    • 前言
    • 一、Skill到底是啥?
      • 1.1 先搞清楚概念
      • 1.2 工作流程
      • 1.3 加载优先级
    • 二、实战:写一个股票查询Skill
      • 2.1 需求先说清楚
      • 2.2 动手建目录
      • 2.3 重点:写好SKILL.md
      • 2.4 想更可控?加个自定义工具
      • 2.5 配置文件里的一些门道
    • 三、本地测试怎么搞
      • 3.1 让Agent刷新一下
      • 3.2 试一把
      • 3.3 调试心得
    • 四、发布到ClawHub
      • 4.1 目录结构
      • 4.2 发布命令
      • 4.3 别人怎么用
    • 五、常见问题
      • 5.1 Skill不生效
      • 5.2 接口调不通
      • 5.3 AI理解错了
    • 六、进阶玩法
      • 6.1 缓存得加上
      • 6.2 错误处理要做好
      • 6.3 输出用中文
    • 写在最后

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

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

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

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

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

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

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

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

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

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

      我就一个朴素的需求:

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

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

      在终端执行下面命令:

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

      这是最关键的一步,直接决定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分钟内不重复查

      如果觉得让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 };

      ---
      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 能不能直接调用

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

      或者重启Gateway:

      openclaw gateway restart
      

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

      如果跑不通,先看日志:

      openclaw gateway --verbose
      

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

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

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

      先装CLI:

      npm install -g clawhub
      

      登录:

      clawhub login
      

      发布:

      clawhub publish ./stock-query
      

      安装:

      clawhub install stock-query
      

      更新:

      clawhub update stock-query
      

      查这几个点:

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

      可能原因:

      • 网络问题,有些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"

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

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

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

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

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

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

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

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

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

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

      站内搜索