OpenClaw 技能实战 07:从零开发一个技能,发布到 ClawHub
摘要:用了很久 OpenClaw,只会调现成技能?其实你也可以开发自己的技能,发布到 ClawHub 让成千上人用。本文从项目结构、核心逻辑到发布流程,手把手教你完成第一个技能开发。
前 6 篇实战,讲的都「怎么用技能」:
今天这篇,换个角度:教你自己创造技能。
很多人以为技能开发很难,要懂架构、会写框架、得是全栈工程师。
其实不是。
ClawHub 上 200+ 技能,很多都是普通用户写的:
他们不是技术大牛,只是把自己的需求变成了产品。
你也可以。
一、什么是 OpenClaw 技能?
先统一概念。
OpenClaw 技能,本质上是一个标准化的自动化脚本包,包含:
标准结构:
my-skill/├─ SKILL.md # 必填├─ script.py # 你的核心逻辑├─ config.yaml # 可选├─ requirements.txt # 可选└─ output/ # 可选
ClawHub 的作用,就是让你把这些文件打包,上传到市场。别人一行命令就能安装:
clawhub install daily-hot-summary
安装后,技能自动集成到 OpenClaw,用户可以通过自然语言调用:
「帮我抓一下今天的热点」
就这么简单。
二、开发前,想清楚 3 个问题
别上来就写代码。
问题 1:这个技能解决什么痛点?
问自己:谁会用?在什么场景?解决什么问题?
反例:「我要做一个 AI 工具」——这是自嗨。
正例:
好的技能,始于一个具体的、高频的、愿意付费的痛点。
我建议你从自己的工作流里找。
你每天重复做 3 次以上的事,就值得自动化。
问题 2:现有技能能不能解决?
动手前,先去 ClawHub 搜一下:
clawhub search 关键词
也许已经有人写了。如果是这样:
最聪明的做法:站在现有技能上做增强。
比如有人写了「天气查询」技能,只能查当天。另一个人做了「天气 + 穿衣建议」技能,多了生活指导,直接差异化。
问题 3:你的技能「边界」在哪?
新手容易犯的错:想把技能做成万能工具。
「我这个技能既能写文章,又能画图,还能做数据分析……」
停。
技能越小越专注,越容易成功。
参考标准:
比如 wewrite 技能,边界非常清楚:
就这样,简单明了。
三、手把手:开发你的第一个技能
理论够了,直接实战。
假设我们要开发一个**「每日热点汇总」技能**:
下面分 6 步完成。
步骤 1:创建技能目录
在你的 OpenClaw 工作区,新建文件夹:
cd C:\Users\admin\.openclaw\workspace\skillsmkdir daily-hot-summarycd daily-hot-summary
目录结构先搭好:
daily-hot-summary/├─ SKILL.md├─ hot_spider.py├─ config.yaml└─ requirements.txt
步骤 2:编写核心脚本
hot_spider.py —— 技能的「大脑」。
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""每日热点汇总脚本功能:抓取微博、百度、知乎热搜榜,生成 Markdown 报告"""import requestsfrom datetime import datetimeimport yamlimport osdef load_config(): """读取配置文件""" config_path = os.path.join(os.path.dirname(__file__), 'config.yaml') with open(config_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f)def fetch_weibo_hot(): """抓取微博热搜榜""" try: url = "https://weibo.com/ajax/side/hotSearch" resp = requests.get(url, timeout=10) data = resp.json() hot_list = [] for item in data.get('data', {}).get('realtime', [])[:20]: hot_list.append({ 'title': item.get('note', ''), 'url': f"https://s.weibo.com/weibo?q={item.get('note', '')}", 'hot_value': item.get('num', 0) }) return hot_list except Exception as e: print(f"微博热搜抓取失败:{e}") return []def fetch_baidu_hot(): """抓取百度热搜榜""" try: url = "https://top.baidu.com/board?tab=realtime" resp = requests.get(url, timeout=10) # 简化处理,实际可用 BeautifulSoup 解析 HTML return [] except Exception as e: print(f"百度热搜抓取失败:{e}") return []def fetch_zhihu_hot(): """抓取知乎热榜""" try: url = "https://www.zhihu.com/api/v3/feed/topstory/hot-lists/total?limit=20" resp = requests.get(url, timeout=10) data = resp.json() hot_list = [] for item in data.get('data', [])[:20]: target = item.get('target', {}) hot_list.append({ 'title': target.get('title', ''), 'url': target.get('url', '').replace('api.', ''), 'hot_value': item.get('children', [{}])[0].get('vote_count', 0) }) return hot_list except Exception as e: print(f"知乎热榜抓取失败:{e}") return []def generate_report(weibo_hot, baidu_hot, zhihu_hot): """生成 Markdown 报告""" today = datetime.now().strftime('%Y-%m-%d') md_content = f"""# 每日热点汇总 | {today}> 数据来源:微博热搜、百度热搜、知乎热榜 > 生成时间:{datetime.now().strftime('%H:%M')}---## 🔥 微博热搜 TOP 20| 排名 | 热点 | 热度 ||------|------|------|""" for i, item in enumerate(weibo_hot, 1): md_content += f"| {i} | [{item['title']}]({item['url']}) | {item['hot_value']:,} |\n" md_content += "\n## 📈 百度热搜 TOP 20\n\n" md_content += "| 排名 | 热点 | 热度 |\n|------|------|------|\n" for i, item in enumerate(baidu_hot, 1): md_content += f"| {i} | [{item['title']}]({item['url']}) | {item['hot_value']:,} |\n" md_content += "\n## 💬 知乎热榜 TOP 20\n\n" md_content += "| 排名 | 热点 | 热度 |\n|------|------|------|\n" for i, item in enumerate(zhihu_hot, 1): md_content += f"| {i} | [{item['title']}]({item['url']}) | {item['hot_value']:,} |\n" md_content += "\n---\n\n**生成自:OpenClaw 每日热点汇总技能**\n" return md_contentdef main(): config = load_config() print("🚀 开始抓取热点数据...") weibo_hot = fetch_weibo_hot() print(f"✓ 微博热搜:{len(weibo_hot)} 条") baidu_hot = fetch_baidu_hot() print(f"✓ 百度热搜:{len(baidu_hot)} 条") zhihu_hot = fetch_zhihu_hot() print(f"✓ 知乎热榜:{len(zhihu_hot)} 条") print("📝 生成热点报告...") report = generate_report(weibo_hot, baidu_hot, zhihu_hot) # 保存报告 output_dir = config.get('output_dir', './output') os.makedirs(output_dir, exist_ok=True) today = datetime.now().strftime('%Y-%m-%d') output_path = os.path.join(output_dir, f'{today}-hot-summary.md') with open(output_path, 'w', encoding='utf-8') as f: f.write(report) print(f"✅ 报告已保存:{output_path}")if __name__ == '__main__': main()
代码不复杂,核心就 4 步:
步骤 3:编写配置文件
config.yaml —— 技能的「设置项」。
# 每日热点汇总技能配置# 输出目录output_dir: "./output"# 是否推送到微信草稿箱(需先配置 wewrite 的 wechat 信息)wechat_push: false# 抓取平台开关platforms: weibo: true baidu: true zhihu: true
用户安装后,可以按需修改这些配置。
步骤 4:编写依赖说明
requirements.txt —— 告诉用户需要装哪些 Python 包。
requests>=2.28.0pyyaml>=6.0
就两个基础包,几乎不会踩坑。
步骤 5:编写技能说明书(SKILL.md)
这是最重要的文件。
ClawHub 审核、用户安装前查看的,都是这个文件。
# daily-hot-summary 技能## 功能描述自动抓取微博、百度、知乎的热搜榜,生成每日热点汇总报告(Markdown 格式)。**适合人群:**- 自媒体博主(追热点写稿)- 内容运营(选题参考)- 市场/公关人员(舆情监控)## 安装方式```bashclawhub install daily-hot-summary
使用方式
方式一:命令行执行
cd skills/daily-hot-summarypython3 hot_spider.py
方式二:通过 OpenClaw 自然语言调用
「帮我抓一下今天的热点」
OpenClaw 会自动调用本技能,生成热点报告。
配置说明
编辑 config.yaml:
output_dir:报告保存路径(默认 ./output)wechat_push:是否推送到微信草稿箱platforms:启用的平台(weibo/baidu/zhihu)版本历史
作者
许可证
MIT License
**SKILL.md 的关键点:**1. **一句话说清功能**:别绕弯子2. **安装/使用步骤要具体**:给命令,别只说「运行脚本」3. **配置项解释明白**:每个参数干嘛的,默认值是啥4. **输出示例**:让用户知道会得到什么5. **常见问题**:提前回答,减少售后6. **联系方式**:方便用户反馈### 步骤 6:本地测试在发布前,先本地跑一遍:```bashcd C:\Users\admin\.openclaw\workspace\skills\daily-hot-summarypython3 hot_spider.py
检查:
没问题了,再发布。
四、发布到 ClawHub
测试通过后,就可以发布了。
发布前检查清单
发布命令
# 进入技能目录cd C:\Users\admin\.openclaw\workspace\skills\daily-hot-summary# 发布到 ClawHubclawhub publish
第一次发布会提示你登录 ClawHub(用 GitHub 账号)。
登录后,CLI 会:
发布成功!
你的技能现在可以被任何人安装了:
clawhub install daily-hot-summary
版本号管理
每次更新技能后,记得更新版本号:
clawhub publish --version 1.1.0ClawHub 会保留历史版本,用户可以回退。
五、进阶:让技能更「智能」
上面的例子是基础版。想让技能更有竞争力?可以加这些能力:
1. 增加 AI 分析
不只是抓热点,还能用 LLM 分析:
def analyze_with_llm(hot_list, user_domain): """用 LLM 分析热点,给出选题建议""" prompt = f"""你是资深内容运营。以下是今日热点列表:{hot_list}用户专注领域:{user_domain}请给出:1. 最值得追的 3 个热点(说明理由)2. 每个热点的 2 个选题角度3. 需要注意的风险点""" # 调用 LLM API response = llm.chat(prompt) return response.content
2. 增加定时任务
用 OpenClaw 的 cron 功能,每天自动执行:
# 添加定时任务(每天早上 8 点执行)openclaw cron add --schedule "0 8 * * *" --command "python3 hot_spider.py"
这样你每天醒来,热点报告已经躺在输出目录了。
3. 增加多平台推送
不只是微信,还可以推送到:
每个平台就多加一个推送函数,配置里加个开关就行。
六、技能开发的 5 条建议
最后,分享几个 ClawHub 上的「成功学」。
建议 1:文档比代码重要
我见过太多技能,代码写得牛,但 SKILL.md 就几行字:
「这是一个 XX 技能,运行 xx.py 就行。」
用户一看,懵了:这啥?咋用?配啥?
好的文档,能让 60 分的代码用到 90 分。
花 40% 时间写代码,60% 时间写文档。值得。
建议 2:起名要「望文生义」
技能名直接告诉用户功能:
✅ daily-hot-summary:每日热点汇总
✅ pdf-to-markdown:PDF 转 Markdown
✅ wechat-article-auto-publish:公众号文章自动发布
❌ awesome-tool:啥是 awesome?
❌ my-skill:你的技能关我啥事?
❌ super-ai-bot:太虚了
建议 3:保持更新
技能发布不是一劳永逸。
活跃的开发者,更容易获得信任和推荐。
ClawHub 有「最近更新」榜单,保持更新能增加曝光。
建议 4:适度商业化
你可以:
我倾向于:基础功能免费,高级功能/一对一服务收费。
先让用户用起来,建立信任,再谈转化。
建议 5:别重复造轮子
发布前去 ClawHub 搜一下,也许已经有类似技能。
如果有,你可以:
开源社区的魅力是协作,不是恶性竞争。
七、一些灵感:你可以开发什么技能?
如果你还没想好做什么,这里有一些方向:
内容创作类
数据处理类
自动化类
AI 增强类
个人效率类
最好的技能,源自你自己的痛点。
你天天用的东西,大概率别人也需要。
八、行动清单
最后,给你 3 个任务:
任务 1:找到你的「自动化候选」(30 分钟)
任务 2:写出最小可用版本(2 小时)
任务 3:发布到 ClawHub(30 分钟)
clawhub publish这 3 步走完,你就是 ClawHub 技能开发者了。
结语
技能开发的门槛,远比你想象的低。
不需要你是全栈工程师,不需要你懂复杂的架构。
你会写脚本,你能把事说清楚,就够了。
ClawHub 上有 200+ 技能,很多都是普通用户写的。
他们不是技术大牛,只是把自己的需求变成了产品。
你也可以。
现在,打开编辑器,写下你的第一行代码。
你的第一个技能,也许就是下一个爆款。
如果你觉得这篇文章有帮助:
每周二、四晚 8 点,公众号准时更新。
关于作者:
李宏阳,AIGC 培训讲师,AI 自媒体博主。
专注领域:
商务合作/培训咨询:请公众号后台留言或添加微信(备注「公众号」优先通过)
全平台:公众号/视频号/小红书 → 李宏阳讲 AI
夜雨聆风