实验报告:基于Dify的Chatflow实现论文解读工具优化版
需求梳理
核心目标
- 测试基于Dify的Chatflow构建论文解读工具,支持多类型输入(文档与图片)和分步解析(结构、方法、图片信息)。
功能需求
- 输入支持:
txt/pdf/ppt文档 +png/jpg图片。 - 多模态处理:
- 文档分支:提取文本 → LLM1(结构及论证链分析) → LLM2(方法细节提取)。
- 图片分支:视觉解析 → LLM3(图片信息总结)。
- LLM4合并多来源结果生成最终解读。
Dify基础概念梳理
关键术语
| 术语 | 定义 |
|---|---|
| Chatflow | Dify中用于构建LLM对话流程的可视化工作流设计工具。 |
| 节点 | 流程中的功能单元(如输入节点、LLM处理节点、输出节点)。 |
| 变量 | 节点间传递数据的载体,支持全局变量或前驱节点输出变量。 |
| 文档提取器 | 将非结构化文档(如PDF)转换为LLM可解析文本的预处理模块。 |
| 全局变量 | 在整个Chatflow中持续存在的变量,可跨节点访问,用于存储全局共享数据(如API密钥、用户ID)。 |
| 变量聚合器 | 将多个节点输出合并为结构化数据的工具,用于多分支流程的结果汇总(例:${LLM1输出}+${LLM2输出})。 |
| 变量赋值器 | 动态修改变量值的组件,支持条件赋值或计算赋值(例:set var=图片数量>0 ? "含图" : "无图")。 |
实验过程与问题解决
阶段一:单文本基础流程测试
流程
输入txt → 文档提取 → LLM解读 → 输出
示例:
遇到了两个问题
1.Dify使用了一个变量来描述信息在节点之间的传递,每个节点需要输入变量,输入变量可以是全局变量可以是直接连接的上一个节点的输出变量.不正确的变量输入和输出会导致抛出错误
有输入无输出,变量未传递
2.LLM无法直接理解文本,需要一个文档提取器
简单的修改之后得到了正确的输出结果
这个模型太傻了XD
第二轮:多输入复杂模型构建
流程设计
graph TD
A[输入文档/图片] --> B{类型判断}
B --> |文档| C[文档提取器]
C --> D[LLM1: 结构分析]
D --> E[LLM2: 方法解析]
B --> |图片| F[LLM3: 图片总结]
E & F --> G[总结节点]
这一轮遇到了很多问题 1.Dify的LLM不支持多个输入,所以必须利用一个合理的中间变量实现多个输入的拼接 2.LLM之间的参数差距大,想要熟练运用各个LLM需要很仔细的调整
2.图片文件和文档文件里,LLM不一定支持视觉,所以如何在混合输入下实现图片和文档的输入分离并且保证图片里的信息和文档中的信息能相互对应和解读
3.空输入会报错,所以对于可能的图片必须选择合理的流程
最后的效果,以DeepseekV2技术报告为例
感觉一般,做个小总结
- Dify的功能不完善,自定义节点很难明确实现
- LLM之间的参数和与特性需要很仔细的调整,相当耗时
- 思考模型用时过长,复杂的工作流可能会导致超过十分钟的响应时间,直接限制了复杂工作流的实现可能