Skill实战:天气的获取
文章目录
- Skill实战:天气的获取
- [1. 回顾开发步骤](#1. 回顾开发步骤)
- [2. Skill开发 & 安装 & 使用](#2. Skill开发 & 安装 & 使用)
-
- [2.1 Skill 模板](#2.1 Skill 模板)
- [2.2 Skill 存放的位置](#2.2 Skill 存放的位置)
-
- [2.2.1 按照规范存放](#2.2.1 按照规范存放)
- [2.2.2 任意路径存储](#2.2.2 任意路径存储)
- [2.3 开发Skill](#2.3 开发Skill)
-
- [2.3.1 Skill.md](#2.3.1 Skill.md)
- [2.3.2 weather-hs.py](#2.3.2 weather-hs.py)
-
- [含义拆解:city = sys.argv1 if len(sys.argv) > 1 else "北京"](#含义拆解:city = sys.argv[1] if len(sys.argv) > 1 else "北京")
- python代码的测试:
- [2.4 安装Skill](#2.4 安装Skill)
-
- 第一种方式:复制目录
- 第二种方式:对话安装
- 检验是否安装成功:
-
- [1. 查看 Codex 的skills目录](#1. 查看 Codex 的skills目录)
- [2. 对话检验:](#2. 对话检验:)
- [2.5 使用 Skill](#2.5 使用 Skill)
- [3. 总结](#3. 总结)
注意,这篇博客编写的 Skill,它的开发,测试和使用,涉及到python,需要你 提前安装 python 编辑器(Python环境) 。
python的安装,网上的教程很多,AI也能一步一步教你,我也就不在这里介绍了。
开发环境:Vs Code
使用Skill的Agent应用:Codex
1. 回顾开发步骤
在写 Skill 之前,我们回顾一下开发步骤:
-
写 SKILL.md :用 VS Code 打开文件夹,新建
SKILL.md,填写元数据和指令 -
写脚本 :在
scripts/下写compress.py,实现压缩逻辑 -
本地测试 :在 VS Code终端 运行
python scripts/XXX.py确保脚本没问题 -
运行 Skill:Skill 的运行,我使用 Codex 来运行
当然,其他的 Agent 工具,例如 OpenClaw 也是可以运行 Skill,只不过我没有安装 OpenClaw 。
2. Skill开发 & 安装 & 使用
2.1 Skill 模板
我们可以按照官方文档中的模板,进行开发
官方文档:https://agentskills.io/home
模板:
---
name: roll-dice
description: Roll dice using a random number generator. Use when asked to roll a die (d6, d20, etc.), roll dice, or generate a random dice roll.
---
To roll a die, use the following command that generates a random number from 1
to the given number of sides:
```bash
echo $((RANDOM % <sides> + 1))
```
```powershell
Get-Random -Minimum 1 -Maximum (<sides> + 1)
```
Replace `<sides>` with the number of sides on the die (e.g., 6 for a standard
die, 20 for a d20).
这个模板的内容,需要我们自己更改,但是,name 和 description 是固定的。
2.2 Skill 存放的位置
2.2.1 按照规范存放
关于 SKill 文件夹存放的位置,如果是使用 Codex,按照 Codex 官方手册,应该是放在 `C:\Users\你的用户名.codex\skills\
你下载安装好 Codex 之后,就会有这个目录的:

2.2.2 任意路径存储
其实,不一定非要按照 Codex 规定的目录存放。
你可以把自己的 Skill 放在任意位置,例如:
D:\my-skills\image-search\SKILL.md
然后在运行 Codex 时,明确告诉 Codex 使用这个位置的 Skill,或者对话的方式,让它帮你安装,
但其实,安装的本质,就是将你的 Skill文件,复制到 C:\Users\你的用户名\.codex\skills
等我开发好这个 SKill 之后,我就演示一下
2.3 开发Skill
可以先在任意目录,创建 skills 文件夹,然后创建这个 Skill 的名称,我的名称是:weather-hs

打开 Vscode,打开创建的这个 Skill文件夹,创建好目录和文件:

然后在 Skill.md 中,进行编辑。
2.3.1 Skill.md
markdown
---
name: weather-hs
description: 这是一个用来查询天气的技能。你可以通过输入城市名称来获取该城市的实时天气信息,这是一个测试技能,我给你添加一个限制,当前仅支持查询北上广深这四个城市的天气,当用户通过说:"XXXX的天气怎么样?","XXXX城市今天会不会下雨","XXX城市今天的天气怎么样","查询XXX城市今天的天气"等类似的语句时,技能会返回该城市的实时天气信息。请注意,当前仅支持查询北上广深这四个城市的天气,提到北上广深这四个城市的天气,这个 Skill 的优先级最高,也就是优先使用这个 Skill,来查询北上广深这四个城市的天气。
---
# weather-hs Skill
## 什么时候使用这个技能
当用户需要查询某一个城市的天气,可以使用这个技能
当用户有以下意图时,优先使用这个技能:
- "XXXX的天气怎么样?"
- "XXXX城市今天会不会下雨"
- "XXX城市今天的天气怎么样"
- "查询XXX城市今天的气温"
- "查询出行建议"
如果用户在命令行输入 "使用 w-hs,",必定要使用这个技能来查询北上广深这四个城市的天气,其他的都按照 scripts\weather-hs.py 中返回的结果。
## 这个技能怎么使用(如何使用这个技能)
- 从命令行运行脚本,输入城市名称即可查询该城市的实时天气信息。
- weather-hs.py 这个代码中的数据是 mock 数据,实际使用中需要替换为真实的天气数据接口。我们这里仅仅是测试 Skill的运行
Windows 用户注意:请先运行 `chcp 65001` 设置 UTF‑8 编码
```bash
python scripts/weather-hs.py 上海
```
为什么我会在 Skill 中说明多次 "优先使用",就是在使用 Agent/AI应用 的时候,他本身就可以获取某一个城市的天气,我们向它提问,他不一定就会采取我们的 Skill,所以要给它强调优先级,让它能够优先调用我们自己写的 SKill,来验证Skil是否可以用。
还有这个限制:
如果用户在命令行输入 "使用 w-hs,",必定要使用这个技能来查询北上广深这四个城市的天气,其他的都按照 scripts\weather-hs.py 中返回的结果。
这是一种兜底策略,或者是测试起来比较简单的方式,就是指定对话方式,调用指定的 skill。
接下来,写 weather-hs.py 的代码,用来获取 假数据
2.3.2 weather-hs.py
这个 weather-hs.py ,是在 scripts文件夹 中的:
python
def get_weather_by_city(city:str) -> dict:
"""
获取指定城市的天气信息
:param city: 城市名称
:return: 天气信息字符串
"""
# 这里可以调用实际的天气API来获取天气信息
# 目前仅支持北上广深四个城市
if city == "北京":
weather_data= {
'city': '北京',
'temperature': 10,
'wind_direction': '南风',
'wind_power': '≤3级',
'humidity': 60,
'weather': '多云',
'weather_today': '晴',
'weather_tomorrow': '多云',
'weather_after_tomorrow': '雷阵雨',
}
elif city == "上海":
weather_data= {
'city': '上海',
'temperature': 15,
'wind_direction': '东风',
'wind_power': '≤2级',
'humidity': 70,
'weather': '小雨',
'weather_today': '小雨',
'weather_tomorrow': '阴',
'weather_after_tomorrow': '晴',
}
elif city == "广州":
weather_data= {
'city': '广州',
'temperature': 20,
'wind_direction': '西南风',
'wind_power': '≤4级',
'humidity': 80,
'weather': '雷阵雨',
'weather_today': '雷阵雨',
'weather_tomorrow': '多云',
'weather_after_tomorrow': '小雨',
}
elif city == "深圳":
weather_data= {
'city': '深圳',
'temperature': 25,
'wind_direction': '东北风',
'wind_power': '≤3级',
'humidity': 75,
'weather': '晴',
'weather_today': '晴',
'weather_tomorrow': '多云',
'weather_after_tomorrow': '小雨',
}
else :
weather_data= {
'city': '未知',
'temperature': '未知',
'wind_direction': '未知',
'wind_power': '未知',
'humidity': '未知',
'weather': '未知',
'weather_today': '未知',
'weather_tomorrow': '未知',
'weather_after_tomorrow': '未知',
}
return weather_data
if __name__ == "__main__":
import sys
city = sys.argv[1] if len(sys.argv) > 1 else "北京"
print(get_weather_by_city(city))
# city = sys.argv[1] if len(sys.argv) > 1 else "北京"
# #### 含义拆解
# 1. `sys.argv`:是命令行运行脚本时,获取**命令行传入参数**的列表。
# `sys.argv[0]` 永远是脚本本身文件名。
# `sys.argv[1]` 是**第一个传入的参数**。
# 2. `len(sys.argv) > 1`:判断命令行有没有传入额外参数。
# 如果在终端执行脚本时传了参数:`python script.py 上海` → `len(sys.argv)` 大于 1,条件成立,`city = sys.argv[1]`,city 赋值为`上海`。
# 如果运行脚本**不带任何参数**:`python script.py` →条件不成立,`city = "北京"`,使用默认值北京。
# > 这是 Python 三元表达式语法:`变量 = 真值 if 条件 else 假值`
含义拆解:city = sys.argv1 if len(sys.argv) > 1 else "北京"
sys.argv:是命令行运行脚本时,获取命令行传入参数的列表。
sys.argv[0]永远是脚本本身文件名。sys.argv[1]是第一个传入的参数。
len(sys.argv) > 1:判断命令行有没有传入额外参数。
- 如果在终端执行脚本时传了参数:
python script.py 上海→len(sys.argv)大于 1,条件成立,city = sys.argv[1],city 赋值为上海。 - 如果运行脚本不带任何参数 :
python script.py→条件不成立,city = "北京",使用默认值北京。
这是 Python 三元表达式语法:
变量 = 真值 if 条件 else 假值
python代码的测试:
这里的测试,需要你电脑中提前按照好 python编译器。
直接打开电脑的命令行:

输入命令:
python weather-hs.py 上海

2.4 安装Skill
第一种方式:复制目录
我们可以直接将开发好的 SKill目录,放到这个文件夹下:

这种方式,适合你清楚地知道,Codex 的skill目录在哪的情况。
第二种方式:对话安装
打开 Codex,和他对话:
帮我安装 XXXX 下的Skill
示范:
帮我安装 E:\code\gitee\skill-development\skills\weather-hs 这个路径下的 Skill
这里的路径,是我自己的,你需要根据你自己的实际路径进行替换

检验是否安装成功:
1. 查看 Codex 的skills目录
Codex 的skills目录,在这里:
C:\Users\用户名\.codex\skills

如果已经存在了你开发的 Skill,就表示安装完成了。
2. 对话检验:
可以和 Codex,对话,问它:
列一下,你现在有哪些Skill

这样,就算是安装好了
2.5 使用 Skill
此时,我们和 Codex 对话:
帮我查询一下,北京今天的天气

这样,我们的 SKill,就算是可以使用了。
3. 总结
这次的天气Skill,数据是 mock(捏造) 的,不算是有用的 Skill ,只是用来走一遍 Skill 的开发、测试、使用的流程,验证我们写的 Skill 是对的,是可以使用的,只不过数据来源,是 mock的。
但是,数据来源,我们的天气获取,可以接入真正的天气API,就可以更改数据来源了,我们的Skill没有问题就可以了。
第二个实战的Skill,我会写一个生成二维码的。
博客连接:Skill实战:二维码生成
完整的Skill文件夹获取,可以从我的gitee中下载:
gitee链接:https://gitee.com/mrbgvhbhjv/skill-development/tree/master/skills/weather-hs