背景

Beancount (数豆账本) 是一个 Double Entry Accounting (复式记帐) 工具,复式记帐有别于普通的记账方式在于 它更倾向于帐户而非过程,比如在普通记账中,通常的记录会是这样:

2025-03-28 吃饭 中国银行储蓄卡 -50 ¥

而复式记帐通常是两个 (或多个) 帐户之间的动作:

2015-05-30 * "某某餐厅(或一些关于本次交易的其他描述)"
    Liabilities:CreditCard -101.23 USD ; 信用卡帐户记减 101.23 美元
    Expenses:Restaurant 101.23 USD     ; 支出于餐厅的帐户记加

每个了解过经济学的人一定听说过这句话: 一个人(帐户)的支出就是另一个人(帐户)的收入。很显然,复式记帐相比单式记账更能接近现代认知,无数帐户由交易交织起来就构成了经济。

Beancount 就是一个纯文本的复式记帐工具,要使用这个工具来了解收支、分析帐户,要做的就是把各种不同类型的交易记录转换为 Beancount 的格式,下面讲讲如何更高效做这种转换。

自动导入

得益于银行推进无纸化,几乎所有银行的借记卡和信用卡交易记录都可以通过邮件或网站获取,比如我目前使用的主力银行,中国银行的储蓄卡有网页供查询,只需要 F12 看一下浏览器响应, 就可以拿到所有账单的 JSON 数据,而招商银行、建设银行信用卡都会在每个月的账单日把账单发送到常用邮箱。

只需要把这些交易记录复制下来,做简单文本编辑处理为 csv,或者写 python 脚本处理对应的格式即可。因为有了 AI 的加持,只要用类似 "现在有一些交易记录,请写一个 python 程序 帮我把它们转换为 beancount格式" 的 Prompt,即可轻松得到可以用于自动导入的 python 脚本。

需要做的可能只是定期导入,然后用 balance 断言检查帐目是否平衡。初期使用可能会 忽略这个命令,单如果长期使用就会明白,定期 balance 非常重要,它可以非常有效的避免出现因为某笔几个月前的记录而导致的帐目不平进而影响强迫症心态。(不要问我怎么知道)

AI分类

不过之前自动导入有一个痛点就是如果只是简单的脚本,并不能对账单做好分类,为此我想了很多办法,从最简单的关键词匹配到一个简单的分类器,但都不尽如人意。不过,现在有了大语言模型 的加持,让这个任务变得非常简单。只需要用模型的 API 加上合适的 Prompt,包括已有的分类,以及一些特殊规则,就可以轻松的用一个请求解决。

之前充了 kimi 的 API,一直使用至今,之前 Deepseek 火的时候,豆包提供了免费的额度,完全足够一段时间的使用。下面的 Prompt 可供参考:

"你是一个账单分类器,已知类型如下 ;););) 餐饮 Expenses:Food Service:Software ; ...... 用自己的分类即可 根据输入商户名称和描述,回答出最有可能的一个分类,; 后面是中文解释千万不要输出这个,一定要输出前面的包含三级的英文类别,且格式必须是严格的 A:B:C,如 Expenses:Service:Software:, 注意事项:1、游戏在娱乐下面而不是购物;2、财付通-微信支付这种属于渠道标识,可以忽略重点看后面的内容;3、越具体越好,一定只能是列出的这些二元或三元组合,不要随意组合和修改顺序;4、前面的 Expenses 也不能少; 5、Nuvei GS 一般是 Steam 购买游戏的支付方式。最重要的是:仅回答出问题的一个答案,且答案只能是上述列出的选项之一。"

投资、手工录入

除了日常的消费和支出记录外,Beancount 还支持资产追踪,具体可以参考 用beancount记录证券交易 , 不过在投资记录方面,beancount 相对仅提供相对简单的跨日交易追踪,如果是日内交易者可能需要用更专业的工具。

因为我的大部份投资交易周期都比较长,基本没有日内交易的情况,所以简单反而是一件好事。

另外可能有少数情况需要手工录入,比如现金交易就完全没有电子记录,因为国内支付基础设施已经非常完善了,除了过春节发红包需要用到现金以外,我已经很久没有用过现金了。

总结

以上就是我对自己的 Beancount Workflow 2.0 的简单描述了,有了 AI 的加持,Beancount 的纯文本特性得到了很好的发挥,再加上一点点编码知识就可以有一个颇为可用的个人财务追踪系统, 记账可能也不是大多数人的刚需,但如果你是一个喜欢回顾、喜欢图表和量化的人,Beancount 绝对是一个不错的工具。

声明:上述内容都是非 AI 生成的。

下面的流程图由 AI 生成:

+------------------------------------------+
|            BEANCOUNT WORKFLOW 2.0        |
+------------------------------------------+
        |
        v
+------------------------------------------+
|           DATA COLLECTION                |
+------------------------------------------+
        |
        +--------------------+--------------------+
        |                    |                    |
        v                    v                    v
+------------------+  +------------------+  +------------------+
| BANK STATEMENTS  |  | CREDIT CARD BILLS|  | INVESTMENT DATA  |
| (JSON from web   |  | (Email records)  |  | (Manual entry)   |
|  portals)        |  |                  |  |                  |
+------------------+  +------------------+  +------------------+
        |                    |                    |
        v                    v                    v
+------------------------------------------+
|           DATA PROCESSING                |
+------------------------------------------+
        |
        +--------------------+--------------------+
        |                    |                    |
        v                    v                    v
+------------------+  +------------------+  +------------------+
| TEXT EDITING     |  | PYTHON SCRIPTS   |  | MANUAL ENTRY     |
| (CSV conversion) |  | (Format parsing) |  | (Cash/Other)     |
+------------------+  +------------------+  +------------------+
        |                    |                    |
        v                    v                    v
+------------------------------------------+
|         AI CLASSIFICATION                |
+------------------------------------------+
        |
        | (LLM API with classification prompt)
        |
        v
+------------------------------------------+
|        BEANCOUNT FORMAT RECORDS          |
+------------------------------------------+
        |
        | (Double-entry accounting format)
        |
        v
+------------------------------------------+
|        BALANCE ASSERTIONS                |
+------------------------------------------+
        |
        | (Regular account balance checks)
        |
        v
+------------------------------------------+
|        FINANCIAL ANALYSIS                |
+------------------------------------------+
        |
        | (Review, charts, quantification)
        v
+------------------------------------------+
|        PERSONAL FINANCIAL TRACKING       |
+------------------------------------------+