跳到正文

我把银行账单交给了一个小模型

我有大约 1,500 笔交易,完全不想一笔一笔手动分类。所以我搭了一套流程:让一个模型把它们全部分好,告诉我哪些它拿不准,我纠正之后它会记住。

一张由 1,500 个浅色小方块组成的网格,其中十五个是深色的。
1,500 笔交易。深色的那几个,是真正还需要人看一眼的。

最近我把九个月的银行记录搬进了 myqi,也就是我自己用的私人应用。大约 1,500 笔交易,加了密,只能在我自己的机器上读。页面上能看到流水和几张图表,但没有一个地方说得清这些钱到底花在哪了。

我试过的每一个记账应用,都要我自己动手做这一步,说实话这就是我每一个都没坚持用下去的原因。我不想再多一个地方去分类交易。我想要的是:它把每一笔都看一遍并做出判断,告诉我它有多确定,我不同意的时候记住我说的话。这个要求其实挺具体的,平常那些聊天模型并不是干这件事的合适工具。

另一种 AI

大家熟悉的模型都是写文字的(ChatGPT、Claude、Gemini)。同一个问题问五遍,可能得到五个不同的答案。我最后用的这个,TypeSafe 的 Jev,不一样。它什么都不写。你给它一样东西看,给它划好边界,它从里面选一个答案,再告诉你它有多确定。想自己看看的话,可以去 typesafe.ai。

所谓边界,就是它被允许给出的答案清单,以及每个答案是什么意思。对我的交易来说,是十六个类别,每个类别配一句话说明什么算在里面。杂货指超市。转账指在我自己的账户之间挪钱。Jev 只能从这个清单里选。它编不出第十七个类别,也没法用一段话来回答。要是哪个都不合适,它唯一能说的是“其他”,因为我把这一项也放进了清单。

回来的是它选的那一项,再加一个数字,表示它有多确定。如果一笔明显是超市,数字接近一。如果可能是两三种情况,数字就往下掉,这就是提醒我自己去看一眼的信号。同一笔交易再送一次,得到的还是同样的答案,因为它不是每次从头写,而是在选。

0.8 或以上低于 0.8交易TRADER JOE’S #123$46.10 · 支出 · 9月18日清单杂货 · 餐饮 · 转账 …16 个类别,每个都有定义模型Jev从清单里选一个答案杂货确定度 0.96应用自动归档应用直接处理应用复核拿给我看数字是 Jev 定的。0.8 这条线是我定的。
Jev 是怎么工作的,配一个例子。一笔交易和类别清单送进去。Jev 选一个,并给出一个表示确定程度的数字。数字在 0.8 以上应用就直接归档,低于 0.8 就拿给我看。

一开始这看起来像是降级。它不能聊天,不能解释自己,也写不了总结。但对于给 1,500 笔交易分类来说,这些都不重要,而这些限制恰恰是它好用的地方。

它给不出清单之外的答案,所以我永远不用去收拾它编出来的东西。它又快又便宜,我可以把每一笔交易都跑一遍,而不是抽样:1,500 笔全部跑完不到六秒,花了几美分。

每个答案还带一个数字,这个数字是 Jev 定的,不是我。这是 Jev 在表达它有多确定。0.96 的意思是“我几乎可以肯定这是超市”。0.5 的意思是“这可能是好几种情况之一”。这些数字我不碰。我唯一决定的是分界线。我定在 0.8:Jev 的数字在 0.8 或以上,我就采用它的答案。低于 0.8,这一笔就进入一个清单,等我自己看。想多看几笔,就把线抬高。更信任它了,就把线放低。

所以,什么时候问、拿到答案之后怎么办,是应用决定的。Jev 只负责回答。正是这个分工,让我放心把自己的钱交给它。

真正用起来

每一笔交易,Jev 拿到五样东西:

  • 交易描述
  • 金额
  • 钱是进来还是出去
  • 来自哪家银行
  • 日期

它永远看不到账号、账户名和余额。然后它对每一笔回答五个问题:

  • 这属于我十六个类别里的哪一个?
  • 这是不是我自己账户之间的转账?
  • 这是不是一笔固定的周期性支出?
  • 这是必需还是想要?
  • 这一笔值不值得多看一眼?

第一次运行,1,508 笔交易不到六秒就跑完了。其中 1,144 笔 Jev 很确定,也就是数字在 0.8 以上。117 笔它拿不准,还有 13 笔它标记为“意外”。被标记为意外的那些,是一个从没见过我预算的东西给出的合理提醒:几笔一次性的大额消费,两三笔大额转账,一次旅行。

它拿不准的那 117 笔有一个共同点:描述里没什么信息。有的只是一个支付应用的名字,看不出背后是哪家店。有的是只有一串参考号的转账。我自己看,也看不出来。所以 Jev 不是在这些上面瞎猜。它是把这些交给我,而且交给我的正是该交的那些。在 myqi 里,这些交易会排在“待复核”清单的最前面,我只在这个清单上花时间。剩下的 1,400 笔,我不看。

我是怎么持续改进 Jev 的判断标准的

使用加入加入标准判断标准16 条定义 + 我的答案01新交易进来SQ *CORNER MARKET · $12.4002Jev 分类杂货?确定度 0.4503拿不准的交给我进入待复核清单04我回答一次餐饮05或者我改一条定义“退款不算收入”06Jev 重做所有交易用新的判断标准每个答案、每次修改,都会进入判断标准。
判断标准在 myqi 里是怎么改进的。Jev 按判断标准给每一笔分类:十六条定义,加上我给过的每一个答案。遇到拿不准的,我回答一次,或者改写一条定义。不管哪种方式,标准变了,Jev 就按新版本把所有交易重做一遍,旧答案留着,方便我对比。

这是我最在意的部分。Jev 不会自己学习。它依据的是一套由我掌控的判断标准:十六条类别定义,加上我在每一笔交易上给过的所有答案。Jev 判断错了,解决办法从来不是“训练模型”,而是“把标准写得更清楚”。我有两种办法。

第一种是直接回答某一笔。当我改掉一笔交易的类别,会发生三件事:

  1. 这一笔保留我的答案。
  2. 同一个商家的其他交易也都改成我的答案,以后新出现的也一样。我只用说一次。
  3. 页面会确认。比如“已保存:杂货。该商家的另外 59 笔现在都跟着这个答案。”

这个答案也会加进判断标准。下次 Jev 再看到这个商家的任何一笔,“这家是餐饮”就明明白白写在它依据的东西里。

第二种是改写定义。早期我发现退款被归成了收入,因为我给收入下的定义里写了“退款”。这不是 Jev 的错,它只是照我写的做。我改了一句话,让退款沿用商家原本的类别,然后点“全部重判”。Jev 用新标准把每一笔重新过了一遍,旧答案留着,我能看到哪些变了。

不管哪种方式,Jev 永远只依据最新版本。页面会记分,现在 Jev 和我教过它的东西一致率是 99%。就是这个数字让这件事值得。1,500 笔交易里,我只需要真正花心思看那 1% 确实需要我的。

如果 Jev 判断对了,我想表个态,有一个“没错”按钮,做的是同样三件事,只是不改类别。不管哪种,点一下就处理完整个商家。纠正会在后台排队,所以我可以在手机上一口气过三十笔,不用每一笔都等。

Jev 可以怎么用在企业里

我的银行账单是 1,500 行,一个人在核对。很多企业有的是同一件事的放大版,通常长得像记账。有人每周花好几个小时把订单、数量、发货录进表格,不是因为录入本身有什么用,而是因为只有这样,对不上的时候才能发现。大多数时候什么问题都没有,你做了那么多工作,就为了那几行有问题的。

拿一家小型服装厂来说。订单通过邮件进来。有人把它录进在制品表,做一张裁剪单,交给裁剪厂。裁剪厂送回一份实际裁剪报告。有人把报告和裁剪单对一遍,更新数量,给缝制厂开采购单,再记录发了什么货。同样的数字要录进五六个表格,就为了对不上的时候总有人能发现。

这里的每一次核对,都是一个只有几个备选答案的问题:

  • 这封邮件是新订单、改单,还是取消?
  • 裁剪报告上的这一行,属不属于这张裁剪单?
  • 报告的总数和裁剪单对得上吗?对得上、数量不同、尺码不同,还是日期不同。
  • 装箱单上的这一箱,对应得上哪一行订单吗?

邮件或报告一到,Jev 就会回答这些问题,并附上一个表示确定程度的数字。它确定的,自动记录。它拿不准的,以及对不上的,进入一个短清单交给老板。老板回答一条,比如“这家裁剪厂一向把尺码分行写,这不算对不上”,这句话就进了判断标准,这家裁剪厂下一份报告就会带着这条来读。什么算对不上,仍然是老板说了算。只是不用再重新录一遍数字,来确认到底有没有对不上。

这对企业意味着什么

我聊过的每一个老板都说同一句话:最希望多一点的东西,是时间。而他们丢掉的时间,大多花在了翻噪音上。录那些本来就没问题的行。读那些本来就对得上的报告。在一堆没问题的东西里找那一个有问题的。

这件事把它反过来了。你跳过那堆干草,直接拿到针。分拣的活模型来做,到你手上的只有那份真正需要做决定的短清单。第一次不对,你改一次,改动进了判断标准,以后所有类似的行都跟着对。清单一周比一周短。

从某个人每周已经在手动做的那一项核对开始。写下他做这件事时真正在问的问题,以及这个问题可能有的几个答案。让模型把所有的都做一遍,你只看它拿不准的那些。然后把省下来的时间,花在真正能推动生意的事上,或者你喜欢的事上。时间本来就是用来干这个的。