Dify文件选择URL模式报错问题及解决方案 - 图1

最近群里小伙伴们提出了开始节点上传文件后,文档提取器节点报错问题,这个问题之前是有小伙伴提出来过的,当时的解决方案我给忘了,然后就和大家一起研究了下这个问题,并给出解决方案。

一、问题重现

下面我们先来看看这个Demo:

Dify文件选择URL模式报错问题及解决方案 - 图2

就是很简单的一个开始节点后接文档提取器,开始节点有一个必填参数我命名为one_file,实际上就是一个单文件,然后上传文件类型选择的是URL类型,如下图:

Dify文件选择URL模式报错问题及解决方案 - 图3

然后文档提取器节点就更简单,输入变量选择开始节点的one_file变量即可,就相当于选择这个文件:

Dify文件选择URL模式报错问题及解决方案 - 图4

结束节点就不用管了,不影响操作,也就不贴出来了。

好了,整个demo的工作流节点就这些,设置什么的上面也贴出来很清楚,那么我们就在编辑页面预览一下,上传一个文件试试

Dify文件选择URL模式报错问题及解决方案 - 图5

点击预览后会让我们粘贴文件链接,然后跟着页面把上面的url贴进去就点击按钮就开始上传文件了:

Dify文件选择URL模式报错问题及解决方案 - 图6

等上传完文件,会展示文件的类型和大小等信息,代表识别到了这个文件类型,因为我们后面用的是文档提取器,不支持图片,所以这里就选择的是一个docx的文档,如果上传的是图片则会显示图片的缩略图。

然后我们就开始往下走,在预览页面下面的输入框随便输入文字点击发送按钮,我输入的是开始,然后整个工作流开始运行,随即就显示报错信息,如下图所示:

Dify文件选择URL模式报错问题及解决方案 - 图7

报错信息也提供了错误信息的参考链接,其实就是这个文件的url不规范导致报错,下面看看报错的详细截图:

Dify文件选择URL模式报错问题及解决方案 - 图8

我在做这个操作的时候,打开了浏览器的开发者模式,可以看到我们操作对应的接口【run】的一个信息是失败的,状态码是400:

Dify文件选择URL模式报错问题及解决方案 - 图9

我们看到返回的错误信息就是上面那张报错的信息内容:

Dify文件选择URL模式报错问题及解决方案 - 图10

造成这个报错的原因我们之前就说了是url不规范导致的错误,我们看这个接口调用时候的传参就发现了url这个参数不是一个正常的http开头的链接,而是一个相对路径,如下图所示:

Dify文件选择URL模式报错问题及解决方案 - 图11

好了,到这儿我们就已经找出了问题所在,是因为url并不是一个规范的http/https开头的链接就导致系统的校验就无法通过,从而就报的是这个参数不规范的错误。

二、解决方案

上面我们已经重现了问题并找到了导致问题的原因,那么下面我们就一起来看看如何解决吧!

我们首先找到.env这个配置文件,打开后找到FILES_URL这个配置项,这个配置项默认是空的,如下:

我们给填写上对应的url即可,我使用的机器对应的域名,如果你们部署的时候没有调整过端口,使用Docker启动的,那可以填写下面这个url:

http://host.docker.internal

我在之前的一篇文章里讲过调整过端口相关的一个配置项的更改,有兴趣的可以移步去看看《Dify更改默认端口及发布应用后Nginx 404错误解决方案》

更改完配置项后记得保存,然后执行下面命令:

先停用:

dockercompose down

然后启动:

dockercompose up -d

启动后,我们再去刚才的Demo中看看。

我们按照刚才的步骤在走一遍,还是先粘贴文件链接,然后点击按钮,再次之前我们打开开发者工具,可以看到调用了upload接口,我们可以看到文件上传后返回的数据中,url已经是一个正常的url了:

Dify文件选择URL模式报错问题及解决方案 - 图12

然后我们继续输入文字后发送,可以看到之前我们调用的run接口这回正擦灰姑娘了,发送的参数中url也是带http的

Dify文件选择URL模式报错问题及解决方案 - 图13

之后整个流程也就结束了,整个工作流都是正常的没有再报错误信息了。

Dify文件选择URL模式报错问题及解决方案 - 图14

这个问题是很多人会忽略的问题,其实解决起来很简单,希望可以帮到同样遇到这样问题而不知道如何解决的小伙伴们!