对于常常会遇到需要整理各类票据、发票、收据的场景。无论是报销、记账,还是家庭财务管理,手动录入票据信息既繁琐又容易出错。尤其当票据数量较多时,人工处理不仅耗时,还容易因疲劳而导致数据错误。

本文结合此类需求,分享一套基于开源工具的票据识别、内容提取,票据整理和统计的自动流程。无需高深技术背景,只要有基本的命令行操作经验,就能上手。这套方案适用于各类票据处理场景,不仅能提高效率,还能显著降低错误率。


一、主要环节

整个票据处理流程可分为三个主要环节,每个环节都有对应的工具和方法:

1. 从票据文件中识别文字信息

示例票据(火车票):

使用 qwen-vl-ocr-1028 模型识别结果:

S056626
青岛
Qingdao
K1136次
Heze
2013年2月3日17:38日开
¥93.00元
限乘当日当次车
黄飞
3702051981****2011
12290003031313 S056626
青岛售
13车001号
硬座

可以看到,OCR模型成功识别出了票据上的所有关键信息,包括票号、出发地、目的地、车次、时间、票价等(地址有一处识别错误)。这些原始文本数据将为下一步的结构化处理奠定基础。

2. 从文字信息中提取结构化数据

使用 deepseek-chat 模型提取的结构化信息结果:

{
  "type-code": "train-ticket",
  "fields": {
    "票号": "S056626",
    "出发地": "青岛",
    "目的地": "菏泽",
    "车次": "K1136次",
    "发车时间": "2013年2月3日17:38",
    "票价": "¥93.00元",
    "乘车限制": "限乘当日当次车",
    "姓名": "黄飞",
    "身份证号": "3702051981****2011",
    "序列号": "12290003031313",
    "售票地": "青岛售",
    "车厢号": "13车",
    "座位号": "001号",
    "座位类型": "硬座"
  }
}

模型不仅提取出了所有关键字段,还自动纠正了OCR识别错误,并判断出了票据类型(火车票),并将数据组织成了规范的JSON结构。这种结构化数据非常适合后续的统计分析和数据库存储。

用于信息提取的AI提示词可从下文分享的大模型调用模板中获取。或如需提示词原文,可评论或私信。

3. 保存结构化信息和生成汇总文件

处理完成后,系统会生成两类文件:

  • 单张票据JSON文件:每张票据生成一个独立的JSON文件,包含该票据的所有结构化信息,便于后续查阅和单据追溯
  • 汇总文件:将所有票据信息合并为CSV或JSON格式的汇总表,按票据类型(如火车票、机票、餐饮发票等)分组,方便进行总览和分类统计

汇总表格对于财务报表、经费统计、消费分析等场景尤为有用,可以直接导入到Excel或其他数据分析工具中进行进一步处理。


二、所需工具的安装与配置

在开始使用这套流程前,需要先安装配置几个核心工具。如果之前已经安装和配置,可跳过此步骤。

1. 安装 amo 工具

amo 是一个命令行工具,用于运行和管理工作流脚本,以及安装和管理常用的外部工具。
因篇幅所限,本文不再赘述,详细安装指南可参考 工具 amo 的安装与使用指南

2. 安装其它工具

安装好 amo 后,就可以方便的使用它来安装工作流脚本和依赖的工具了。

  1. 安装文档文字提取工具 doc-to-text

doc-to-text 是一款文档转文字提取工具,支持多种格式的文件,包括图片、PDF、Word等。它将调用多种外部工具,将不同的文件转换为文字。例如自动调用 surya_ocr 在本地将PDF提取为文本, 或通过使用 llm-caller 调用阿里云的 Qwen-vl 模型,准确识别各类票据上的文字,即使是一些打印不清晰或布局复杂的票据也能应对。

amo tool install doc-to-text
  1. 安装大模型调用工具 llm-caller

从OCR识别出的文本中,我们需要进一步提取出结构化的数据。可以使用 llm-caller 工具调用大型语言模型(如DeepSeek、Claude、GPT等),将非结构化文本转换为结构化的JSON格式数据。

amo tool install llm-caller

3. 配置 API 密钥

llm-caller 要调用大语言模型服务的API,因此需要配置相应的API密钥:

  1. 创建一个 api-keys.json 文件,格式如下:
{
  "deepseek_api_key": "sk-xxx",
  "openai_api_key": "sk-xxx",
  "anthropic_api_key": "sk-xxx",
  "aliyun_api_key": "sk-xxx"
}

本工作流使用到 deepseekaliyun 的模型,因此需要配置相应的API密钥。

  1. 配置 llm-caller 使用此密钥文件:
# 设置API密钥文件路径
llm-caller config set secret_file /path/to/api-keys.json
  1. 验证配置是否正确:
# 检查配置情况
llm-caller doctor

三、批量自动化处理:工作流脚本实践

如果你有一整个文件夹的票据需要处理,手动一张张操作显然太过麻烦。可以将上述过程写成一个工作流脚本,实现一键完成批量识别、结构化和汇总。

核心思路

  1. 批量遍历文件夹内所有票据文件,自动识别格式(图片、PDF等)
  2. 逐个调用 doc-to-text 提取文字,并保存中间文本结果
  3. llm-caller 结构化提取关键信息,生成每张票据的 JSON 文件
  4. 自动合并所有结构化数据,按票据类型生成汇总表(如 CSV/JSON)

工作流脚本使用方法

本流程已封装为开源工作流脚本,使用方法如下:

  1. 安装 amo 工具(如前文所述)

  2. 下载工作流脚本

amo workflow get https://github.com/nodewee/amo-workflows/blob/main/workflows/receipt-extraction.js
  1. 处理单个票据
amo run receipt-extraction.js --input /path/to/火车票.jpg
  1. 运行批量处理
amo run receipt-extraction.js --input /票据文件夹 --output ./输出目录 --var format=csv

参数说明:

  • input:票据文件夹路径,存放所有需处理的票据图片或PDF
  • output:输出目录,存放处理结果和汇总文件
  • format:汇总文件格式(可选 csv 或 json)

脚本亮点

这个工作流脚本具有以下特点:

  • 断点续跑:已处理过的票据自动跳过,支持中断后继续处理
  • 多类型支持:自动识别不同类型的票据(如火车票、机票、餐饮发票等),并分类汇总

更进一步

可定制增加后续的统计分析功能,直接生成各种报表。


四、应用场景示例

这套票据处理方案在多种场景下都能发挥作用,例如:

1. 公司财务报销

对于公司的财务专员,每月要处理几十张员工提交的各类报销票据。使用传统方法,他需要逐张查看票据,手动录入发票号码、金额、日期等信息到报销系统,既耗时又容易出错。

采用自动化方案后:

  • 他只需将所有票据扫描存放到一个文件夹
  • 运行一次脚本,即可得到所有票据的结构化信息和汇总表
  • 汇总表可直接导入到财务系统,大大提高了工作效率
  • 错误率显著降低,报销流程加速

2. 家庭财务管理

对于喜欢记录家庭开支的人来说,常因忙碌而堆积了大量超市小票、外卖单和各类消费凭证。他希望能分析自己的消费习惯,但手动整理这些票据太过繁琐。

使用这套方案后:

  • 他定期用手机拍下各类票据,存入指定文件夹
  • 每月底运行一次脚本,自动生成当月消费汇总
  • 系统会按消费类别(餐饮、日用、交通等)自动分类统计
  • 他可以清晰看到每月各类消费的占比和趋势,轻松实现家庭预算管理

3. 自由职业者税务申报

对于自由职业者,需要为税务申报整理全年的收入和支出凭证。由于客户众多,票据类型复杂,传统整理方式非常耗时。

使用自动化方案后:

  • 他将全年收集的各类收据、发票分类存放
  • 通过一次脚本运行,生成全年收支明细表
  • 系统自动识别不同类型的收入和支出,并进行分类汇总
  • 他可以直接将汇总数据用于税务申报,大大简化了年度结算工作

随着人工智能技术的不断进步,票据处理的准确率和效率还将持续提升。希望本文介绍的方法能为你的生活和工作带来一点便利,让数据整理不再是负担。

如有疑问或改进建议,欢迎留言交流。我也会持续更新这套工具和方法,以适应更多场景和需求。

将持续分享自动化相关的工具、工作流以及智能体,欢迎关注/订阅「缓坡漫步」


推广:
阿里云百炼大模型 9折优惠 + 所有模型各百万免费Token →
即梦 免费AI画图、生成视频。每日领免费额度,可累加 →