使用 lift-pdf 构建模式引导的发票智能管道:应付账款提取、验证与账本生成
本教程演示如何使用 lift-pdf 构建端到端的应付账款提取管道。通过生成合成发票 PDF 作为受控测试文档,并以结构化 JSON 模式为目标输出格式,我们将发票解析视为模式引导的文档理解任务。涵盖了 GPU 感知模型加载、4 位量化、PDF 生成与提取、评分以及账本构建等步骤,提供了一个紧凑而逼真的文档智能演示。
在本教程中,我们使用 lift-pdf 构建了一个端到端的应付账款提取管道。我们将合成发票 PDF 作为受控测试文档,并以结构化 JSON 模式作为目标输出格式,将发票解析从简单的 OCR 任务提升为模式引导的文档理解。我们生成了逼真的发票,定义了供应商身份、账单方、采购订单号、行项目、税金、总金额、应付余额和付款状态等字段,并要求模型直接从渲染的 PDF 布局中提取这些值。我们还包含了实际财务工作流中常见的提取陷阱,例如区分账单地址与发货地址、区分小计与税后总额、对缺失值返回 null,以及正确标记部分付款的发票(当余额未结清时标记为未付)。通过 GPU 感知模型加载、可选的 4 位量化、PDF 生成与提取、评分以及账本构建,我们将本教程转变为一个紧凑而逼真的文档智能演示,用于发票挖掘。
首先,我们设置了运行时控制参数,包括处理的发票数量、是否启用 4 位加载、是否预览生成的 PDF。我们安装了核心依赖项,包括 PDF 生成、渲染、表格分析、绘图和 lift-pdf 推理。为了避免 Pillow 版本冲突,我们将其固定到一个稳定版本。然后,我们准备了 GPU 感知的推理后端,根据可用的 VRAM 决定模型是以全精度还是 4 位 NF4 量化运行。我们修补了 Hugging Face 的模型加载路径,使 lift 能够透明地加载量化配置。InferenceManager 被初始化一次并在所有发票中复用,避免了重复的模型加载开销。
接下来,我们生成了三个合成发票数据字典,每个代表不同的场景:一个美国云服务提供商(有未付余额)、一个芬兰设计公司(已全额付款)和一个美国建筑承包商(已付部分押金)。我们使用 ReportLab 将每个发票渲染为一页 PDF,包括头部、发票元数据、账单和发货地址块、行项目表格、总计、付款状态和备注。我们特意保留了使发票提取困难的布局元素,例如分离的账单地址和发货地址、小计与总计字段。然后我们生成了 PDF 语料库,并可选择预览第一页。
在提取阶段,我们定义了一个完整的 JSON 模式,描述了所有目标字段及其约束。模式包括发票号、日期、供应商、客户名称、采购订单号、货币、行项目(含描述、数量、单价和行总计)、小计、折扣金额、税金、总金额、已付金额和余额。我们使用 lift 的模式导引提取能力,将每个 PDF 文件传递给 lift.extract(),并获取结构化的提取结果。对于每个发票,我们将提取结果与地面真值进行比较,计算逐字段的精度和召回率。我们还构建了一个简单的账本,汇总所有发票的提取数据,包括金额匹配和状态标志。
最后,我们提供了完整的代码示例,包括安装指令、模型加载、PDF 生成、提取和评分。整个管道旨在处理真实世界的发票变体,并可作为实际应付账款自动化系统的基础。