住在印度,UPI支付和十分钟送达的快递App让花钱变得太顺手了。顺手到什么程度?日常开销慢慢失控,自己却毫无察觉。作者注意到同事兼好友Anmol也在为同一件事头疼——钱花到哪儿了,完全说不清。
作者自己用Excel记账已经好几年。但他清楚,Anmol不会喜欢手动分类、手动做预算这套流程。Anmol是个痴迷自动化的人,当年就是他带着作者认识了iOS的快捷指令App。这个细节让作者想通了:只要银行短信一到,就能触发自动化,把记账这件事彻底交给机器。
![]()
一个不需要手动录入的记账工具
于是有了pfft——一个主打隐私的财务追踪器。它和市面上同类产品的区别,作者列了三条:
- 不需要手动录入,通过读取银行短信自动获取交易记录
- 隐私优先,App从不申请读取全部短信的权限,只处理你允许的那几条
- 用AI自动给交易分类
第二条的实现方式值得展开。它借助iOS快捷指令里的"自动化"功能,只有你放行的短信才会进入处理流程,财务数据因此留在可控范围内。作者强调,App不会去碰你没授权的消息。
一笔交易要走过几道关
整个链路是这样的:iPhone上的快捷指令在收到银行短信时触发,调用iOS App的"记录交易"意图,把内容POST到部署在Vercel上的Next.js接口,解析短信后存进Supabase。
分类环节有优先级。系统先查规则和你自己的历史归档记录,命中就直接归类;只有拿不准的时候,才会去问模型。模型走的是Tailscale Funnel隧道,连到家里Mac的GPU上运行的llama.cpp服务,用的是Qwen3-4B-Instruct这个开放权重模型。处理完会发一条通知:这笔被归到了哪一类,或者反问一句"这是花在什么上的?"
作者特别提到,绝大多数交易根本到不了模型那一步。用过的描述、商户规则、每月固定 recurring 的付款,都能在规则层被拦下。
为什么非要跑在本地
短信交易记录是敏感且高价值的数据。把处理留在本地、用开放权重模型,用户就能自己掌控财务信息,不必依赖第三方服务器——这是作者对开放创新价值的回答。
他也承认这个点子并不新鲜,市面上已有类似产品,比如CRED Money。但在他看来,那类产品侵入性太强:会读取你全部的银行历史、信用记录,有时甚至要拿到整个邮箱账户的访问权去解析对账单。
踩过的坑比想象中多
这是作者第一次用开放权重模型,也是第一次把Mac通过隧道暴露到公网,学会了用Tailscale Funnel安全地开放本地服务。
关于模型大小,他试过1.7B的版本想跑快点。读取提示词确实快了2.5倍,但随后就无视长度限制,输出一大段垃圾,75%的答案没法用。4B是能正常干活的最小尺寸。
托管也试过弯路。他曾在Render上部署,延迟对自己的使用场景来说太高,最后还是退回本地运行。对比之下,本地Apple M2芯片的速度和效率让他印象很深。
朋友的第一反应是质疑
Anmol自己也是开发者。他问的第一个问题是:你把我的交易记录存到你的数据库里了?隐私个鬼。
作者的解释是,端侧存储正在路上。最初实现用了云数据库,但最终目标是把所有数据留在设备上,最大化隐私。至少眼下,他已经把Supabase的凭证换成了Anmol自己的,这样对方可以安心睡觉,不用担心自己的银行余额被人盯着。
还有个有趣的背景:作者本职是Web开发者,这个项目原本打算做成网页应用。但Anmol热爱苹果生态,总拿着手机里的各种App给作者看,"你看人家UI多干净、多漂亮"。所以作者判断,设计对Anmol来说是个大因素,最终做成了原生iOS应用——这也是他人生中第一次写原生iOS App。
作者在结尾感谢Anmol:谢谢你那种挑剔的品味,逼着我把一个webhook重建成了一款完整的iOS应用。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.