智能天气助手:用 ReAct Agent 让天气查询"活"起来
传统天气 App 只给你一屏数据;智能天气助手能听懂"明天穿什么",先帮你查天气,再给出穿衣和出行建议——从**数据展示**到**智能服务**,中间的桥梁就是 ReAct Agent。
## ReAct 是什么?为什么选它?
ReAct = Reasoning + Acting,推理与行动交替进行。天气助手的工作流就是它的缩影:
1. **观察**:用户说"明天杭州天气如何?"
2. **推理**:判断意图 → 需要调天气 API
3. **行动**:调用 weather_reporter 工具
4. **观察**:拿到天气数据
5. **推理**:分析数据,组织回复
6. **响应**:给出天气 + 穿衣建议
这个"想一步做一步"的模式,比一次性把所有信息塞给模型再等它输出,更可靠、也更可控。
## 技术选型
| 组件 | 选择 | 为什么 |
|------|------|--------|
| Agent 框架 | openJiuwen Agent Core | 原生支持 ReAct,工具集成简单 |
| LLM | DeepSeek(兼容 OpenAI 格式) | 推理能力强,API 兼容性好 |
| 天气数据源 | Open-Meteo | 免费、无需 API Key,开源气象 API |
| 定位服务 | ip-api.com | 未指定城市时自动 IP 定位 |
天气数据用 Open-Meteo 是个实用技巧——Geocoding API 做城市名转经纬度,Forecast API 拿 7 日预报,零成本起步。
## 三个值得注意的设计
### 1. WMO 天气码映射
Open-Meteo 返回的是整数天气码(0=晴,95=雷暴),不映射成中文,用户看不懂。一个简单的字典就搞定:
wmo_codes = {
0: "晴朗", 2: "多云", 3: "阴天",
61: "小雨", 63: "中雨", 65: "大雨",
95: "雷暴", 96: "雷暴+冰雹",
# ... 完整映射见原文
}
### 2. 多轮对话记忆
用户先问"南京天气怎么样",再问"那后天呢"——助手需要**自动继承城市上下文**。openJiuwen 通过 Session + Checkpointer 机制实现,默认 in_memory 存储,会话内连续追问无需重复说城市名。
### 3. 提示词约束边界
System Prompt 里明确写了"与天气无关的问题不回答,介绍自己的能力"——这条规则让助手**不会跑题**,避免被当成通用聊天机器人。同时要求"先查天气再给建议",保证建议基于真实数据而非编造。
## 效果长什么样
>>> 明天穿什么衣服
👕 穿衣建议
- 短袖T恤、薄衬衫,透气为主
- 建议穿防水的凉鞋或运动鞋,路面湿滑
- 必备品:带伞!
>>> 周末适合户外活动吗
🚶 出行建议
- 气温较高,体感闷热潮湿,记得多补充水分
- 适合在家放松或去室内场所逛逛
不是干巴巴的"晴 26°C",而是结合天气给出的**生活化建议**——这才是"智能"二字的体现。
## 小结
这个项目的核心思路可以迁移到很多场景:**LLM 做推理和表达,外部 API 做数据获取,ReAct 架构做编排**。天气只是个例子,换成汇率查询、股票分析、物流追踪,架构完全一样。
- 点赞
- 收藏
- 关注作者
评论(0)