乐于分享
好东西不私藏

花一下午,给你的公众号接了个天气预报AI助手

花一下午,给你的公众号接了个天气预报AI助手

事情是这样的。

前两天我的公众号后台收到一条消息:“今天带不带伞?”

我愣了一下。后来才反应过来——估计有粉丝把我的号当天气预报机器人了。没办法,我平时发的内容太像真人,给人家整出信任感来了。

行吧,那我就干脆做一个呗。不花钱、一下午就能搞定、回复得比女朋友还贴心。

今天就把整个流程捋一遍。看完你也能给公众号或微信号加一个天气预报对话机器人,零成本的那种。


一、这玩意儿本质上是个啥

先帮小白把逻辑理清楚。

你给公众号发个消息,比如“南京明天天气”,后台拿到这个消息,做三件事:

  1. 理解你要干啥——这叫意图识别。可以很蠢,比如看到“天气”这个词就直接触发;
  2. 调天气接口查数据——随便找个免费天气 API;
  3. 把数据拼成人话回给你——比如“明天南京多云,12°C~21°C,出门不用带伞。”

所以不是什么黑科技,就是一个带 API 调用的自动回复

我选的方案:微信公众号 + 微信对话开放平台(腾讯自家的免费产品)+ 和风天气 API(有免费额度)。

为什么不直接用云函数写?因为对话平台自带意图识别、上下文、技能配置,想改回复不用改代码,比较省命。


二、准备工作:三个东西先注册好

动手之前,先把材料备齐。

1. 微信公众号订阅号就行,个人就能注册,用来做测试完全够。

2. 微信对话开放平台

地址:https://openai.weixin.qq.com

用公众号绑定的微信扫码登录,授权一下就绑上了。这个平台可以让你用“技能”的方式配自动回复,不需要自己搭服务器。

3. 和风天气 API Key

地址:https://dev.qweather.com

注册后创建一个免费开发者项目,拿到 Key。免费版每天能调用 1000 次,够你个人玩到退休。


三、核心环节:手把手配一个天气技能

微信对话开放平台里,高级自动回复靠的是技能。我们现在就创建一个天气技能。

步骤1:创建技能

进入对话平台后台 -> 自定义技能 -> 新建技能。 技能名称就写:天气查询

步骤2:创建意图

意图的意思就是“用户想干嘛”,这里我们建一个叫查天气的意图。

然后加几个语料(用户可能会说的话):

北京天气
今天南京会不会下雨
后天上海多少度
深圳这周天气怎么样
杭州明天带不带伞
……

多写几条,平台会自动训练匹配。

步骤3:写字典(抓关键信息)

光有意图不够,你得提取城市和时间。

在意图配置里,可以添加一个叫词典的东西。新建两个词典:

  • 城市词典:把常见城市名扔进去
  • 时间词典:今天、明天、后天、这周、下周……

加完之后,用户的问句里平台就能自动把#城市##时间#抠出来,传给下一步用。

步骤4:配置服务(调API)

这里的“服务”就是你实际调天气接口的地方。对话平台支持直接用云函数,我们就用腾讯云函数——免费额度也够。

新建一个云函数,选 Node.js 16 环境。核心代码如下:

const axios = require('axios');

exports.main = async (event) => {
// 从对话平台传过来的参数里拿到城市和时间
const city = event.slot['城市'] || '北京';
const time = event.slot['时间'] || '今天';

// 调天气API,换成你自己的key
const key = '你的和风天气KEY';
const geoUrl = `https://geoapi.qweather.com/v2/city/lookup?location=${encodeURIComponent(city)}&key=${key}`;
const geoRes = await axios.get(geoUrl);
const cityId = geoRes.data.location[0].id;

// 根据时间选接口:今天/明天用3天预报,后面用7天
const dayMap = { '今天'0'明天'1'后天'2 };
const dayOffset = dayMap[time] !== undefined ? dayMap[time] : 0;
const weatherUrl = `https://devapi.qweather.com/v7/weather/7d?location=${cityId}&key=${key}`;
const weatherRes = await axios.get(weatherUrl);
const dayData = weatherRes.data.daily[dayOffset];

// 组装回复
const reply = `${time}${city}天气:${dayData.textDay},` +
`${dayData.tempMin}°C ~ ${dayData.tempMax}°C,` +
`${dayData.windDirDay}${dayData.windScaleDay}级。` +
                (dayData.textDay.includes('雨') ? '建议带伞哦🌂' : '不用带伞~');

return { reply: reply };
};

解释几个要点

  • 和风天气的 API 是先查城市 ID,再拿天气,所以要调两个接口。
  • “今天/明天”这种词没法直接给 API,要自己映射成数组下标。
  • 带伞建议就硬编码,看到“雨”字就触发,简单粗暴。

步骤5:把云函数绑定到技能服务

云函数部署后,会有一个触发器地址。回到对话平台技能配置里的“服务调用”,选“腾讯云函数”,填上函数名和区域,参数映射那里把提取的城市时间槽位传给云函数。搞定。


四、测试一下,看它理不理你

用你自己微信给公众号发消息:

  • “北京明天天气”
  • “后天杭州带伞吗”
  • “上海这周什么天气”

如果能回出来正确信息,恭喜你,已经成功了。

如果回复“我不太懂”,检查三个地方:

  1. 意图里的语料够不够(多写几条,包含不同说法);
  2. 城市有没有在词典里(没加的城市它匹配不到);
  3. 云函数日志,看 event.slot 是不是正确拿到了参数。

我上次踩坑就是城市词典忘加“哈尔滨”,朋友在东北冻够呛,骂我是骗子。


五、进阶玩法:让你的助手更像人

上面那个版本能用,但比较呆。我给几个“更像真人”的升级方向,按需选用。

1. 加一点随机语气

别每次都回“北京明天天气”,冷冰冰的。可以弄个数组随机选:

const opening = ['来咯来咯~''稍等下,我看看哈~''收到,天气预报已查收📡'];
const randomOpen = opening[Math.floor(Math.random() * opening.length)];

2. 加上穿衣建议(很实用)

根据最低温给个简单建议:

let clothes = '';
if (tempMin < 10) clothes = '天冷,穿厚外套。';
elseif (tempMin < 20) clothes = '建议穿件薄外套。';
else clothes = '短袖走起,注意防晒。';

3. 支持“每周天气”概览

问“这周天气”时,直接遍历 7 天数据拼成一段简略回复,别让用户问 7 次。

4. 配上图标

微信支持 emoji,用一下没人怪你。晴天☀️,下雨🌧,下雪❄️,多云⛅,让你的回复自带表情包气质。


六、花多少钱?我帮你算好了

按我这种方案:

  • 微信对话开放平台:免费
  • 腾讯云函数:调用量不超免费额度,免费
  • 和风天气 API:免费版每天 1000 次,免费

结论:零元购。

唯一成本就是一下午的时间。而这一下午换来的,是以后每次朋友问你天气,你都可以把公众号甩过去,相当解压。


最后说一句扎心的。

市面上很多“AI天气助手”报价几百上千,无非就是把上面这套流程多套了层壳。你要不是特在意那种“包装感”,自己手搓一个足够用,而且还知道它每一步是怎么跑的,要改啥都不求人。

别被“AI技能”这个词唬住,它就是个带 API 的自动回复,你比它聪明。

程序员小白条的编程日记:https://xbt.xiaobaitiao.top/ (分享如何拿到腾讯实习 Offer 和多个中大厂的面试机会,大学经历、求职经历、职场工作、创作经历、生活日常、面经、技术分享、毕设项目指导)定期更新内容,成长打怪系列,分享从大一到大四的完整面经,更新好玩的,有趣的事!看完可冲中大厂!dy同名程序员小白条,主要口述面试经历和分享我认为的实用网站,会比面经讲的详细很多,以真实面试录音为主!公粽号:程序员落叶(秋招技巧、面经、公司投递表、谈offer)

欢迎关注上方公众号!感谢支持!一起进步,共勉!