| name | get-weather |
| description | 获取指定城市的实时天气信息。当用户询问天气、气温、湿度、风力、天气预报、气候状况、穿衣建议、出行建议、或者任何与天气相关的问题时,立即使用此技能。即使用户只是简单地问"今天天气怎么样?"或"外面冷吗?",也要使用此技能来提供准确的天气信息。支持全球主要城市,包括中文城市名和英文城市名。 |
获取天气技能
使用场景
当用户询问天气相关信息时,立即使用此技能。包括但不限于:
- 查询当前天气
- 询问气温、湿度、风力
- 获取天气预报
- 询问穿衣建议
- 了解出行天气条件
- 比较不同城市的天气
- 查询特定时间的天气
执行步骤
1. 提取城市信息
- 从用户消息中识别城市名称
- 支持中文城市名(如"北京"、"上海")和英文城市名(如"Beijing"、"New York")
- 如果用户未指定城市,默认使用用户所在位置或最近提到的城市
2. 调用天气 API
使用 fetch_url 工具访问 wttr.in 天气服务:
fetch_url("https://wttr.in/{城市名}?format=j1&lang=zh")
- 将城市名转换为英文拼写(中文城市名会自动处理)
- 添加
lang=zh 参数获取中文天气描述
- 使用
format=j1 获取 JSON 格式数据
3. 解析天气数据
从返回的 JSON 中提取关键信息:
- 当前天气:
current_condition[0].weatherDesc[0].value 和 current_condition[0].lang_zh[0].value
- 温度:
current_condition[0].temp_C(摄氏度)和 current_condition[0].temp_F(华氏度)
- 体感温度:
current_condition[0].FeelsLikeC
- 湿度:
current_condition[0].humidity
- 风速:
current_condition[0].windspeedKmph(公里/小时)
- 风向:
current_condition[0].winddir16Point
- 能见度:
current_condition[0].visibility(公里)
- 气压:
current_condition[0].pressure(毫巴)
4. 生成自然语言回复
用友好、自然的中文向用户汇报天气情况,包括:
- 当前天气状况
- 温度(摄氏度和华氏度)
- 体感温度
- 湿度百分比
- 风速和风向
- 能见度
- 根据天气情况提供穿衣或出行建议
示例
示例 1:简单查询
用户:「北京天气怎么样?」
执行流程:
- 提取城市:北京 → Beijing
- 调用:
fetch_url("https://wttr.in/Beijing?format=j1&lang=zh")
- 解析结果
- 回复:「北京当前天气:薄雾,温度 15°C(体感 15°C),湿度 59%,北北东风 4公里/小时,能见度 5公里。建议:天气不错,适合外出。」
示例 2:详细查询
用户:「上海今天的温度、湿度和风力是多少?」
执行流程:
- 提取城市:上海 → Shanghai
- 调用:
fetch_url("https://wttr.in/Shanghai?format=j1&lang=zh")
- 解析结果
- 回复:「上海当前天气:晴,温度 18°C(64°F),体感温度 18°C,湿度 65%,东南风 8公里/小时,能见度 10公里。」
示例 3:未指定城市
用户:「今天天气如何?」
执行流程:
- 未指定城市,询问用户或使用默认城市
- 回复:「您想查询哪个城市的天气呢?比如北京、上海、广州等。」
高级功能
多城市比较
如果用户询问多个城市的天气,依次查询并对比:
cities = ["Beijing", "Shanghai", "Guangzhou"]
for city in cities:
weather_data = fetch_url(f"https://wttr.in/{city}?format=j1&lang=zh")
天气预报
从 weather 数组中获取未来几天的预报数据。
备用方案
如果 wttr.in 服务不可用,使用备用方案:
注意事项
-
城市名处理:
- 中文城市名会自动转换为拼音
- 特殊字符需要 URL 编码
- 支持"城市,国家"格式(如"Paris,France")
-
API 限制:
- wttr.in 有请求频率限制
- 如果遇到限制,等待几秒后重试
-
错误处理:
- 城市不存在:返回友好提示
- API 错误:尝试备用方案
- 网络问题:建议稍后重试
-
单位转换:
- 默认使用公制单位(摄氏度、公里/小时)
- 可根据用户偏好提供英制单位
测试用例
测试 1:基本功能
输入:「查询北京的天气」
预期输出:包含北京当前天气信息的自然语言描述
测试 2:中文城市名
输入:「上海今天热吗?」
预期输出:包含上海温度和天气状况的回复
测试 3:未指定城市
输入:「天气怎么样?」
预期输出:询问用户要查询哪个城市
测试 4:详细查询
输入:「告诉我纽约的温度和湿度」
预期输出:包含纽约温度和湿度的详细天气信息
技能优化建议
- 缓存机制:对频繁查询的城市进行缓存
- 位置服务:集成 IP 定位获取用户默认位置
- 天气预警:添加极端天气预警功能
- 历史数据:提供历史天气查询
- 可视化:生成简单的天气图表
最后更新:2024-03-26
版本:v2.0
兼容性:需要 fetch_url 工具,支持网络访问