本科实习生,借助 AI 用 Spring Boot 写了个家庭飞书机器人,全家人都在用
写在前面
大家好,我是一名计算机专业的本科生,即将在今年 6 月份毕业。目前在合肥一家公司实习,做的主要是后端开发相关的工作。
这篇文章想和大家分享一个我在实习期间抽空写的个人项目——一个运行在飞书群里的家庭智能机器人。它目前已经在我的家庭群里跑了一个多月,家里人都在用,每天自动播报天气、提醒家人生日、记录家庭开销,还会在每周日自动发送一份带可视化图表的家庭财务周报。
项目本身技术含量不算高,但对我个人来说,它是我第一个从零构思、独立完成并真正“有人用”的项目。文章会讲一下我的想法是怎么产生的、踩过哪些坑、以及作为实习生与 AI 协作的一些感受。
因为代码写得比较潦草,很多地方还有待完善,希望大家多多包容,也欢迎在评论区给我提建议。
为什么会想做这个项目?
最开始的想法其实很简单:想让家里人多互动,少忘事。
我们家有一个家庭微信群,爸妈、我还有我对象都在里面。之前经常出现这样的情况:
- 谁过生日了,除了本人谁也记不住,等想起来已经过了好几天
- 妈妈老是忘了记今天的开销,月底算账发现对不上
- 大家想知道明天天气怎么样,得自己打开天气 App
作为一个程序员,我就想着能不能做一个机器人扔到群里,自动帮我们处理这些琐事。
刚好公司项目里用到了飞书的开放能力,我就想:“能不能用飞书机器人来做?”
于是一个小小的家庭机器人项目就这么开始了。
这个小机器人现在能做什么?
经过半个月的迭代,目前机器人大概有这些功能:
🔔 定时任务类的(不需要主动说话,它自己会按时发):
- 每天早 8 点:播报今天合肥长丰的天气,带卡片
- 每晚 8 点:播报明天天气
- 每天早上 8 点:检查当天和未来 7 天有没有家人生日,提前提醒
- 每天早上 8 点:检查当天和未来 3 天有没有节日/节气,提前提醒
- 每天早中晚 3 次:提醒家人记账(@所有人)
- 每周日晚上:自动生成本周财务报告,带可视化图表 + Excel 明细
- 每月 20 号:自动生成本月财务报告,带可视化图表 + Excel 明细
💬 手动指令类的(@机器人 发指令就行):
- 说
天气、明天天气、后天天气、大后天天气查询对应天气 - 说
生日或纪念日查看全家人的农历生日倒计时 - 说
午餐15记账就能直接记录一笔开销,自动归类 - 说
今日账单、本周账单、月账单看不同维度的家庭财务 - 说
帮助可以查看完整的指令列表 - 还有
你好、查询群id这些基础的互动
📊 可视化的:
- 每周和每月的财务报告不再是纯文字,而是一张带条形图、饼图、折线图的图片,手机上看起来很直观
- 饼图能看到每个人分别花了多少钱
- 条形图能看到钱都花在了哪些分类上
- 折线图能看到这周/这个月每天的支出趋势
功能不是特别多,但都是家庭里实打实会用的。
怎么跟 AI 一起做项目?
这是我第一次比较正式地和 AI 协作完成一个完整项目,想分享一下体验。
我自己主要负责:
- 想清楚要做什么:这个机器人到底要解决什么问题?家人真正需要的是什么?这部分机器替代不了我
- 画好大的框架:机器人用什么架构(我选择了策略模式 + 定时任务),数据库表怎么设计,功能之间怎么串联
- 提供关键的数据和参数:高德 API 的 Key、家庭群聊的 chatId、家人的 openId、长丰地区的编码等等
- 审核 AI 写的代码:AI 一把梭出来的代码我是不会直接用的,都会看一遍逻辑对不对,有没有坑(后期基本不咋审核,能跑起来再说,后期再优化,有些没学过比如饼图那些,java里面,我根本不会,基本一遍遍测)
- 处理各种奇奇怪怪的坑:比如飞书 SDK 版本兼容性问题、JFreeChart 饼图引导线颜色设置不了、Excel 列宽不管用等等,AI 很多时候搞不定这种具体版本和环境的问题
AI 帮我做的主要是:
- 大段业务逻辑的代码编写(各种 Handler、定时任务、工具类)
- 飞书卡片 JSON 的拼装(那个嵌套结构手写太崩溃了)
- JFreeChart 图表绘制的代码(各种参数、布局、配色来回调了无数次)
- Excel 导出功能(EasyExcel 的封装和使用)
- 一些工具类的实现(农历转公历、关键词匹配记账、天气 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固然很好,但是也要尽可能提升自己,希望大家见谅,我会慢慢改进的。另外,关于家庭场景的机器人,大家觉得还能加上什么实用的功能呢?我也需要一点灵感,很多东西都不懂,请在评论区教教我~
项目源码暂未整理(因为硬编码了一堆私人数据),后续会考虑脱敏后开源。
本文首发于掘金技术社区,希望能和更多同行交流~