• staycurious

    写在前面:由于日常消费都是通过信用卡完成支付,对金钱实在是“没得概念”,只有在每个月还款日才会一拍脑袋感到懊悔!也是正好在玩儿OpenClaw,有在想怎么通过这玩意儿进行记账呢,于是便有了OpenClaw + Beancount的玩法。

    1. Beancount是什么?

    官方文档的说法是 Beancount 是一个强大的、基于 Python 的纯文本会计工具。

    图片

    beancount.io

    图片

    Beancount.io 纯文本记账。强大、精确、可审计。 - Beancount.io

    像写代码一样记录你的财务——配合 AI 辅助洞察。Beancount 让会计变得透明、可脚本化,并为大模型时代做好准备。自动化报告、分析趋势,并构建能与你同步思考的财务工作流。

    然而其实它就是一个纯文本文件,命名叫 main.beancount / main.bean 的文件,然后内容大概就长这样

    beancount 文件模板```
    option "title" "My Ledger"
    option "operating_currency" "USD"

    ; ===== 账户 =====
    2026-01-01 open Assets:Cash
    2026-01-01 open Assets:Bank
    2026-01-01 open Expenses:Food
    2026-01-01 open Income:Salary
    2026-01-01 open Equity:Opening-Balances

    ; ===== 初始余额 =====
    2026-01-01 * "Opening Balances"
    Assets:Cash 100 USD
    Assets:Bank 1000 USD
    Equity:Opening-Balances

    ; ===== 示例交易 =====
    2026-01-05 * "Salary"
    Assets:Bank 2000 USD
    Income:Salary

    2026-01-06 * "Lunch"
    Expenses:Food 15 USD
    Assets:Cash

    
    - **Assets(资产)**: 你“拥有”的东西,比如 现金(Cash)、银行存款(Bank)、支付宝/微信余额、投资账户
    
    - **Liabilities(负债)**: 你“欠别人的钱”,比如 信用卡欠款、花呗 / 借呗、贷款(房贷、车贷)
    
    - **Income(收入)**: 钱“从哪里来”,比如 工资、奖金、利息、副业
    
    - **Expenses(支出)**: 钱“花到哪里去”,比如 吃饭、房租、交通、旅游
    
    - **Equity(权益)**: 用来“平账”的账户,本质是你的净资产来源,可以理解成用来对帐的,不太理解可以忽略,因为具体使用下来一般也不看它 ^-^
    
    最核心的理念就是 *整个账本中所有过账的总和等于零*,也就是说
    
    **Assets(资产)+ Liabilities(负债)+ Income(收入)+ Expenses(支出)+ Equity(权益)= 0**
    
    (所以说 Equity 一般是用来平账的)
    
    用一张AI画的图来看
    
    ![图片](https://cdn3.ldstatic.com/optimized/4X/9/3/9/939fa9d57bab4ddf7c562725b2086fc8c7103fe7_2_690x460.jpeg)
    
    到这里不理解 Equity 也没关系 后面会有具体的例子来解释展示它
    
    但是这样记录只是纯文本,怎么做可视化呢? 通过Fava!
    
    > Fava 是一个出色的基于 Web 的界面,用于可视化你的账本。当你使用该平台时,你将直接与账本文件(例如,main.bean)的文本编辑器进行交互,并实时查看 Fava 生成的报告更新。Fava 将你编写的纯文本转换为交互式图表、财务报表和可过滤的交易列表,让你清楚地了解你的财务报告。
    
    安装方式很简单,像安装Python的第三方库一样安装它,我习惯于用`uv`来管理Python的项目```
    uv add fava 
    ```然后运行它```
    uv run fava main.bean 

    图片

    图片

    图片

    这里就先看个样子 后面会稍微解释一下每个字段

    2. OpenClaw登场!

    前面已经知道Beancount记账本质上就是在往一个纯文本文件里写内容,然后再通过Fava进行可视化展示。往一个文件里写内容 这不是正好是OpenClaw的基础能力吗!听懂自然语言 这不也是OpenClaw的基础能力吗!

    那么 通过自然语言描述记账信息 → 往main.bean里写内容 → 可视化展示 一条龙!

    我一般用它做两件事 一件事是记录日常开销 另一件事是更新每天的基金情况从而更新资产情况 对应两段简单的Prompt

    Beancount 记账(自用的内容,需根据自身账户信息修改)```

    Beancount 记账

    老板使用 Beancount 记账,这是日常重要的任务之一。每次老板说「帮我记账」,立刻去操作,无需询问文件位置。

    账本路径

    • 主文件:/beancountbill/main.bean
    • 操作货币:CNY

    负债账户

    账户说明
    Liabilities:CreditCard:CMB:UnionPay招商银行银联信用卡
    Liabilities:CreditCard:BOCOM:Amex交通银行运通信用卡

    支出分类体系

    账户用途
    Expenses:Init初始状态(期初待还款)
    Expenses:Food餐饮食材
    Expenses:Utilities自来水费、电费、通信费、燃气费
    Expenses:Transport交通出行
    Expenses:Shopping购物消费(网购、实体店等)
    Expenses:Healthcare医疗健康
    Expenses:Entertainment娱乐休闲
    Expenses:Travel旅游
    Expenses:Uncategorized暂未分类

    收入账户体系

    • Income:Investment:PnL — 投资盈亏
    • Income:Interest:Deposit — 活期利息(支付宝/微信每月手动对账)
    • Income:Salary — 工资账户

    记账规则

    • 老板说记账 → 直接操作,无需询问文件位置
    • 根据描述自动匹配分类,无法判断时用 Expenses:Uncategorized 并提示
    • 记账后列汇总表方便核对
    • 工资条:实发进银行账户

    ``基金净值更新``

    基金净值更新

    老板说「帮我更新今天的基金」或类似表达,立刻更新,无需询问。

    • 功能:从东方财富抓取7只基金最新净值,计算市值,并更新 beancount 中的每日 balance 断言
    • 关键规则:基金每次查出来只做更新,不插入一条新的交易记录
    • 最终执行逻辑:从账本注释读取每只基金的份额,抓最新净值后,用 份额 × 净值 算出最新市值,直接覆盖 beancount 里基金账户当前金额;并把基金专属分录的日期同步改成最新净值日期
    • 不要追加 balance 断言,不要生成“市值调整”分录,不要在文件末尾再新增基金更新区块;账本里基金金额只保留一处真值
    • 基金名称:xxx

    ```3. 简单案例解释

    就拿前面的beancount 文件模板来对照解释。```
    2026-01-01 open Assets:Cash
    2026-01-01 open Assets:Bank
    2026-01-01 open Expenses:Food
    2026-01-01 open Income:Salary
    2026-01-01 open Equity:Opening-Balances
    ``这里对应涉及到的元素就是**Assets** **Expenses** **Income**,Equity先不看,如果有像信用卡、花呗这种负债属性的,那就可以直接加``
    2026-01-01 open Liabilities:CreditCard:BOCOM:Amex CNY
    2026-01-01 open Liabilities:HuaBei CNY
    ```这相当于就是"账户"开户,以后所有的流水都是从这些"账户"里流转。

    图片```
    ; ===== 初始余额 =====
    2026-01-01 * "Opening Balances"
    Assets:Cash 100 USD
    Assets:Bank 1000 USD
    Equity:Opening-Balances
    ``在最开始使用时肯定有一个初始金额吧 ^-^,这个的意思就是直接往"Assets:Cash""Assets:Bank"账户中分别加入100和1000,因为这两笔是凭空产生出来的,因此需要用Equity:Opening-Balances来平账!``
    ; ===== 示例交易 =====
    2026-01-05 * "Salary"
    Assets:Bank 2000 USD
    Income:Salary
    ``这个写法等价于``
    ; ===== 示例交易 =====
    2026-01-05 * "Salary"
    Assets:Bank 2000 USD
    Income:Salary -2000 USD
    ``意思是你的工资是发到银行卡里,"Income:Salary"账户就是少了2000,"Assets:Bank"账户多了2000。相当于"Assets:Bank"才是你钱最终的归宿,"Income:Salary"只是记录了这2000是工资!``
    2026-01-06 * "Lunch"
    Expenses:Food 15 USD
    Assets:Cash
    ```意思是你用了15现金吃了一顿午饭。"Assets:Cash"账户少了15,"Expenses:Food"账户多了15,代表这15是用来吃饭的!有没有有一点感觉,虽然是有点抽象,但是好像也有点道理 ^-^

    这个时候来汇总一下

    初始"Assets:Bank"账户是1000,发了2000工资,所以"Assets:Bank"账户现在是3000,"Income:Salary"是-2000

    初始"Assets:Cash"账户是100,吃了15,所以"Assets:Cash"账户现在是85,"Expenses:Food"账户是15

    分别对应

    图片

    图片

    现在在回头来看 Equity。

    图片

    Equity(权益): 用来“平账”的账户,本质是你的净资产来源。

    初始金额时我们用"Equity:Opening-Balances"账户平了凭空出现的1100,"Equity:Earnings"账户正好是我们发的工资2000 - 吃了一顿饭15 = 1985。"Equity"账户的总额是3085 = 初始金额1100 + 工资2000 - 吃了一顿饭15。

    大概就是这个样子了。

    要是各位佬们有兴趣 还是可以去看看官方文档的。

    实在懒得看 要AI帮忙看看也成 ^-^

    主楼
  • x-shuffle

    佬倒是给我提供了一种新的思路,agent记账

    #1
  • starlight312

    还在坚持吗 佬

    #2
  • starlight312

    (帖子已被作者删除)

    #3
  • starlight312

    还在坚持吗 佬

    #4

发表回复

登录后回复