一个“通用模板”和一个“实战案例”(以查询天气为例)。
你可以直接复制下面的结构,修改成你想要的功能。
📂 第一步:建立技能目录结构
首先,在 OpenClaw 的 skills 目录下创建一个新文件夹。
- 默认路径:
~/.openclaw/skills/ - 你的技能文件夹名:建议用英文,比如
my-weather-skill
在这个文件夹里,你需要创建两个文件:
SKILL.md:这是技能的“身份证”和“说明书”,告诉 AI 这个技能是干嘛的。main.py:这是技能的“大脑”,写具体的 Python 代码。
目录结构长这样:
~/.openclaw/skills/my-weather-skill/
├── SKILL.md
└── main.py📝 第二步:编写 SKILL.md (说明书)
这个文件非常重要,AI 全靠它来决定什么时候调用你的代码。
通用模板:
---
name: my-unique-skill-name # 技能唯一标识,用英文
description: 一句话描述技能功能,例如:查询指定城市的实时天气
version: 1.0.0
metadata:
openclaw:
requires:
bins: ["python3"] # 依赖 python3 环境
---
# 技能名称 (中文)
## 功能描述
详细描述这个技能能做什么。
例如:当用户询问某个城市的天气、温度、是否下雨时,使用此技能。
## 使用场景
- "北京今天天气怎么样?"
- "上海明天会下雨吗?"
- "帮我查查深圳的气温"
## 参数说明
- city (str): 城市名称,例如 "北京", "Shanghai"🐍 第三步:编写 main.py (执行逻辑)
这是你之前问的 Python 代码部分。记住核心原则:接收参数 -> 处理逻辑 -> return 结果。
实战案例:天气查询脚本
(这个例子演示了如何接收参数,并返回结果给 OpenClaw)
import sys
import json
def get_weather(city: str) -> str:
"""
模拟查询天气的逻辑
实际使用时,你可以在这里替换成 requests 调用真实的天气 API
"""
# 1. 这里可以写 print 用于你在控制台调试
print(f"正在查询城市: {city} 的天气...")
# 模拟一些逻辑
if "北京" in city or "Beijing" in city:
weather_info = "北京:晴,25°C,微风,空气质量优。"
elif "深圳" in city or "Shenzhen" in city:
weather_info = "深圳:多云,28°C,湿度 80%。"
else:
weather_info = f"{city}:数据暂未收录,请尝试查询北京或深圳。"
# 2. 必须使用 return 返回字符串,OpenClaw 才能把结果读出来
return weather_info
# --- OpenClaw 调用入口 ---
# 当 OpenClaw 调用此脚本时,会通过命令行参数传递 JSON 格式的参数
if __name__ == "__main__":
# 获取命令行参数
# OpenClaw 通常会以 JSON 字符串的形式传入参数,例如 '{"city": "北京"}'
if len(sys.argv) > 1:
input_json = sys.argv[1]
try:
args = json.loads(input_json)
city = args.get("city", "未知城市")
# 调用你的核心函数
result = get_weather(city)
# 输出结果 (OpenClaw 会捕获标准输出或特定的返回码)
# 在简单的脚本模式下,直接 print 结果通常也能被捕获,
# 但最稳妥的是 print 一个 JSON 结果或者直接 print 文本
print(result)
except Exception as e:
print(f"参数解析错误: {e}")
else:
print("未接收到参数,请在 OpenClaw 中通过对话调用。")🚀 第四步:如何让 OpenClaw 识别
- 保存文件:确保
SKILL.md和main.py已保存。 重载技能:
打开终端,运行以下命令让 OpenClaw 重新扫描技能目录:openclaw skills reload或者重启你的 OpenClaw 会话。
- 测试:
在对话框里输入:“帮我查查北京的天气”。
💡 避坑指南
returnvsprint:- 在上面的脚本模式中,因为是通过命令行参数调用的,所以通常使用
print()输出最终结果即可(OpenClaw 会捕获脚本的标准输出)。 - 但如果你在函数内部做调试,可以用
print("调试信息...", file=sys.stderr)输出到错误流,这样不会干扰返回给 AI 的结果。
- 在上面的脚本模式中,因为是通过命令行参数调用的,所以通常使用
依赖库:
- 如果你在
main.py里用了requests等第三方库,记得先在终端运行pip install requests安装好。
- 如果你在
路径问题:
- 脚本里的文件路径最好使用绝对路径,或者在脚本开头动态获取脚本所在目录,防止运行出错。
现在,你可以把 get_weather 函数里的逻辑换成任何你想做的功能(比如操作 Excel、调用 API、处理文件),只要保持这个外壳不变即可!
评论已关闭