使用 AI 来建议账户并解释交易,然后在保存之前对照你的原始单据检查这些条目。本指南将一份小型虚构对账单依次经过分类、审查、验证和查询,你可以自行验证每一步。
在下方选择托管或本地工作流。示例使用本地示例文件,以便你在将 AI 连接到自己的账簿之前,可以重现每一项检查。
选择你的工作流
| 你的设置 | 从这里开始 | 更改如何到达你的账本 |
|---|---|---|
| 你使用 Beancount.io | 对账单文件使用 智能导入,或使用 AI 助手 提问和提出编辑建议。 | 在提交导入前审查每一行。对于助手编辑,请审查建议的差异并选择 批准 或 拒绝。 |
| 你使用外部 AI 客户端 | 按照 Beancount MCP 设置指南 将你的客户端连接到托管账本。 | 试运行会预览编辑操作。单独的写入调用会提交它。批准提示取决于你客户端的设置。 |
| 你保留本地文件 | 使用 CSV 到 Beancount 转换器 或导入器,然后让 AI 工具建议类别。 | 你审查建议的条目,验证文件,并保存接受的更改。 |
托管的助手和 MCP 是 Beancount.io 的集成。安装开源的 Beancount 会计引擎并不会为本地账本添加这些服务。
开始之前
准备好你的原始对账单、它所属的账户,以及允许的目标账户列表。保留原始对账单,以便你可以将其与结果进行比较。
对于本地演练,请使用 入门指南 安装 Beancount。你还需要 Beanquery 才能从终端运行最终查询。该示例全程假设使用 USD,并且示例文件中没有现有交易。
对于真实数据,请决定你的 AI 工具可以接收哪些信息。在共享对账单之前,删除不必要的标识符。本地账本仍然可以通过编辑器或 MCP 客户端将数据发送到云端模型。请检查客户端和模型提供商的数据政策;将文件保存在你的计算机上本身并不能保证其内容始终只保留在本地。
1. 从源交易开始
我们虚构的支票账户在 8 月初有 1,000.00 USD。其对账单包含三笔取款,并在这些取款后以 805.10 USD 结束:
date,payee,description,amount
2026-08-03,Office Depot,Printer paper,-45.00
2026-08-04,Cloud Hosting Inc,Monthly hosting,-120.00
2026-08-05,Amazon,Online purchase,-29.90这里的负数表示资金离开支票账户。在导入前确认你银行的符号约定;其他导出和导入器可能使用不同的约定。
在 CSV 转换器中,映射这四列,并将源账户设置为 Assets:Bank:Checking,货币为 USD。对于此示例,请保持 翻转所有符号 关闭。检查源分录是否为负数。临时目标账户只是一个占位符,直到你审查完类别。
如果你从收据图片或 PDF 开始,请在分类任何内容之前,将提取的日期、金额、货币和交易数量与原始文档进行比较。在决定账户时,保持源值不变。
2. 使用明确的限制请求类别
使用一个提示,指明允许的账户并为不确定性留出空间:
为此示例对账单中的每一行建议一个目标账户。源账户是 Assets:Bank:Checking。只能使用 Expenses:Office:Supplies 或 Expenses:Business:Hosting。返回原始日期、收款人、金额、建议账户和简短原因。如果描述不足,返回 NEEDS_REVIEW 并解释缺少哪些信息。不要发明账户、更改金额或写入账本。
将三行 CSV 与提示一起提供。一个有用的结果可能如下所示;模型的措辞和建议可能有所不同:
| 日期 | 收款人 | 金额 (USD) | 建议账户 | 审查原因 |
|---|---|---|---|---|
| 2026-08-03 | Office Depot | -45.00 | Expenses:Office:Supplies | 描述表明是打印机纸张。 |
| 2026-08-04 | Cloud Hosting Inc | -120.00 | Expenses:Business:Hosting | 描述表明是托管服务。 |
| 2026-08-05 | Amazon | -29.90 | NEEDS_REVIEW | 商户名称无法识别购买的商品。 |
提示表达了你的意图。它不会对可以写入文件的工具强制执行权限。在授予其对真实账本的访问权限之前,请配置客户端的批准控制。
3. 解决不确定性并审查条目
检查 Amazon 购买的收据。对于此示例,它表明是办公室用的 USB-C 线缆,审查者将其分配到 Expenses:Office:Supplies。如果没有该证据,请将该行保留为待处理状态,而不是接受猜测的类别。
创建一个名为 review.beancount 的新文件,内容如下完整示例。它包含 CSV 中不包含的账户声明和期初余额。如果你使用了转换器,请将其交易与这些审查后的条目进行比较;不要将两份副本添加到同一个账本中。
option "title" "AI bookkeeping review example"
option "operating_currency" "USD"
2026-08-01 open Assets:Bank:Checking USD
2026-08-01 open Equity:Opening-Balances USD
2026-08-01 open Expenses:Office:Supplies USD
2026-08-01 open Expenses:Business:Hosting USD
2026-08-01 * "Opening balance"
Assets:Bank:Checking 1000.00 USD
Equity:Opening-Balances -1000.00 USD
2026-08-03 * "Office Depot" "Printer paper"
Assets:Bank:Checking -45.00 USD
Expenses:Office:Supplies 45.00 USD
2026-08-04 * "Cloud Hosting Inc" "Monthly hosting"
Assets:Bank:Checking -120.00 USD
Expenses:Business:Hosting 120.00 USD
2026-08-05 * "Amazon" "Online purchase; receipt: office USB-C cable"
Assets:Bank:Checking -29.90 USD
Expenses:Office:Supplies 29.90 USD
2026-08-06 balance Assets:Bank:Checking 805.10 USD期初余额交易属于这个空白的练习账本。在现有账本中,请使用其已建立的余额和账户声明,而不是添加另一个期初余额。
在接受建议的更改之前,请将每笔交易与其源行进行比较。确认符号、货币、账户和支持性收据。仅凭熟悉的商户名称并不能确定购买的目的。
4. 验证和对账
在本地示例上运行 Beancount 的验证器:
bean-check review.beancount完整示例应无错误通过。其余额断言检查的是 8 月 6 日开始时,即前三笔取款之后,支票账户中的金额。
对照对账单确认结果:
- 三笔对账单交易各出现一次,此外还有期初余额。
- 取款总额为 194.90 USD。
- 支票账户余额为 805.10 USD:期初 1,000.00 USD 减去这些取款。
- 办公用品总计 74.90 USD,托管总计 120.00 USD。
如果你将 Amazon 交易保留为待处理状态,支票账户余额将为 835.00 USD,断言将失败 29.90 USD。调查该差异;不要仅仅为了让检查通过而添加无法解释的调整。
bean-check 可以捕获语法、账户、平衡和余额断言错误。它无法确定收据是否真实、你是否选择了正确的费用类别,或者每一行对账单是否都存在。一笔记入错误费用账户的交易仍然可以完美平衡。
当某些内容不匹配时
| 症状 | 下一步检查 |
|---|---|
| 余额与对账单不同 | 将期初余额、交易数量、符号、日期和金额与源进行比较。 |
| 两个条目看起来相似 | 比较源交易标识符和收据。相同的商户和金额可能代表两笔合法的购买。 |
| 模型发明了一个账户 | 选择一个现有账户,或在审查你的会计科目表后有意创建一个。 |
| 提取遗漏了一行或更改了小数 | 在分类之前,根据原始文档更正提取的数据。 |
| 验证器通过但报告看起来不对 | 检查账户选择、报告期间和各个分录。 |
让 AI 解释差异并指出受影响的行。在删除疑似重复项或更改金额之前,请确认证据。
5. 保存审查结果并查询
当你使用自己的对账单重复此工作流时,只将你审查过的交易合并到你的真实账本中,然后验证合并后的文件。将虚构条目保留在示例文件中。如果你使用 Git,请检查差异并通过你通常的工作流提交。保留源对账单以供日后对账使用。可脚本化工作流指南 涵盖了可重复的本地自动化。
你可以使用 Beancount 查询语言 验证示例的总额。安装 Beanquery 后,运行:
bean-query review.beancount "SELECT account, sum(position) WHERE account ~ '^Expenses:' AND date >= 2026-08-01 AND date < 2026-09-01 GROUP BY account"两个费用总额应为办公用品 74.90 USD 和托管 120.00 USD。检查查询的日期范围和账户过滤器以及其输出。
如果 AI 客户端连接到包含示例的账本,你可以询问:
查询示例账本中 2026 年 8 月按账户分组的费用。显示查询及其结果。不要更改任何文件。
将其答案与相同的总额进行比较。只有当其数字可以追溯到账本时,流畅的答案才有用。
在 Beancount.io 中应用审查流程
对于对账单文件,请在账本侧边栏中打开 导入 → 智能导入。审查提取的行,选择 源账户 和 货币,并使用 AI 填充 获取目标账户建议。在提交 导入 之前更正类别,其按钮包含交易数量。在处理真实对账单之前,在示例账本中检查生成的日记账和余额。验证取款是否减少了源账户;上面的 CSV 是为本地转换器准备的,导入器可能以不同方式解释符号。
对于托管的助手,请在账本内打开 询问 Beancount.io。从关于现有条目的问题开始。当它提出文件编辑时,请在批准之前审查差异。已接受的导入和助手编辑会记录在 Git 中,以便你可以检查或还原更改。
对于 MCP,请按照上面链接的客户端特定设置说明进行操作,并授权预期的账本。在允许编辑之前,请求 editLedgerFiles 并设置 dry_run: true。检查建议的内容和操作摘要,然后仅在审查后允许单独的写入调用。试运行预览并不能确定会计正确性,也不能保证你的客户端会在后续写入之前请求许可。
在自动化时保持审查流程
从小批量开始,并记录你更改了哪些建议。将重复的、已确认的映射转化为明确的导入规则,或提供已审查的示例作为上下文。不要假设模型会从对话中的一次更正永久学习。
将提取检查、类别审查和对账单对账分开。每一步都能捕获不同类型的错误。对于重复导入,还要检查重复导入同一源是否不会静默地重复交易。
研究支持这种有效语法与正确会计之间的区别。Figueroa Rosero 及其同事 2025 年 1 月的研究 使用结构化提示评估了小型开放权重模型在财务比率场景和交易生成方面的表现。其结果描述的是那些模型和任务,而不是当今助手或你的导入工作流的准确率。使用已检查的源交易及其所需的更正来判断你自己的工作流。
用于可重复本地工作流的工具
为你需要重复的过程部分选择一个工具:
- Beangulp 提供了一个导入器框架。它取代了 Beancount 3 中较旧的
beancount.ingest框架。 - smart_importer 是一个单独安装的包,为导入器添加机器学习建议。它不是内置的 LLM 功能。
- Beanborg 记录了基于规则的分类、机器学习建议和可选的 ChatGPT 预测。在采用之前,请检查其当前设置和兼容性。
如需更广泛的背景,请参阅 簿记自动化指南 和 月度会计工作流指南。
探索更大的示例
下面的公共账本与三笔交易练习是分开的。在将 AI 连接到自己的账簿之前,使用它来探索账户、交易和报告如何组合在一起。