“ 經(jīng)驗(yàn)主義不可犯,否則是需要付出代價的 ”
在上一篇文章中說過最近在做ComfyUI工作流方面的業(yè)務(wù),具體的可以看之前的文章——再談大模型工作流技術(shù)之——ComfyUI框架。
由于ComfyUI并不是一個組織或企業(yè)開發(fā)的,因此它目前的生態(tài)還不夠完善,甚至沒有一個完善的官方文檔。特別是對程序員來說,想使用ComfyUI的接口要么自己去網(wǎng)上找一些別人使用接口的說明或者是去github上自己翻官方提供的一些簡單案例。
而這次問題就出在接口上。
01
—
ComfyUI工作流問題
在上一篇文章中說,ComfyUI就是一個工作流配置工具,它通過web頁面根據(jù)具體的業(yè)務(wù)需求進(jìn)行配置,一個工作流由多個節(jié)點(diǎn)組成,每個節(jié)點(diǎn)可以完成特定的功能,比如說調(diào)用大模型。
而工作流經(jīng)過煉丹師的配置,就可以調(diào)用不同的大模型來完成特定功能的任務(wù),而工作流最終的輸出結(jié)果是一個JSON配置文件,開發(fā)人員就可以通過對這個JSON文件的特定節(jié)點(diǎn)進(jìn)行調(diào)整,然后把調(diào)整之后的JSON內(nèi)容上傳到ComfyUI服務(wù),即可獲得特定的效果。
今天的這個問題就出在這個JSON文件上,在剛開始的認(rèn)知中,這個JSON文件就相當(dāng)于一個模板,根據(jù)不同的需求把參數(shù)替換一下就行了。
而今天使用ComfyUI github倉庫中提供的案例代碼,去訪問ComfyUI服務(wù)端,使用煉丹師提供的json文件去獲取結(jié)果。
JSON文件是經(jīng)過測試的,在web頁面上可以成功生成需要的圖片;而使用官方提供的prompt接口生成圖片時,通過websocket監(jiān)聽服務(wù)端的生成狀態(tài),當(dāng)服務(wù)端響應(yīng)生成完成時,則調(diào)用history接口獲取任務(wù)執(zhí)行的結(jié)果。
而就是在這一步,通過history接口響應(yīng)的狀態(tài)都是成功的,但就是沒有返回生成文件的名稱和路徑。
然后就把github上提供的幾個案例都在服務(wù)器上跑了一下,結(jié)果都獲取不到。
而之前做的一個視頻生成的業(yè)務(wù),調(diào)用ComfyUI工作流就可以獲取到。
因此,這時就想到一個思路,既然案例代碼都不行,那么是ComfyUI本身的bug,還是現(xiàn)在的環(huán)境有問題?
因此,這時就找到在之前視頻生成的代碼,把視頻生成的業(yè)務(wù)給跑一遍,結(jié)果發(fā)現(xiàn)視頻生成竟然是正常的。
而且在此之前,還把ComfyUI github上的代碼下載到了本地,看了一部分源碼也沒發(fā)現(xiàn)問題在哪。
ComfyUI github地址 https://github.com/comfyanonymous/ComfyUI/tree/master/script_examples
而最終是怎么解決這個問題的呢?
其實(shí)解決這個問題更多的是一種運(yùn)氣,因?yàn)閺睦碚撋蟻碚f,官方提供的案例代碼一般情況下不會有什么問題,因此我就把官方的案例代碼給跑了好多遍,每一遍都會把它們輸出的結(jié)果拿出來對比一下。
因此,在跑視頻生成業(yè)務(wù)的時候,又習(xí)慣性的看一下接口輸出,結(jié)果發(fā)現(xiàn)視頻業(yè)務(wù)和圖片生成業(yè)務(wù)在JSON內(nèi)容上有區(qū)別。
畢竟是兩種完全不同的業(yè)務(wù),有區(qū)別其實(shí)也是正常的,但根據(jù)自己的經(jīng)驗(yàn)來說,在視頻生成業(yè)務(wù)中有一個節(jié)點(diǎn)是關(guān)于文件存儲的,但在圖像業(yè)務(wù)中就沒有這個節(jié)點(diǎn)。
這時,這個節(jié)點(diǎn)就引起了我的注意,剛好問了一下煉丹師,煉丹師說視頻業(yè)務(wù)和圖像業(yè)務(wù)在存儲方式上不一樣,圖像業(yè)務(wù)有一種存儲方式可能會有問題,因此就沒有用。
所以,為了驗(yàn)證是否是這個問題,就讓煉丹師把存儲方式給改了一下;這時圖像生成就能正常返回了。
之所以寫這篇文章的目的,并不是說這個問題本身,而是說很多時候人會陷入經(jīng)驗(yàn)主義;在剛開始從來沒想過JSON文件會有問題,其次即使JSON文件有問題最多只是會影響圖片的生成,但沒想到會影響接口的返回。