H6.ai 如何用 Lakebase Postgres 构建 AI 财务自动化
How H6.ai builds AI-powered financial automation with Lakebase Postgres
H6.ai 基于 Lakebase Postgres 的存算分离与分支能力,为每个客户建立独立数据库,把出错发票的数据库状态冻结为快照,实现可复现的回归测试。每次测试从快照分出短生命周期分支,真实运行发票处理流程后删除,生产库与客户 ERP 始终不被写入。测试结果由确定性断言加多厂商模型组成的 AI 评审团双重判定,通过、失败或不确定并附推理。
传统的应付账款和发票处理工具往往迫使企业做出取舍:要么借助 AI 自动化快速推进,却面临失去控制的风险;要么维持繁琐的人工审核。H6.ai 正是为解决这一问题而创立。
H6.ai 在企业现有 ERP 之上实现应付账款自动化。它会读取每张发票,将其与采购订单匹配,把发票各行分配到正确的科目,并依据企业自身的政策进行检查。我们的方法将 AI 辅助理解与经过批准、确定性且可审计的政策执行相结合。我们的挑战在于找到一个能够支持大规模频繁回归测试的后端解决方案。
挑战:财务数据从不停滞
在这个行业里,没有两个客户是相同的。每个客户都有自己的 ERP、供应商、采购订单、会计科目表和政策。发票从只有一行的服务账单到包含数百行的文档,形态各异。
而且数据一直在变化。上午 10 点,一张发票与一张仍有足够剩余数量的未结采购订单匹配。到了下午,该订单可能已被部分消耗、修改或关闭。再次处理同一张发票,结果就会改变,尽管我们的代码并没有变。
这让回归测试变得困难。当结果发生变化时,我们需要知道是我们的改动导致的,还是客户数据导致的。
解决方案:Lakebase 架构
我们的工程团队需要一个可扩展的解决方案,既能隔离客户数据,又能让我们调查错误。在了解到lakebase 架构将存储与计算分离、可将空闲计算缩容至零并支持分支之后,我们选择它作为平台的核心记录系统。
如今,每个 H6.ai 客户都有一个专用的 Lakebase Postgres 数据库。它保存客户的完整财务上下文:从 ERP 同步的采购订单和供应商、会计科目表和维度、历史交易,以及他们的 H6 政策。每个客户一个数据库,使每个客户的数据相互隔离。
它还允许我们冻结快照。Lakebase 分支是数据库在某一时间点的写时复制副本。创建分支不会复制任何数据:分支与其父级共享存储,只存储分支上发生的变更。
当我们发现 H6 处理错误的发票时,我们会为该客户的数据库创建分支,并将该分支保留为快照。一张曾经未结的采购订单在快照中保持未结状态,剩余数量和价格都相同,即使 ERP 已经将其关闭。供应商、科目、维度、历史记录和政策设置也是如此。我们不再试图重建问题背后的条件,而是将它们保留下来。

阴影带中的每个方框都是同一客户数据库的一个分支。测试框架对实时数据库分支一次以获取快照,并且从不向其写入。测试写入的所有内容都留在各自的运行分支上,并随分支一起删除。
发票处理测试如何运行
我们测试框架中的每个测试用例将一张发票与一个快照以及我们预期的结果配对:它应匹配哪张采购订单、其各行属于哪些科目,以及是否应被挂起等待审核。一次运行包含四个步骤:
- 将快照更新至最新状态。我们的数据库 schema 持续演进,因此几个月前拍摄的快照已经落后于被测代码。我们先将快照分支一次,把当前的迁移应用到该分支上,然后在同一代码版本的每次运行中复用它。我们只迁移一次,却可以多次分叉。快照本身永远不会被修改。
- 分叉出一个运行分支。每次运行都会从这份最新副本中获得自己独立的短生命周期分支。
- 真实地处理发票。我们流水线的候选版本会像对待客户数据库一样读写该运行分支。它完全按照生产环境中的方式,对原始发票文件进行提取、匹配、分类和校验。
- 评判结果并删除分支。我们将流水线的实际行为与预期结果进行对比,然后删除该运行分支。快照保持原样,为下一次运行做好准备。
一个测试计划可以混合来自多个客户、ERP 和发票格式的用例,每个用例都针对其各自保留的数据库运行。由于每次运行都从相同的冻结状态开始,同一个测试在今天、下周和下一季度都会给出相同的起点。
保护财务数据
我们不对数据库或流水线做 mock。隔离承担了这项工作。测试写入的一切内容(审核项、校验结果、草稿文档)都落在运行分支上,并随分支一起被删除。测试永远不会向客户的 ERP 过账,实时数据库也永远不会被写入。
这对一个财务平台至关重要。我们可以使用生产环境所用的相同代码路径,针对生产客户数据的副本进行测试,同时客户的账目保持不受影响。分支管理使用具有最小权限访问的专用服务主体,并且分支保护机制会拒绝触碰客户的实时分支。
超越通过或失败的 AI 测试
仅检查发票是否被处理是不够的。一张发票可能被完美读取,却仍被匹配到错误的采购订单、分配到错误的科目,或在处理时违反客户的政策。
因此,每次运行都从两个方面进行评判:
- 确定性断言检查我们可以精确陈述的事实,例如文档的最终状态、它匹配到的采购订单以及各项总计。
- 一个由来自不同提供商的模型构建的 AI 评审小组,会对照预期结果审查完整结果,并返回通过、失败或不确定,同时附上其推理过程。
两者结合,能告诉我们结果是否正确,而不仅仅是处理是否完成。这让我们可以尝试新模型、改进提取、降低成本、更改匹配与策略引擎,并在真实客户案例的回归问题进入生产之前就发现它。
每一张不寻常的发票都会成为回归测试
我们不会修复问题后就继续前进。我们会将其数据库状态保留为快照,添加该发票和预期结果,它便成为一个永久的测试用例。随着我们接入更多客户、ERP 和发票格式,测试覆盖率会随着我们所服务业务的复杂性而增长。
Lakebase Postgres 为我们提供了四项我们所依赖的能力:
- 隔离:每个客户一个数据库,这正是多租户财务平台所需要的。
- 冻结状态:无论实时数据之后如何变化,分支都能保留问题背后的精确财务图景。
- 廉价、可丢弃的副本:写时复制分支让每次运行都从干净、相同的状态开始,并在之后被丢弃。
- Schema 安全重放:旧快照可以在其独立分支上向前迁移,因此随着我们代码的演进,它依然可用。
对于 H6.ai 而言,Lakebase 的数据库分支不仅仅是一项基础设施层面的便利。它正是我们构建客户可信赖的 AI 驱动财务自动化的方式。
未来,我们期待在 Lakebase 表上利用 Lakehouse//RT 查询,这将使我们无需复制数据即可在 Lakebase 上运行只读分析查询。这将让我们无需管道即可获得新鲜的分析结果。
如果您想进一步了解我们在 H6.ai 正在构建的内容,请访问我们的网站。如果您想进一步了解 Lakebase Postgres 的数据库分支功能,请观看此视频。
常见问题
1. 什么是 lakebase?
lakebase 是一种将数据保存在湖上的事务型数据库,面向现代智能体应用栈。传统数据库运行在单台机器上。lakebase 运行无状态数据库引擎,并将数据保存在持久化的云对象存储中,因此计算可以独立扩展,存储则按需使用。
2. 什么是 Lakebase Postgres?
Lakebase Postgres 是一个完全托管的无服务器 Postgres 数据库,已集成到 Databricks 平台中。团队使用它在湖仓数据旁构建实时事务型应用。它包含自动扩缩容、缩容至零、即时分支、只读副本、即时恢复、高可用性以及原生 Unity Catalog 集成。
3. Lakebase Postgres 适合 AI 用例吗?
适合。Lakebase 可作为智能体记忆和实时特征服务的后端。智能体可以在 Postgres 中存储对话状态和长期记忆,模型可以通过由 Lakebase 驱动的在线特征存储读取低延迟的特征数据。分支功能也让测试 AI 系统变得更加容易。例如,H6.ai 会针对冻结的数据库快照重放真实发票案例,以便在更改模型或逻辑时捕获回归问题。
4. 分支功能如何工作?
Lakebase 分支是数据库的即时、隔离副本,非常像数据领域的 Git 分支。它采用写时复制:新分支与其父分支共享存储,只有变更的数据才会单独写入。因此,无论数据库多大,分支都能即时出现,且创建分支不会拖慢生产环境。团队将分支用于开发、测试和 schema 变更。他们还可以在历史窗口内的任意时间点创建新分支。
5. Lakebase Postgres 支持多租户吗?
支持,有两种方式。您可以为每个租户提供独立的数据库,正如 H6.ai 为每位客户提供专用的 Lakebase Postgres 数据库,以保持每位客户的数据隔离。或者,您可以将租户保留在共享表中,并使用 PostgreSQL 行级安全机制,使用户只能看到自己或所属组织的数据。缩容至零会暂停不活跃的计算资源,从而使按租户划分的数据库保持成本高效。
来源:Databricks Blog · databricks.com