共计 1407 个字符,预计需要花费 4 分钟才能阅读完成。
天气查询是智能助手的刚需功能,比如出门前询问 ” 今天会下雨吗 ”,或是旅行时查询目的地天气。下面我会手把手带你在 OpenClaw 平台上实现这个功能。

一、技术背景扫盲
OpenClaw 的技能系统像乐高积木,分为三层:
- 交互层 :处理用户语音 / 文本输入(比如 ” 北京明天天气 ”)
- 逻辑层 :通过意图识别和槽位填充理解用户需求(识别出 location= 北京,date= 明天)
- 服务层 :调用天气 API 并格式化返回结果
天气 API 选型建议:
- 和风天气:免费版支持 3 天预报,响应速度快
- 心知天气:数据源丰富但免费额度较少
- 阿里云天气:企业级服务,适合高并发场景
推荐新手先用和风天气练手,注册后能立即拿到 API 密钥。
二、手把手配置流程
1. 技能注册
- 登录 OpenClaw 开发者平台
- 进入「技能工作室」点击「新建技能」
- 技能类型选择「自定义技能」
- 填写基础信息(名称填 weather,调用词填天气)
2. 意图配置
新建 weather_query 意图,添加以下槽位:
- location(城市名,必填)
- date(日期,默认 today)
- unit(温度单位,默认 celsius)
记得给每个槽位配置同义词,比如 location 可以映射 ” 帝都 -> 北京 ”。
3. API 对接
在代码配置区粘贴这个模板(关键字段已加注释):
{
"version": "1.0",
"api": {
"endpoint": "https://free-api.heweather.com/s6/weather",
"method": "GET",
"params": {
"location": "$slot.location", // 动态替换用户输入的城市
"key": "YOUR_API_KEY" // 这里填和风天气的密钥
},
"responseMapping": {"weather": "$.HeWeather6[0].now.cond_txt", // 提取天气状况
"temp": "$.HeWeather6[0].now.tmp" // 提取当前温度
}
}
}
4. 测试验证
在模拟器中输入 ” 查询上海天气 ”,应该能看到类似这样的返回:
{
"response": {
"text": "上海当前晴转多云,温度 28 摄氏度",
"card": {
"title": "上海天气",
"content": "湿度:65%\n 风速:3 级"
}
}
}
三、避坑指南
高频错误 TOP3
- 密钥未生效 :和风天气新注册的 API 需要 10 分钟生效
- 城市名解析失败 :记得在槽位配置里添加 ” 魔都 -> 上海 ” 这类映射
- API 限流 :免费版每分钟只能请求 5 次,建议加延迟重试逻辑
缓存优化建议
在代码里添加这段逻辑可以大幅降低 API 调用:
# 用城市 + 日期作为缓存键
cache_key = f"{location}_{date}"
if cache.has(cache_key):
return cache.get(cache_key)
else:
data = call_weather_api()
cache.set(cache_key, data, ttl=3600) # 缓存 1 小时
return data
四、进阶思考
现在你的天气技能已经能跑通了,但如果用户问 ” 北京空气质量怎么样 ” 该怎么扩展?提示:和风天气的 air 接口可以获取 AQI 数据,需要新增 air_quality 意图和 pm2.5 槽位。
整个配置过程最花时间的是调试 API 返回数据的解析逻辑,建议先用 Postman 测试清楚数据结构。如果遇到卡点,OpenClaw 的开发者社区有很多现成的解决方案可以参考。
正文完
