跳到主要内容

为什么我一定要保留审核

账本是真相源,写进去的每一笔都会变成"事实";所以在写入之前,必须有一道闸门。

账本不是草稿,写进去就成了事实​

在 Beancount-Trans 里,Ledger 是用户长期财务事实的 Source of Truth。报表、对账、决策前分析,最终都建立在它之上。

这带来一个容易被忽略的后果:任何被写进账本的条目,都会被后面所有环节当成真的。 它不会自己举手说"我可能分错了",而是安静地参与每一次汇总。错误一旦进入,就不是"一条记录错了",而是"一份报表开始失真"。

解析阶段:确定性优先,AI 只在冲突处出手​

解析管线大致是:转换 → 识别账单类型 → 预过滤 → 解析 → 后过滤 → 缓存 → 格式化 →(审核通过后)写入。

其中真正"决定分类"的部分,是解析中的规则与映射优先:

  • 先用映射关键字做匹配;命中多个候选时,按账户层级、是否有收款人等确定性优先级打分;
  • 只有一行同时命中多个候选、且候选中确实存在配置了账户的映射时,才让 AI 在候选之间做取舍;
  • 候选里没有合适的,就落到 Expenses:Other,不会让 AI 凭空生成一个新分类。

这一点很关键:AI 是候选之间的裁判,不是分类的创造者。 这也是"账本可控"的前提。

解析阶段涉及的账单隐私(如何确保 LLM 不会根据账单得到你的信息,以及为避免使用 LLM 做出了哪些努力),见 隐私与数据流。

审核阶段:先缓存,后落账​

解析完成后,结果不会立刻写进 .bean 文件,而是:

  1. 存入缓存,并生成一条「解析待办」;
  2. 用户在审核页逐条看结果,可以选关键字重新解析,也可以直接编辑最终条目;
  3. 点确认写入时,先做 Beancount 语法校验,通过才真正写入账本。

也就是:解析产出的是"候选",审核产出的是"事实"。

审核把最终确认权还给用户​

这不是不信任 AI,而是承认一个前提:财务事实的最终解释权属于用户。AI 可以理解、可以提议、可以做取舍,但"这笔到底算什么"由人拍板。

结语​

解析与审核分离,本质上是把"快"和"准"放在各自合适的阶段:

解析可以原谅犯错,账本不可以。