Dify基于视觉模型实现多票据识别
《Dify基于视觉模型实现多票据识别》共 0.4 万字,通篇围绕 多模态、工作流、提示词、视觉 展开,归在「框架与工具链」这一层。
适合要选技术栈、不想把别人踩过的坑重踩一遍的人
目录骨架(8 节)
- 课程内容
- 创建工作流或者chatflow
- Profile
- Workflows
- Output Format
- Examples
- chatflow调试及发布
- 文档提取器
课程内容
- 创建多票据识别工作流
- 执行票据文档提取
- 多模态大模型识别票据内容
- 变量聚合器和直接回复
- Chatflow调试及发布
本次我们实现多种发票识别的dify基于工作流的智能体
下面我们首先介绍一下整体功能。

这里面主要功能:用户上传一个发票图片(目前我们这工作流支持6种发票),发票会经过文档提取器。文档提取器提取用户上传的发票传递给llm多模态模型,这个模型的作用是判断这发票是哪个类型的发票,接下来我们会根据条件分支来判断走哪个多模态发票提取的llm大语言模型。 其中这6个大语言模型区别就在于他们的系统提示词不一样,主要就是每个发票票面信息不一样。模型会根据不同发票票面信息提示词的不同而有所区别,模型返回的json格式的发票信息在发送给变量聚合器进行出来,处理完成后再发送给用户,整体的功能大概就是这样的。
实现的效果如下:
1 火车票票面识别

2.加油站卷式发票

下面我们重点介绍一下这个工作流是如何实现的。
创建工作流或者chatflow
接着来到Dify中按下图顺序依次点击并点击创建(注:chatflow和工作流配置基本差不多,下面我们就以chatflow讲解)

开始
开始节点点开后我们需要添加一个文件上传输入参数。点击开始节点输入字段,点击右边的“+”

我们选择单个文件,输入变量名称、支持的文件类型我们这里就选择图片。其他都可以默认,输入完成后,点击保存按钮

以上步骤完成开始节点设置。

文档提取器
接下来我们在工作流画布中,选择文档提取器和开始节点连接,去掉llm和开始节点连接


我们在文档提取器,输入变量中选中 sys.files 变量

llm(发票识别判断模型)
接下来我们将文档提取器的连接线和llm大语言模型连接。然后按照以下几个步骤设置
1.模型选择,模型我们在模型下拉列表中选择自定义OpenAI-API-compatible Qwen/Qwen2-VL-72B-Instruct模型;模型最大标记4096
2.上下文,这里设置开始节点file 属性值
3.SYSTEM 提示词 我们输入如下内容
# 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