智能天气助手:用 ReAct Agent 让天气查询"活"起来

举报
ioiy 发表于 2026/11/08 18:00:12 2026/11/08
【摘要】 传统天气 App 只给你一屏数据;智能天气助手能听懂"明天穿什么",先帮你查天气,再给出穿衣和出行建议——从**数据展示**到**智能服务**,中间的桥梁就是 ReAct Agent。## ReAct 是什么?为什么选它?ReAct = Reasoning + Acting,推理与行动交替进行。天气助手的工作流就是它的缩影:1. **观察**:用户说"明天杭州天气如何?"2. **推理**:...

传统天气 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 架构做编排**。天气只是个例子,换成汇率查询、股票分析、物流追踪,架构完全一样。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。