精选案例 · Agent / 实践案例
Beancount 平行预算插件 — parallel_budget
这个案例围绕「Beancount 平行预算插件 — parallel_budget」记录了一条真实 AI 实践线索,正文重点集中在「背景」「核心思路」,适合先按任务意图阅读再判断复用。
案例速读
README 标题「Beancount 平行预算插件 — parallel_budget」下已经出现运行/配置路径、脚本或接口线索、结果证据,正文重点集中在「背景」「核心思路」,比纯概念介绍更适合进入精选阅读流。 这篇案例的阅读价值在于,它把真实任务、模型辅助过程和可迁移做法放在同一个上下文里,读者可以从 「Beancount 平行预算插件 — parallel_budget」、「背景」、「核心思路」、「什么是平行记账?」 进入正文。
- 建议重点看 可参考其中的运行与配置路径、包含可迁移的命令、脚本或接口线索、已有结果或观测证据可用于判断复用价值。结合 Agent / 实践案例 和「任务驱动用户、AI 实践者」这一受众定位,它更适合作为任务检索后的精读材料,而不是只看一句短摘要后快速跳过。
- 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
- 看点
- Beancount 平行预算插件 — parallel_budget
- 读者
- 任务驱动用户、AI 实践者
- 复用
- 可参考其中的运行与配置路径
- 结构
- 10 个目录入口
原文内容
Beancount 平行预算插件 — parallel_budget
用 AI 词元生成的 Beancount 预算管理插件,采用「平行记账」思路,不使用内置
budgetdirective。
背景
Beancount 内置的 budget 机制需要配合 bean-query 按特定语法查询,不够直观,也无法在 Fava 的资产负债表上直接看到预算执行情况。于是我用 AI(DeepSeek-v4-flash + OpenClaw Agent)全程生成了这个插件。
核心思路
什么是平行记账?
传统的预算跟踪方式往往需要修改原始交易——比如给支出加标签、分类目、或者单独记一笔预算消耗。这不仅容易破坏原始账目的干净性,还让后续审计变得麻烦。
平行记账的思路是:不动原始交易,额外增加一套"影子"账目。
你的支出还是那笔支出(Expenses:Food:Grocery 不变),但插件会自动在交易末尾追加两条脚注:
Assets:CreditCard:Demo -120.50 USD ← 原始支出不动
Equity:Budget:Expenses:Food 120.50 USD ← 新增:记录预算消耗
Equity:Budget:Balance:Food -120.50 USD ← 新增:扣减预算余额
这三条脚注形成一组完整的复式分录,所有预算信息都沉淀在 Equity:Budget:* 账户里,不影响你原有的资产负债结构。
为什么用复式记账做预算?
传统的预算工具(如 YNAB 或 Excel 表格)通常是"单式"的——只看花了多少、还剩多少。而 Beancount 是复式记账,每一笔都有来有去。
parallel_budget 把预算也做成复式的:
| 账户 | 作用 |
|---|---|
Equity:Budget:Expenses:{name} |
累计该预算下的实际支出(借方) |
Equity:Budget:Balance:{name} |
预算余额(贷方),周期初=预算额,周期末=剩余 |
Equity:Budget:Income:{name} |
预算投入(贷方),周期初调整时使用 |
每一笔支出触发:
Expenses:Food:Grocery +120.50 ← 你花钱了
Equity:Budget:Expenses:Food +120.50 ← 平行标记:这笔算 Food 预算
Equity:Budget:Balance:Food -120.50 ← 平行标记:Food 余额减少
每周期初触发一次调整:
Equity:Budget:Income:Food +X.XX ← 预算投入
Equity:Budget:Balance:Food +X.XX ← 余额增加到预算金额
关键细节:调整金额
X.XX不是硬塞预算额,而是补差值——如果上期还剩 1847.50,本期预算 2000,只补 152.50。不会因为跨期重复充值。
这样做的好处
- 原始账本零污染 — 你的收支流水还是原来的样子,预算数据独立在
Equity:Budget:*下 - Fava 直接可见 — 在 Fava 资产负债表里展开
Equity:Budget就能看到每个预算的余额,无需额外报表 - 可审计 — 每一分钱怎么来的、怎么花的一清二楚,符合复式记账的完整链条
- 零冲突 — 不与 Beancount 内置
budgetdirective 冲突,可以同时使用
用法示例
2026-01-01 custom "parallel_budget" "Food" "monthly" 2000 USD
2026-01-01 custom "parallel_budget" "Renovation" "once" 20000 USD
支出会自动匹配前缀并标记平行账脚注。
配套工具
- Fava Dashboard —
dashboards.yaml提供预算执行面板 - CLI 报表 —
report.py终端表格输出预算状态 - 示例账本 —
examples/下可直接make run运行
AI 参与
本插件的所有代码、文档和示例均由 OpenClaw + DeepSeek-v4-flash 生成。具体过程:
- 需求描述 — 用户用自然语言描述"想要一个平行记账的 Beancount 预算插件"
- 代码生成 — AI 理解复式记账原理,生成插件核心逻辑(交易标记、周期调整、余额计算)
- 迭代优化 — 多轮对话中修复了:跨周期余额累计问题、一次性预算的特殊处理、前缀匹配逻辑
- 文档与仪表板 — AI 自动生成 README、Fava dashboard 配置、CLI 报表脚本
- 示例账本 — 生成可运行的示例帮助快速上手
从零到完整可用的 Beancount 插件,全程未手写一行代码。