对于常常会遇到需要整理各类票据、发票、收据的场景。无论是报销、记账,还是家庭财务管理,手动录入票据信息既繁琐又容易出错。尤其当票据数量较多时,人工处理不仅耗时,还容易因疲劳而导致数据错误。
本文结合此类需求,分享一套基于开源工具的票据识别、内容提取,票据整理和统计的自动流程。无需高深技术背景,只要有基本的命令行操作经验,就能上手。这套方案适用于各类票据处理场景,不仅能提高效率,还能显著降低错误率。
一、主要环节
整个票据处理流程可分为三个主要环节,每个环节都有对应的工具和方法:
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 后,就可以方便的使用它来安装工作流脚本和依赖的工具了。
- 安装文档文字提取工具 doc-to-text
doc-to-text
是一款文档转文字提取工具,支持多种格式的文件,包括图片、PDF、Word等。它将调用多种外部工具,将不同的文件转换为文字。例如自动调用 surya_ocr 在本地将PDF提取为文本, 或通过使用 llm-caller 调用阿里云的 Qwen-vl 模型,准确识别各类票据上的文字,即使是一些打印不清晰或布局复杂的票据也能应对。
amo tool install doc-to-text
- 安装大模型调用工具 llm-caller
从OCR识别出的文本中,我们需要进一步提取出结构化的数据。可以使用 llm-caller 工具调用大型语言模型(如DeepSeek、Claude、GPT等),将非结构化文本转换为结构化的JSON格式数据。
amo tool install llm-caller
3. 配置 API 密钥
llm-caller
要调用大语言模型服务的API,因此需要配置相应的API密钥:
- 创建一个
api-keys.json
文件,格式如下:
{
"deepseek_api_key": "sk-xxx",
"openai_api_key": "sk-xxx",
"anthropic_api_key": "sk-xxx",
"aliyun_api_key": "sk-xxx"
}
本工作流使用到 deepseek 和 aliyun 的模型,因此需要配置相应的API密钥。
- 配置 llm-caller 使用此密钥文件:
# 设置API密钥文件路径
llm-caller config set secret_file /path/to/api-keys.json
- 验证配置是否正确:
# 检查配置情况
llm-caller doctor
三、批量自动化处理:工作流脚本实践
如果你有一整个文件夹的票据需要处理,手动一张张操作显然太过麻烦。可以将上述过程写成一个工作流脚本,实现一键完成批量识别、结构化和汇总。
核心思路
- 批量遍历文件夹内所有票据文件,自动识别格式(图片、PDF等)
- 逐个调用
doc-to-text
提取文字,并保存中间文本结果 - 用
llm-caller
结构化提取关键信息,生成每张票据的 JSON 文件 - 自动合并所有结构化数据,按票据类型生成汇总表(如 CSV/JSON)
工作流脚本使用方法
本流程已封装为开源工作流脚本,使用方法如下:
安装 amo 工具(如前文所述)
下载工作流脚本:
amo workflow get https://github.com/nodewee/amo-workflows/blob/main/workflows/receipt-extraction.js
- 处理单个票据:
amo run receipt-extraction.js --input /path/to/火车票.jpg
- 运行批量处理:
amo run receipt-extraction.js --input /票据文件夹 --output ./输出目录 --var format=csv
参数说明:
input
:票据文件夹路径,存放所有需处理的票据图片或PDFoutput
:输出目录,存放处理结果和汇总文件format
:汇总文件格式(可选 csv 或 json)
脚本亮点
这个工作流脚本具有以下特点:
- 断点续跑:已处理过的票据自动跳过,支持中断后继续处理
- 多类型支持:自动识别不同类型的票据(如火车票、机票、餐饮发票等),并分类汇总
更进一步
可定制增加后续的统计分析功能,直接生成各种报表。
四、应用场景示例
这套票据处理方案在多种场景下都能发挥作用,例如:
1. 公司财务报销
对于公司的财务专员,每月要处理几十张员工提交的各类报销票据。使用传统方法,他需要逐张查看票据,手动录入发票号码、金额、日期等信息到报销系统,既耗时又容易出错。
采用自动化方案后:
- 他只需将所有票据扫描存放到一个文件夹
- 运行一次脚本,即可得到所有票据的结构化信息和汇总表
- 汇总表可直接导入到财务系统,大大提高了工作效率
- 错误率显著降低,报销流程加速
2. 家庭财务管理
对于喜欢记录家庭开支的人来说,常因忙碌而堆积了大量超市小票、外卖单和各类消费凭证。他希望能分析自己的消费习惯,但手动整理这些票据太过繁琐。
使用这套方案后:
- 他定期用手机拍下各类票据,存入指定文件夹
- 每月底运行一次脚本,自动生成当月消费汇总
- 系统会按消费类别(餐饮、日用、交通等)自动分类统计
- 他可以清晰看到每月各类消费的占比和趋势,轻松实现家庭预算管理
3. 自由职业者税务申报
对于自由职业者,需要为税务申报整理全年的收入和支出凭证。由于客户众多,票据类型复杂,传统整理方式非常耗时。
使用自动化方案后:
- 他将全年收集的各类收据、发票分类存放
- 通过一次脚本运行,生成全年收支明细表
- 系统自动识别不同类型的收入和支出,并进行分类汇总
- 他可以直接将汇总数据用于税务申报,大大简化了年度结算工作
随着人工智能技术的不断进步,票据处理的准确率和效率还将持续提升。希望本文介绍的方法能为你的生活和工作带来一点便利,让数据整理不再是负担。
如有疑问或改进建议,欢迎留言交流。我也会持续更新这套工具和方法,以适应更多场景和需求。
将持续分享自动化相关的工具、工作流以及智能体,欢迎关注/订阅「缓坡漫步」