Node.js实战:搭建一个集成多功能API接口的智能问答机器人

wapicn99 2026-07-15 12:16:59

 

周末闲来无事,想着用Node.js搭个能查天气、讲笑话、算运势的问答机器人,一方面练练手,一方面解决群聊里的“日常一问”。这篇文章就记录下整个搭建过程,包括框架选择、API集成、上下文管理以及部署,送给所有想摸鱼但手痒的开发者。

一、项目构想与技术选型

机器人主要实现以下功能:

  • 天气查询(某地实时天气)

  • 笑话随机推送

  • 星座运势

  • 简单的单位换算

  • 聊天兜底(第三方闲聊API)

框架选了Express做轻量Web服务,对话交互通过WebSocket完成,方便后续接入网页聊天组件。另外引入Axios做API请求,dotenv管理密钥,整个项目目录结构干净,无冗余。

二、天气模块:IP自动定位更香

天气接口需要城市名,但用户输入往往不规范,比如“南京”或“江苏南京”。我第一步做了个地名清洗,去除“省”“市”等后缀,并支持拼音自动补全。但更聪明的做法是利用用户IP定位。

req.ip获得IP后,调用免费的IP定位API(某开放平台每天3000次免费),拿到城市名,再请求天气API。两个接口一个链式调用,前端无感。

javascript

async function getWeatherByIP(ip) {
  const loc = await axios.get(`https://wapi.cn/api_detail/66/174.html`);
  const city = loc.data.city;
  const weather = await axios.get(`https://wapi.cn/api_detail/66/174.html`);
  return `当前${city}天气:${weather.data.weather},温度${weather.data.temp}℃`;
}

这个小设计让机器人显得格外“聪明”,知道你在哪儿,也能给出对应的天气。返回文本配上emoji,聊天感十足。

 

三、笑话与运势:给机器人加点人情味

笑话接口返回段子数组,每次随机挑一条。为了避免重复,我在内存里维护了一个最近50条的队列,优先取不在队列里的笑话,这样用户不会听到重复的。如果全部重复,再重新初始化队列。

星座运势采用了前面提到的星座API,用户输入“双子座今日运势”,机器人提取星座名称,调接口,拿到幸运数字、颜色和运势概述,拼成一条走心回复。加上一点随机延迟,模拟人类思考过程,用户反馈很好,说“感觉像在和真人聊天”。

 

四、闲聊兜底:不懂也要优雅应对

当用户问题没命中任何意图时,不能尴尬地沉默。我接了一个免费的智能闲聊API,把用户的原始问题作为输入,获得回复。虽然有时候回复逻辑比较飘,但至少不会冷场。而且我加了个过滤层,如果闲聊接口返回的置信度低于0.6,就统一回复一句土味情话或者哲理短句,由另一个金句接口提供。这种多层次兜底,整体体验丝滑。

 

五、对话上下文管理

真正的智能体现在多轮对话。我用一个简单的Map存储每个会话ID的历史记录(最多10条),每次收到新消息,把历史作为上下文一并传给意图分析模块——这个模块我是用简单的关键词匹配做的,没上NLP,因为功能有限。

比如用户先问“南京天气”,接着问“那后天呢”,机器人通过上下文知道城市是南京,接口请求时带上日期“后天”,最终返回后天天气。这种简易状态管理在原型阶段足够好用,而且内存占用极低。

 

六、部署与监控

最后一步,我把项目部署到一台低配云服务器上,用PM2管理进程。配置了日志轮转,避免硬盘写满。同时,为每个API调用加上耗时统计,超过2秒的请求单独记录,方便后续排查。还做了健康检查端点/health,返回各API连通状态,放在UptimeRobot上监控,出问题秒级告警。

整个项目从开始写到上线只花了两天,代码量不超过800行,但功能之丰富、体验之顺滑,超过许多付费的聊天机器人平台。这就是用轮子的魅力,把精力集中在交互设计上,而不是重复造基础服务。

如果你也准备搭一个类似的小玩意儿,强烈建议直接用现成的API开始堆功能。别在底层耗费热情,快速拼出成品,然后骄傲地发到朋友圈和GitHub,那种成就感,绝对能点亮一整个周末。

 

#Node.js #API接口 #智能机器人 #聊天机器人 #开发实战 #Express #免费API #WebSocket #项目分享

...全文
379 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,816

社区成员

发帖
与我相关
我的任务
社区描述
就等你来冒个泡~
社区管理员
  • 灌水乐园
  • 社区助手
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

版主:

社区助手

 

试试用AI创作助手写篇文章吧