最近有小伙伴們反應(yīng)了開(kāi)始節(jié)點(diǎn)上傳文件后,文檔提取器節(jié)點(diǎn)報(bào)錯(cuò)問(wèn)題,這個(gè)問(wèn)題之前是有小伙伴提出來(lái)過(guò)的,當(dāng)時(shí)的解決方案我給忘了,然后就和大家一起研究了下這個(gè)問(wèn)題,并給出解決方案。
一、問(wèn)題重現(xiàn)
下面我們先來(lái)看看這個(gè)Demo:
就是很簡(jiǎn)單的一個(gè)開(kāi)始節(jié)點(diǎn)后接文檔提取器,開(kāi)始節(jié)點(diǎn)有一個(gè)必填參數(shù)我命名為one_file,實(shí)際上就是一個(gè)單文件,然后上傳文件類(lèi)型選擇的是URL類(lèi)型,如下圖:
然后文檔提取器節(jié)點(diǎn)就更簡(jiǎn)單,輸入變量選擇開(kāi)始節(jié)點(diǎn)的one_file變量即可,就相當(dāng)于選擇這個(gè)文件:
結(jié)束節(jié)點(diǎn)就不用管了,不影響操作,也就不貼出來(lái)了。
好了,整個(gè)demo的工作流節(jié)點(diǎn)就這些,設(shè)置什么的上面也貼出來(lái)很清楚,那么我們就在編輯頁(yè)面預(yù)覽一下,上傳一個(gè)文件試試
點(diǎn)擊預(yù)覽后會(huì)讓我們粘貼文件鏈接,然后跟著頁(yè)面把上面的url貼進(jìn)去就點(diǎn)擊按鈕就開(kāi)始上傳文件了:
等上傳完文件,會(huì)展示文件的類(lèi)型和大小等信息,代表識(shí)別到了這個(gè)文件類(lèi)型,因?yàn)槲覀兒竺嬗玫氖俏臋n提取器,不支持圖片,所以這里就選擇的是一個(gè)docx的文檔,如果上傳的是圖片則會(huì)顯示圖片的縮略圖。
然后我們就開(kāi)始往下走,在預(yù)覽頁(yè)面下面的輸入框隨便輸入文字點(diǎn)擊發(fā)送按鈕,我輸入的是開(kāi)始,然后整個(gè)工作流開(kāi)始運(yùn)行,隨即就顯示報(bào)錯(cuò)信息,如下圖所示:
報(bào)錯(cuò)信息也提供了錯(cuò)誤信息的參考鏈接,其實(shí)就是這個(gè)文件的url不規(guī)范導(dǎo)致報(bào)錯(cuò),下面看看報(bào)錯(cuò)的詳細(xì)截圖:
我在做這個(gè)操作的時(shí)候,打開(kāi)了瀏覽器的開(kāi)發(fā)者模式,可以看到我們操作對(duì)應(yīng)的接口【run】的一個(gè)信息是失敗的,狀態(tài)碼是400:
我們看到返回的錯(cuò)誤信息就是上面那張報(bào)錯(cuò)的信息內(nèi)容:
造成這個(gè)報(bào)錯(cuò)的原因我們之前就說(shuō)了是url不規(guī)范導(dǎo)致的錯(cuò)誤,我們看這個(gè)接口調(diào)用時(shí)候的傳參就發(fā)現(xiàn)了url這個(gè)參數(shù)不是一個(gè)正常的http開(kāi)頭的鏈接,而是一個(gè)相對(duì)路徑,如下圖所示:
好了,到這兒我們就已經(jīng)找出了問(wèn)題所在,是因?yàn)閡rl并不是一個(gè)規(guī)范的http/https開(kāi)頭的鏈接就導(dǎo)致系統(tǒng)的校驗(yàn)就無(wú)法通過(guò),從而就報(bào)的是這個(gè)參數(shù)不規(guī)范的錯(cuò)誤。
二、解決方案
上面我們已經(jīng)重現(xiàn)了問(wèn)題并找到了導(dǎo)致問(wèn)題的原因,那么下面我們就一起來(lái)看看如何解決吧!
我們首先找到.env這個(gè)配置文件,打開(kāi)后找到FILES_URL這個(gè)配置項(xiàng),這個(gè)配置項(xiàng)默認(rèn)是空的,如下:
我們給填寫(xiě)上對(duì)應(yīng)的url即可,我使用的機(jī)器對(duì)應(yīng)的域名,如果你們部署的時(shí)候沒(méi)有調(diào)整過(guò)端口,使用Docker啟動(dòng)的,那可以填寫(xiě)下面這個(gè)url:
http://host.docker.internal
我在之前的一篇文章里講過(guò)調(diào)整過(guò)端口相關(guān)的一個(gè)配置項(xiàng)的更改,有興趣的可以移步去看看《Dify更改默認(rèn)端口及發(fā)布應(yīng)用后Nginx 404錯(cuò)誤解決方案》
更改完配置項(xiàng)后記得保存,然后執(zhí)行下面命令:
先停用:
dockercompose down
然后啟動(dòng):
dockercompose up -d
啟動(dòng)后,我們?cè)偃偛诺腄emo中看看。
我們按照剛才的步驟在走一遍,還是先粘貼文件鏈接,然后點(diǎn)擊按鈕,再次之前我們打開(kāi)開(kāi)發(fā)者工具,可以看到調(diào)用了upload接口,我們可以看到文件上傳后返回的數(shù)據(jù)中,url已經(jīng)是一個(gè)正常的url了:
然后我們繼續(xù)輸入文字后發(fā)送,可以看到之前我們調(diào)用的run接口這回正擦灰姑娘了,發(fā)送的參數(shù)中url也是帶http的
之后整個(gè)流程也就結(jié)束了,整個(gè)工作流都是正常的沒(méi)有再報(bào)錯(cuò)誤信息了。
這個(gè)問(wèn)題是很多人會(huì)忽略的問(wèn)題,其實(shí)解決起來(lái)很簡(jiǎn)單,希望可以幫到同樣遇到這樣問(wèn)題而不知道如何解決的小伙伴們!