借 AntiGravity,给个人消费一次「年度盘点」
作者回顾了去年年度征文获奖后项目的停滞与困境,在年末借助Google Gemini的新IDE AntiGravity重启项目,并新增了对微信账单的支持和交互优化功能。 2025-12-28 07:28:43 Author: sspai.com(查看原文) 阅读量:5 收藏

写在最前

转眼又到年底,去年的年度征文获奖仿佛还在昨天。那段时间网站的访问量激增,GitHub 星标数的跳动也让一度我兴奋得彻夜难眠。

然而那个项目的推进却陷入了漫长的停滞:我已经解决了第一时间遇到的痛点——把支付宝账单可视化。但下一步该往哪里走?

如何让账单不仅仅是数字的堆砌,而是更敏锐地反映消费习惯、挖掘出自己都未曾察觉的「月之背面」?这个问题让我犯了难。恰逢项目在发文后代码量膨胀到了一个微妙的临界点,旧有的 AI 辅助编程模式开始显得力不从心——改动一个功能往往引发数十个连锁错误。于是这个项目便搁置至今。

直到年末,各大 App 纷纷推出年度盘点,又提醒了我还有这样一个未完成的任务。但不同的是,这一次 Google Gemini 推出的新 IDE —— AntiGravity,给了我重启项目的能力与底气。

扩展阅读:号称「反重力」的谷歌 AI 编辑器,能原地起飞吗?

微信账单的支持

在之前的评论区和公众号后台,「支持微信账单」的呼声从未断绝。其实在项目伊始,我便考虑过兼容性,但支付宝和微信的体验天差地别:支付宝支持按年导出,格式规整;微信最多仅支持 3 个月,单是导出就要付出 4 倍的工作量。

更致命的是,微信账单的分类信息非常有限,只有「商户消费」、「红包」这类标签,无法针对消费进行分类。基于此前项目推进的经验,账单格式分析需要自己来完成,并且写成一长串文字喂给 AI,如何做好两种异构数据的有机融合也是一道难题。

然而,随着大模型能力的跃升,一切似乎又变得举重若轻:我原本只是试着让 AntiGravity 读取一下微信账单的文件结构,询问处理思路,结果它「自作主张」完成了几乎所有工作。在不超过 20 轮的对话后,微信账单便水灵灵地显示在网页中——数据切分、自动标签化、混合分析,一气呵成。技术壁垒的消融,让我的创作激情得以重燃。针对双平台账单,我最终确立了分离上传、并行分析的架构。

诚然,从技术上限来看,引入大模型 API 对微信那语焉不详的流水逐笔分类,进而与支付宝分类体系实现「融合」,无疑才是更优解。但作为一个坚持轻量化、本地化的工具项目,我不希望引入沉重的 API 调用成本或复杂的配置门槛。

因此目前的思路是克制的:在保持两者数据源独立的前提下,通过视觉与交互层面的优化,实现逻辑上的统一分析。

项目介绍

为了方便大家体验,项目仓库现已更新至这里线上演示站也已同步部署在 pythonanywhere 上,地址与原先一致。以下是本次更新的核心亮点。

全局交互优化

总之,有了弹窗筛选这两个交互,我可以在任意界面元素点开我感兴趣的内容,并分离大额和小额交易来进行分析,这带来的体验和功能提升让我回顾数据和分析消费行为的效率大大增加。

为了让数据分析更具颗粒度,本次更新针对弹窗和筛选的交互逻辑,做了全局的适配和优化。

全局金额筛选: 现在的「全部/大额/小额」交易筛选按钮已全局适配。你可以在任何页面(包括下文提到的消费洞察),一键剥离干扰项。例如剔除大额的数码产品消费后,你可能会发现看似温和的日常餐饮支出,才是每月「月光」的元凶。

深层穿透弹窗: 绝大多数图表元素,现在支持点击展开。你看到某个月份柱状图异常高,点它,弹窗会直接列出该月明细;看到某个分类占比过大,点开它,直接看看到底是哪几笔交易在作祟。针对消费洞察新增的部分图表,则以图表中标签的形式进行数据展示。

首页

为了解决部分朋友担心隐私或嫌上传麻烦的顾虑,首页新增了「查看示例数据」按钮。点击即可进入全功能的演示模式,上方会有醒目的黄色提示框。

在这里你可以体验所有页面的交互逻辑、图表联动和分析深度,确认这个工具是否趁手,再决定是否上传自己的数据或本地部署。

首页-新增【查看示例数据】
演示模式-右上方退出

设置页面

微信账单的加入让文件管理稍微复杂了一些,因此设置页面进行了分区。目前微信导出的账单有 .xlsx.csv 两种格式(从导出体验上来看 .xlsx 文件更为便捷),本项目已做全格式兼容,且支持多文件同时上传。由于微信账单自带月份区间信息,你甚至不需要像处理支付宝那样重命名文件,直接丢进去、点击「开始分析」即可。

设置页面-新增微信账单支持
设置页面-上传后文件分开管理

年度&月度分析页面

为了解决支付宝与微信分类逻辑的差异,在年度和月度分析的饼图中,我采用了分列展示的设计。右侧图例清晰地标示了数据来源,配合鼠标悬浮的高亮联动,你既能看到总览,也能快速厘清某一类支出究竟是来自支付宝还是微信。

年度总览-支出分类

分类分析页面的分类选择器同样做了分区处理。另外分类排序引入了「金额×频次」的协同权重排序——你花钱最多、频率最高的分类,会自动排在最显眼的位置。

分类分析-分类选择器

此外,时间分析页面的每日消费热力图更新为 GitHub 风格,支持在支出、收入、交易笔数之间切换。借助深浅不一的绿色方块,你仿佛能看到自己一年生活消费的「commit 记录」。也可以给我一个错觉——只看消费记录的话,我也是全年笔耕不辍的骨灰级程序员了。

时间页面-热力图

消费洞察

这是本次更新的重头戏。

如果说之前的页面是「统计」,那么这个页面就是「叙事」。我引入了许多实验性的 fancy 图表,试图讲述数据背后的故事。

消费洞察页面

资金流向全景图

钱到底去哪了?桑基图是最好的答案。我构建了 「总支出 -> 分类 -> TOP 商家」 的三级结构。一眼望去,你就能看到资金如水流般,是如何从总盘子分流到「餐饮美食」,最后汇入「瑞幸咖啡」或「麦当劳」的口袋里的。

资金流向全景——展示支出-分类-商家三级结构

年度消费故事

蹭个年底的热度,我也做了一个点击弹窗的年度消费回顾。虽然简单,但仪式感不能少。

消费画像、最常光顾、消费场景、消费习惯等与之前保持一致,进行了部分细节优化,也支持大额/小额交易的筛选。

消费画像&最常光顾
消费场景&消费习惯

增加了几个有趣的小指标。

消费指标

消费趋势河流

用于展示主要分类在年度时间轴上的流动占比。不同于折线图的刚硬,河流图的起伏更能体现出消费重心的推移——比如年初的河流主干是「置办年货」,到了暑期则变成了「旅游出行」。

消费趋势河流

消费关联和弦

和弦图是一个非常有趣的视角,展示了分类消费一周七天的相关性。消费金额漏斗则显示各个金额区间下的占比。

消费关联和弦与消费金额漏斗

交互体验:鼠标悬浮在「周六」上,与之关联的分类连线会高亮变粗,反之亦然。

消费习惯挖掘:例如,我发现我的「餐饮美食」与「周六/周日」的连接线显著粗于周中,这印证了周末是我的「大餐日」,周一则要勒紧裤腰带。同样的,我周六与各个分类的连接线也可以看出,周六与餐饮美食的连接线是明显更粗的,这也说明周末的总花费中,餐饮美食占了大头。同样的,消费关联和弦可以进行大小额交易筛选,可以看到大额以及小额交易分别的相关性。

消费生物钟热力图

将一周七天与 24 小时映射为频次热力图,然后发现数据出卖了我:我在周三晚上 9 点的消费频次最高。这可能是周中工作压力大,回家后的「报复性下单」。更有可能是因为我每周三晚上去打球,9 点结束后的夜宵最为规律。 

这就是数据的魅力,它在不经意间记录了你的生活节律。

季度消费结构则展示了每年四个季度下各个分类消费金额的占比变化:

消费生物钟 & 季度消费结构

核心支出来源

基于帕累托法则(80/20 法则),我绘制了占比柱状图与累积占比 80% 的虚线。 结合筛选功能,这幅图变得极具洞察力:

小额视角: 我的日常主要由「餐饮美食」、「日用百货」等构成,充满了烟火气。

大额视角: 80% 的大额支出集中在「服饰装扮」和「生活服务」,非常典型的悦己型消费。

核心支出来源-小额交易
核心支出来源-大额交易

消费象限

针对商家标签,我画出了 频次(X轴) vs 均价(Y轴) 的二维分布图(双对数坐标防止堆积)。

  • 第一象限(高频高价): 幸好这里几乎是空的。
  • 第四象限(高频低价): 「美团」、「瑞幸咖啡」、「打车」在这里一骑绝尘。
  • 第二象限(低频高价): 「得物」「海底捞」等占据了这里。 通过色块的大小(代表总金额)和颜色(代表消费分类),你可以清晰地看到哪些分类的哪些商家在你的生活中占据了「统治地位」。
消费象限(频次 vs 均价)

消费分布云图

将 TOP8 分类的每一笔消费打散成点,投射在坐标轴上。点击某个分类可以展开细节,左侧悬浮可展示数据概况(最大值、最小值、均值、中位数),右侧则为每笔消费的点图。你可以直观地看到「餐饮美食」虽然点多,但密集分布在 10-50 元区间;而「数码产品」的点虽然稀疏,却个个位置极高。

另外也增加了消费热词云展示。

消费热词云(示例数据)

小结:让隐性趋势「显影」

诚然,消费洞察页面所呈现的数据,或许你在年度或分类视图中,通过繁琐的参数筛选也能拼凑出来。但这个页面的核心价值在于「显影」——它将那些潜伏在日常流水之下、不易察觉的行为惯性,直观地拉出水面。

这恰恰回归了本项目的初衷。如我反复提及的我们分析的不仅仅是账单,而是生活的切片。在这个算法与消费主义合谋裹挟的时代,我希望这个趁手的工具能成为一面「数字棱镜」,帮你折射出真实的习惯;在看清账单的同时,也能透过那些数字,看清自己的内心。

写在最后

这一年是大模型「大爆发」的一年。从半年一个新王,到现在一周一个新王,多模态、视频生成让人眼花缭乱。然而对于开发者而言,实际体验往往是「雷声大,雨点小」。

年初我还是 Cursor 的忠实拥趸,但在经历了它制度改革、Token 限制收紧的拉锯战后,我不得不面对一个现实:当项目涉及到 10 多个文件、数万行代码时,它超出了当时大模型的上下文边界。

我曾尝试在废墟上重建——加功能、优架构,甚至想用 React 重写,但最终都以失败告终。往往费尽心机告诉 AI 修改一个点,它却删掉了我大段的逻辑;好不容易修好了 A 功能,B 功能又莫名崩坏。

Vibe Coding的弊端在此刻展露无遗:我失去了对项目的掌控。

直到 11 月下旬,Google Gemini 3 Pro 发布,伴随而来的新 IDE AntiGravity 给了我新的希望。起初我以为它只是又一个 VSCode 的套壳,但试用之后,我找回了久违的掌控感。

不知道是 Gemini 3 Pro 的推理能力过强,还是 AntiGravity 针对 Vibe Coding 的理念更先进,我终于不用再像教小学生一样,截图、画圈、解释控件。它仿佛有了记忆,读懂了我的心思。

在之前的留言区,很多朋友对大模型编程感到好奇。因此,我将本次使用 AntiGravity 进行 Vibe Coding 的部分过程记录了下来,并同步在了 GitHub 上。

或许,关于 AntiGravity 如何拯救一个项目,值得我再写一篇文章来好好聊聊。但现在,请先享受你的账单分析之旅吧。

AntiGravity-增加微信账单支持时的任务清单

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀


文章来源: https://sspai.com/post/104232
如有侵权请联系:admin#unsafe.sh