在使用Dify搭建自动化工作流时,若需实现用户上传文件,并让流程中多个节点依次引用处理结果,必然会遇到默认单节点文件处理的局限。实际上,必须手动配置节点的输入与输出字段,才能完成跨节点文件传递。以下将逐步拆解这一过程。
配置支持文件上传的触发节点
进入工作流画布,点击左上角「+ 添加节点」→ 选择「开始节点」→ 在右侧配置面板中,将「触发方式」设为「表单触发」。
在「表单字段」区域点击「添加字段」→ 类型选「文件」→ 字段名称填写“uploaded_file”→ 勾选「允许多文件上传」(若需支持多个附件)→ 保存设置。
此步骤是流程的入口前提,【文件字段必须命名为 uploaded_file,后续节点将依赖这个精确字段名才能正确读取】。一旦命名错误,下游节点将无法定位到文件对象。
配置文件解析节点并显式定义输出字段
从「开始节点」拖出连线,接入「代码节点」或「知识库检索节点」(若需要OCR/文本提取)→ 点击该节点,在右侧「输入」区域手动添加一条输入映射:Key 填写 “file”,Value 填写 {{start.uploaded_file}}。
对于代码节点,需编写Python逻辑读取 file 参数(该参数实际是一个包含 url、name、size 等属性的字典),通过 requests.get(file['url']) 下载内容,再进行PDF解析或图像识别等操作。
关键环节在于:在该节点的「输出」配置区域,点击「添加输出字段」→ 字段名设为 parsed_text → 值填写 {{code.output.text}}(假定代码节点返回了text键)→ 再添加一个输出字段 file_metadata → 值填写 {{code.output.metadata}}。
输出字段名必须显式声明,否则其他节点无法通过 {{parse_node.parsed_text}} 这类语法引用——Dify不会自动透传代码节点的任意返回值。
实现跨节点引用:让第三节点调用前序结果
第一步:从解析节点拖出连线,接上一个新的「大模型节点」。
第二步:在该大模型节点的「提示词」编辑框中,直接插入变量引用:例如写“请基于以下材料回答问题:{{parse_node.parsed_text}}。原始文件名是{{parse_node.file_metadata.filename}}。”
第三步:检查右侧「输入」区域,确认没有手动覆盖 parse_node.parsed_text 的映射——若此处误写了 input_text: {{start.uploaded_file}},将覆盖你真正想要的解析后文本。
第四步:运行测试时,上传一个包含表格的PDF,观察大模型节点收到的内容是否为结构化文本而非二进制乱码——若收到的是URL字符串而非解析后的文字,说明代码节点未正确返回 text 字段,或输出映射名称不匹配。
补充说明:让同一份文件被多个分支同时使用
方法一:从「开始节点」直接拉出多条线,分别连接到「代码节点A」和「代码节点B」,两个节点都配置 file: {{start.uploaded_file}} 作为输入。这样两个分支各自独立处理原始文件,互不干扰。
方法二:若需先统一预处理再分发,可在第一个代码节点完成基础解析后,在其「输出」中新增字段 raw_content,值为 {{code.output.content}};后续所有分支节点均引用 {{preprocess_node.raw_content}},避免重复下载和解析。
注意:Dify不允许节点输出字段名为 file 或 files,这类保留字会导致引用失败,建议改用 uploaded_doc 或 source_blob 等自定义名称,更为安全可靠。
