本案例通过使用通义千问多模态模型经过发票类型识别、发票内容识别两次识别图片内容,实现多种发票关键信息的自动化识别与提取功能;DIFY工作流编排详细流程如下。
一、工作流编排
1、创建应用
打开浏览器登录DIFY平台,点击“工作室”菜单,创建空白应用,选择“Chatflow”,填写“应用名称”,选择图标,点击创建。
2、节点配置
该工作流使用了“开始”、“LLM”、“条件分支”、“变量聚合器”、“直接回复”等多个工具节点。
(1)“开始”节点
添加图片文件类型变量file。
(2)“LLM发票类型识别”节点
使用通义千问的qwen2.5-vl-72b-instruct视觉大模型,对上传的发票图片进行发票类型识别,并输出识别结果。
系统提示词:
# Role: 发票识别专家 ## Profile - 专长: 发票类型识别、图像分析、文字识别 - 经验: 多年处理各类发票和票据的经验 - 技能: 精准识别不同类型发票的特征 ## Goals - 根据用户上传的发票图像准确识别发票类型 - 返回对应的发票类型代码 ## Rules - 仔细分析发票上的所有视觉和文字信息 - 只返回指定的发票类型代码,不做其他解释 - 如果无法确定发票类型,返回 "无法识别" ## Workflows 1. 接收用户上传的发票图像 2. 分析图像中的关键信息和特征 3. 对比不同类型发票的特征 4. 确定发票类型 5. 返回对应的类型代码 ## Output Format 发票类型代码: - 0: 增值税电子发票 - 1: 电子发票(全电发票) - 2: 增值税普通发票-卷票 - 3: 火车票 - 4: 新版火车票-铁路电子客票 - 5: 定额发票 - 6: 出租车发票 ## Examples 用户: [上传增值税电子普通发票图像] 特征: 电子版式,有"增值税电子普通发票"字样,含二维码,有密码区,有 "税局监制"字样 AI: 0 用户: [上传电子发票(普通发票)或电子发票(增值税专用发票)图像] 特征: 电子版式,有"电子发票"字样,发票号码长度有20位 AI: 1 用户: [上传增值税普通发票发票联图像] 特征: 纸质卷式,较窄,有"增值税普通发票"字样,通常为红色或蓝色 AI: 2 用户: [上传火车票图像] 特征: 磁性票,较小,包含乘车日期、车次、座位等信息 AI: 3 用户: [上传新版火车票-铁路电子客票图像] 特征: 电子版式,有"电子发票(铁路电子客票)"标志,包含乘车日期、车次、座位等信息,有发票号码,发票号码长度20位 AI: 4 用户: [上传定额发票图像] 特征: 小型纸质票据,预先印制金额,通常用于小额交易 AI: 5 用户: [上传出租车发票图像] 特征: 纸质卷式,较窄,有"通用机打发票字样"字样,有“车号”、“工号”、“单价”、“里程”、“等候”等字样 AI: 6 用户: [上传模糊不清的图像] 特征: 图像模糊,无法辨识关键信息 AI: 无法识别
开启“视觉”功能,视觉变量为“开始/file”。
(3)“条件分支”节点
根据“LLM发票类型识别”节点识别结果,分别采用不同的提示词对发票内容进行识别,分支条件为“LLM发票类型识别”节点识别结果是否包含预设的发票类型代码。
(4)“LLM发票内容识别”节点
使用LLM节点,模型选用通义千问的qwen2.5-vl-72b-instruct视觉大模型,对应不同的发票类型,给出不同的系统提示词,其它配置都一样。
(4.1)增值税专用发票普通发票
系统提示词:
请提取这张照片的内容,其中内容格式‘机器编号’、‘发票代码’、‘发票号码’、‘开票日期’、‘校 验 码’、‘购买方名称’、‘购买方纳税人识别号’、‘购买方地 址、电 话’、‘开户行及账号’、‘货物或应税劳务、服务名称’、‘规格型号’、‘单 位’、‘数 量’、‘单 价’、‘金 额’、‘税率’、‘税 额’、‘价税合计(大写)’、‘价税合计(小写)’、‘销售方名称’、‘销售方纳税人识别号’、‘销售方地 址、电 话’、‘销售方地 址、电 话’、‘开户行及账号’、‘备注’、‘收款人’、‘复核’、‘开票人’ 字段返回信息,返回的结果信息以json格式返回
(4.2)电子发票(全电发票)
系统提示词:
请提取这张照片的内容,其中内容格式‘发票号码’、‘开票日期’、‘购买方信息名称’、‘购买方统一社会信用代码/纳税人识别号’、‘销售方信息名称’、‘销售方统一社会信用代码/纳税人识别号’、‘项目名称’、‘规格型号’、‘单 位’、‘数 量’、‘单 价’、‘金 额’、‘税率/征收率’、‘税 额’、‘合计’、‘价税合计(大写)’、‘价税合计(小写)’、‘备 注’ 字段返回信息,返回的结果信息以json格式返回
(4.3)增值税普通发票(卷票)
系统提示词:
请提取这张照片的内容,其中内容格式‘发票代码’、'发票号码’、'机打号码’、‘机器编号’、‘销售方名称’、‘纳税人识别号’、‘开票日期’、‘收款员’、‘购买方名称’、‘纳税人识别号’、‘项目’、‘单价’、‘数量’、‘金额’、‘合计金额(小写)’、‘合计金额(大写)’、‘校验码’字段返回信息,返回的结果信息以json格式返回
(4.4)火车票
系统提示词:
请提取这张照片的内容,其中内容格式‘始发站’、‘终点站’、‘车次’、‘出发时间’、‘票价’、‘身份证号’、‘姓名’字段返回信息,返回的结果信息以json格式返回
(4.5)新版火车票(铁路电子客票)
系统提示词:
请提取这张照片的内容,其中内容格式‘发票号码’、'开票日期’、'‘出发时间’、‘始发站’、‘终点站’、‘车次’、‘票价’、‘身份证号’、‘姓名’、‘电子客票号’、‘购买方名称’、‘统一社会信用代码’字段返回信息,返回的结果信息以json格式返回
(4.6)定额发票
系统提示词:
请提取这张照片的内容,其中内容格式‘发票代码’、'发票号码’、'金额’字段返回信息,返回的结果信息以json格式返回
(4.7)出租车发票
系统提示词:
请提取这张照片的内容,其中内容格式‘发票代码’、'发票号码’、'单位’、'车号’、'工号’、'日期’、'时间’、'单价’、'里程’、'等候’、'金额’等字段返回信息,返回的结果信息以json格式返回
(4.8)未识别回复
对应未能正确识别的发票,直接回复“未识别出发票信息,请重新上传发票”。
(5)“变量聚合器”节点
对各种发票类型识别结果进行合并输出,变量赋值为各类发票识别模型识别结果汇总。
(6)“回复识别结果”节点
直接输出“变量聚合器”输出的节点即可,为了验证提取结果是否正确,可以同时将上传的发票图片一并输出。
二、预览验证
1、从本地上传一张增值税普通发票测试,验证成功,测试结果如下:
2、从本地上传一张铁路电子客票测试,验证成功,测试结果如下:
交流更多,请关注微信公众号:和光同尘3215