天气预报 Skill
此技能提供全球任意城市的当前天气及未来3天预报查询功能。
触发词
当用户提出以下类型的问题时,应使用此技能:
中文触发词:
- "XX天气怎么样"
- "XX今天天气"
- "XX未来几天天气"
- "帮我查一下XX的天气"
- "XX下雨吗"
- "XX气温多少度"
- "深圳天气" / "北京天气" 等任意城市
英文触发词:
- "weather in XX"
- "what's the weather in XX"
- "forecast for XX"
执行逻辑
步骤1:识别城市名称
从用户输入中提取城市名称。常见模式:
- 直接提及城市:"深圳天气" → 城市:深圳
- 问题中包含城市:"北京今天下雨吗" → 城市:北京
- 未指定城市:使用默认城市(深圳)
默认城市: 深圳
步骤2:调用天气 API
使用 wttr.in 免费天气服务,无需 API Key。
API 端点:
https://wttr.in/{城市}?format=j1&lang=zh
示例请求:
curl "https://wttr.in/深圳?format=j1&lang=zh"
Python 调用方式(推荐):
import requests
city = "深圳"
url = f"https://wttr.in/{city}?format=j1&lang=zh"
response = requests.get(url)
data = response.json()
步骤3:解析天气数据
API 返回 JSON 格式,关键字段:
当前天气(current_condition):
- temp_C:当前气温(摄氏度)
- FeelsLikeC:体感温度
- humidity:湿度(%)
- windspeedKmph:风速(公里/小时)
- winddir16Point:风向
- weatherDesc[0].value:天气描述(晴、阴、雨等)
- uvIndex:紫外线指数
- visibility:能见度(公里)
未来预报(weather):
数组,包含今天及未来2天,每天有:
- date:日期
- maxtempC / mintempC:最高/最低气温
- hourly:每小时详细预报
- hourly[0].weatherDesc[0].value:天气描述
步骤4:格式化输出
输出应简洁、易读,包含:
- 当前天气摘要(2-3 句话)
- 详细数据表格(气温、体感、湿度、风向风速、紫外线)
- 未来3天预报(日期、天气、温度范围)
- 生活建议(根据天气给出,如带伞、防晒等)
输出模板:
📍 {城市} 天气预报
【当前天气】
{天气描述},气温 {temp_C}°C,体感 {feels_like_C}°C
湿度 {humidity}%,{风向}风 {风速} km/h
【未来预报】
{date1}:{天气},{min_temp} ~ {max_temp}°C
{date2}:{天气},{min_temp} ~ {max_temp}°C
{date3}:{天气},{min_temp} ~ {max_temp}°C
💡 温馨提示:{根据天气给出的建议}
使用 scripts/weather.py
执行 scripts/weather.py 脚本获取天气数据:
python scripts/weather.py [城市名称]
示例:
python scripts/weather.py 深圳
python scripts/weather.py Beijing
如果不提供城市参数,默认查询深圳天气。
注意事项
-
城市名称支持:
- 中文城市名(深圳、北京、上海等)
- 英文城市名(Shenzhen、Beijing、Shanghai等)
- 拼音(Shenzhen 等同 Shenzhen) -
网络错误处理:
如果 wttr.in 访问失败,提示用户检查网络连接,建议稍后重试。 -
城市不存在处理:
如果返回错误,提示用户确认城市名称是否正确,建议尝试使用英文城市名。 -
语言设置:
- 默认使用lang=zh获取中文天气描述
- 如果用户使用英文提问,可改为lang=en
示例对话
用户: "深圳今天天气怎么样?"
执行:
1. 识别城市:深圳
2. 调用 API 获取天气数据
3. 格式化输出当前天气及未来预报
用户: "北京未来三天会下雨吗?"
执行:
1. 识别城市:北京
2. 获取未来3天预报
3. 重点检查 hourly 中是否有降雨描述
4. 输出降雨概率和具体时段
用户: "天气"
执行:
1. 未识别到城市,使用默认城市(深圳)
2. 查询深圳天气并输出
3. 提示用户可指定其他城市