基于continew admin框架,制作家庭版飞书机器人

24 阅读9分钟

本科实习生,借助 AI 用 Spring Boot 写了个家庭飞书机器人,全家人都在用

写在前面

大家好,我是一名计算机专业的本科生,即将在今年 6 月份毕业。目前在合肥一家公司实习,做的主要是后端开发相关的工作。

这篇文章想和大家分享一个我在实习期间抽空写的个人项目——一个运行在飞书群里的家庭智能机器人。它目前已经在我的家庭群里跑了一个多月,家里人都在用,每天自动播报天气、提醒家人生日、记录家庭开销,还会在每周日自动发送一份带可视化图表的家庭财务周报。

项目本身技术含量不算高,但对我个人来说,它是我第一个从零构思、独立完成并真正“有人用”的项目。文章会讲一下我的想法是怎么产生的、踩过哪些坑、以及作为实习生与 AI 协作的一些感受。

因为代码写得比较潦草,很多地方还有待完善,希望大家多多包容,也欢迎在评论区给我提建议。

为什么会想做这个项目?

最开始的想法其实很简单:想让家里人多互动,少忘事。

我们家有一个家庭微信群,爸妈、我还有我对象都在里面。之前经常出现这样的情况:

  • 谁过生日了,除了本人谁也记不住,等想起来已经过了好几天
  • 妈妈老是忘了记今天的开销,月底算账发现对不上
  • 大家想知道明天天气怎么样,得自己打开天气 App

作为一个程序员,我就想着能不能做一个机器人扔到群里,自动帮我们处理这些琐事。

刚好公司项目里用到了飞书的开放能力,我就想:“能不能用飞书机器人来做?”

于是一个小小的家庭机器人项目就这么开始了。

这个小机器人现在能做什么?

经过半个月的迭代,目前机器人大概有这些功能:

🔔 定时任务类的(不需要主动说话,它自己会按时发):

  • 每天早 8 点:播报今天合肥长丰的天气,带卡片
  • 每晚 8 点:播报明天天气
  • 每天早上 8 点:检查当天和未来 7 天有没有家人生日,提前提醒
  • 每天早上 8 点:检查当天和未来 3 天有没有节日/节气,提前提醒
  • 每天早中晚 3 次:提醒家人记账(@所有人)
  • 每周日晚上:自动生成本周财务报告,带可视化图表 + Excel 明细
  • 每月 20 号:自动生成本月财务报告,带可视化图表 + Excel 明细

💬 手动指令类的(@机器人 发指令就行):

  • 天气明天天气后天天气大后天天气 查询对应天气
  • 生日纪念日 查看全家人的农历生日倒计时
  • 午餐15记账 就能直接记录一笔开销,自动归类
  • 今日账单本周账单月账单 看不同维度的家庭财务
  • 帮助 可以查看完整的指令列表
  • 还有 你好查询群id 这些基础的互动

📊 可视化的:

  • 每周和每月的财务报告不再是纯文字,而是一张带条形图、饼图、折线图的图片,手机上看起来很直观
  • 饼图能看到每个人分别花了多少钱
  • 条形图能看到钱都花在了哪些分类上
  • 折线图能看到这周/这个月每天的支出趋势

功能不是特别多,但都是家庭里实打实会用的。

怎么跟 AI 一起做项目?

这是我第一次比较正式地和 AI 协作完成一个完整项目,想分享一下体验。

我自己主要负责:

  1. 想清楚要做什么:这个机器人到底要解决什么问题?家人真正需要的是什么?这部分机器替代不了我
  2. 画好大的框架:机器人用什么架构(我选择了策略模式 + 定时任务),数据库表怎么设计,功能之间怎么串联
  3. 提供关键的数据和参数:高德 API 的 Key、家庭群聊的 chatId、家人的 openId、长丰地区的编码等等
  4. 审核 AI 写的代码:AI 一把梭出来的代码我是不会直接用的,都会看一遍逻辑对不对,有没有坑(后期基本不咋审核,能跑起来再说,后期再优化,有些没学过比如饼图那些,java里面,我根本不会,基本一遍遍测)
  5. 处理各种奇奇怪怪的坑:比如飞书 SDK 版本兼容性问题、JFreeChart 饼图引导线颜色设置不了、Excel 列宽不管用等等,AI 很多时候搞不定这种具体版本和环境的问题

AI 帮我做的主要是:

  1. 大段业务逻辑的代码编写(各种 Handler、定时任务、工具类)
  2. 飞书卡片 JSON 的拼装(那个嵌套结构手写太崩溃了)
  3. JFreeChart 图表绘制的代码(各种参数、布局、配色来回调了无数次)
  4. Excel 导出功能(EasyExcel 的封装和使用)
  5. 一些工具类的实现(农历转公历、关键词匹配记账、天气 API 调用等)

最大的感触是:

用 AI 写代码有点像带一个知识面很广但经验不够的初级工程师。它什么都知道一点,API 怎么调用、框架怎么配置巴拉巴拉都能说,但一遇到具体的版本兼容问题、或者那种需要“试一下才知道”的场景,就容易翻车。

我的水平有限,基本是我提供想法,让豆包deepseek去帮我实现,后期我会自己努力去手写代码,用ai最大的感受就是大部分时间都在跟ai扯皮,谁叫它是免费的

所以我觉得现在这种“人想方案、AI 写代码、人调细节、人踩坑”的模式,对于个人开发者特别友好。我自己一个人的话,这个小项目可能要做一两个月都不一定写得完,但现在半月就上线了,是我本地的,目前主要是后端,前端可视化管理还没咋做,目前是用公司电脑24小时跑(免费),数据库啥的都本地部署到公司里面,目前只能本地跑

踩过的一些坑,想分享出来

1. 飞书 SDK 版本兼容问题

飞书的 SDK 版本特别多,不同版本的 API 差别很大。比如图片上传,有些版本用 imageBytes,有些用 imageFile,有些用 file。AI 给的代码经常编译不过,因为它的训练数据里可能有多个版本的文档混在一起。后来我的方案是:能用 Hutool 直接调 HTTP API 的,就不依赖 SDK 的具体方法,自己实现上传逻辑。

2. JFreeChart 画图是真折磨人

本来以为画个图多简单,结果 1.5.6 版本各种不支持。想让饼图每条引导线颜色不一样,结果发现这个版本根本没有按扇区设置的 API;想让折线图数字不被线条挡住,调了无数次也没搞定;中文乱码问题也是搞了好久。

3. Excel 列宽永远不够用

刚开始用的 Hutool 的 Excel 导出,列宽设置完好像没生效。后来换成了 EasyExcel,默认的列宽策略在某些列上还是不够宽。

4. 农历转公历的日期计算

虽然用了 lunar-java 库做农历转换,但怎么计算“距离最近的下一个生日是哪一天”这个逻辑还是要想清楚的:如果今年的生日已经过了,就得算到明年;如果今年还没有过,就取今年的。这个逻辑看着简单,但一开始也出了 bug,导致生日倒计时都是负数。

5. 使用ai的感受

用ai固然很爽,但是我感觉它处处给我设坑,毕竟是免费的。我更希望以后自己能尽量手搓出来,感觉自己脑子快锈了,前期还能坚持手搓一点,control测试一些功能,后期直接ctrl+c,ctrl+v,还是我技术不到位,知识储备少了,以后我会慢慢加油的!

技术栈 | 框架

  • 后端框架:Spring Boot 3.x
  • 任务调度:Snail Job(内嵌在 continew-admin 框架里)
  • 飞书 SDK:oapi-sdk 2.5.3
  • 图表:JFreeChart 1.5.4(期间尝试过升级到更高版本)
  • Excel:EasyExcel 3.3.4
  • API 服务:高德天气 API、lunar-java 农历库
  • 数据库:MySQL 5.7
  • ORM:MyBatis-Plus 3.5.x
  • 工具库:Hutool 5.8.x

后记:这份代码写得怎么样?

其实不怎么样(笑)。

因为平时上班,只有下班后和上班摸鱼时候鞭策ai,所以很多代码都是“先跑起来再说”。有几个策略类现在很臃肿,关键数据(家人的 openId)还写死在了代码里没有放进数据库配置,详情代码里的异常处理也有些草率,前端管理页面完全没做。

但我依然很喜欢它。它是我作为实习生,用自己真实的家庭需求做出来的一个能跑的作品。每天看到群里爸爸妈妈说记账的时候,感觉很有成就感,确实方便了很多。

如果你也对这个项目感兴趣,或者想一起交流怎么用 AI 做开发,欢迎在评论区留言,也可以点个关注,后续我会继续更新这个系列。

由于我的代码也确实还有不少可优化之处,我也特别希望能得到大家的建议和吐槽,好让我知道接下来可以怎么改进,在文章最后,我放几张机器人相关功能的截图,由于第一次写这个心得,文字比较啰嗦(deepseek写的),大家写代码尽量自己手写,ai固然很好,但是也要尽可能提升自己,希望大家见谅,我会慢慢改进的。另外,关于家庭场景的机器人,大家觉得还能加上什么实用的功能呢?我也需要一点灵感,很多东西都不懂,请在评论区教教我~

image.png

image.png

image.png

image.png

image.png

image.png

项目源码暂未整理(因为硬编码了一堆私人数据),后续会考虑脱敏后开源。

本文首发于掘金技术社区,希望能和更多同行交流~