雜談:是時候該來處理一下Dify的問題了 / TALK: It's Time to Address the Issues with Dify
在「自行架設大型語言模式應用程式:Dify」這篇裡面,我用Dify在筆電架設了可客製化、具備RAG的大型語言模型應用程式。但這段期間用下來還是遭遇了很多問題。以下就稍微列舉一下我遭遇的狀況。
呼叫外部API的限制 / Limitions of external API calls
https://huggingface.co/docs/api-inference/rate-limits
我在使用的Dify並沒有內建各種資料處理的核心功能,大多重要功能都要呼叫外部API,例如文字嵌入處理使用了Hugging Face、大型語言模型推理就用到Gemini、網頁爬蟲使用了Firecrawl、搜尋引擎則是使用SerpAPI。每種API都有一定程度的免費額度,同時也有禁止短時間內大量取用的限流設定。
其中讓我感到最困擾的是在Hugging Face使用文字嵌入處理的這個環節。由於Dify的RAG設定採用了向量(vector)形式來搜尋,從一開始建立知識庫(knowledge base),到後面查詢這些知識庫的操作,全部都會用到文字嵌入的API。這就讓Hugging Face API的限流成為了使用上最主要的瓶頸。
另一方面,Hugging Face API在第一次呼叫的時候,伺服器端的模型需要花一段時間才能載入,大概要等快一分鐘才能處理完成。加上限流的限制,這讓我沒辦法真正地處理大量文件資料。
說到免費流量的另一個限制,那就是搜尋引擎SerpApi僅提供了每個月100次的搜尋結果。100次乍看之下似乎綽綽有餘,但這是在你很明確知道自己想要搜尋什麼的時候很有用。但如果想要作一些探索、嘗試各種關鍵字的搜尋,那100次的數量很快就會用盡。這也是讓我不敢在Dify用SerpApi作大量搜尋的原因。
檔案處理的困擾 / Unable to Process Files Quickly
在Dify 0.6.14版本裡面,如果要分析文件檔案裡面的內容,做法是在知識庫裡匯入檔案,然後再進行切分(chunk)、建立索引等步驟。但如果每次都要額外建立知識庫的話,看起來並不是合理的做法。
https://docs.dify.ai/guides/workflow/node/doc-extractor
後來在2024年10月的時候,Dify的v0.10.0推出了檔案上傳的功能。這功能允許使用者在跟LLM對話的過程中上傳檔案,然後LLM會根據上傳檔案的內容進行回答。這樣我們就不用另外建立知識庫、或是花費大量時間複製貼上,就能夠分析檔案內容。
你可能會覺得奇怪,ChatGPT或Claude不是很早就有上傳檔案並進行分析的功能了嗎?沒錯,但免費帳戶的額度下,能夠分析的檔案數量非常少。
另一方面,不想花錢又想使用大型語言模型的使用者最愛的Gemini,其實只能上傳圖片來分析,不能上傳其他類型的文件檔案。
不過如果在Dify裡面,它就能取出大型檔案裡面的內容,讓Gemini對此提供建議,神奇吧!這讓我更想嘗試新版Dify的強大功能了。
想要架設任何裝置都能使用的Dify / A Dify that Can be Used by Any Device
在體驗了自訂化大型語言模型能帶來的魅力之後,什麼Prompt Engineering & Management啦、ChatGPT Plus可自訂MyGPT啦,全部都相形失色了。最主要的是,能用我自己習慣的用語來讓大型語言模型產生對應的寫法,還能夠加入客製化選項微調產生的結果,這真的是太好用了!這讓我打起了讓Dify用在其他地方的念頭。
https://today.line.me/tw/v2/article/1DNYM5M
舉例來說,現在越來越多職場會有上級要求受到訊息後必須立即回覆,甚至是必須要「仔細閱讀完訊息後給予合適的回答」。姑且不論這是不是職場霸凌、過渡要求的問題,其實在跟客戶溝通的時候,即時且穩妥的回應,其實也有助於彼此整體的交流。
不過老實說,我自己是一個很難下決定、猶豫很久的人。很多問題或訊息我想要好好處理,但又騰不出時間來回覆,結果就會「已讀」然後隔了非常久才「回」。這當然不是什麼好榜樣,我也一直在想到底要怎麼改善這個問題。
如果有Dify的話,那也許事情可以簡單許多。例如我先將對方的訊息輸入,然後制訂幾個大致上我想要回覆的策略,例如「表示收到了,但是因為現在在忙碌,晚點才能處理」、「表示收到了,會立刻處理」、「回覆到這不是我的處理範圍,推薦他找其他人」等,請大型語言模型根據對方的訊息跟我選擇的策略來擬定回覆的草稿。然後再用我比較常用的用詞來修正大型語言模型的回覆。這些事情最好都能讓我在手機上完成,不要再慢慢開啟筆電、運作Dify之後才能做,這樣會喪失快速回覆的目標。
既然Dify都可以在筆電架設,那麼找一臺伺服器架設Dify,當然不是難事。難是難在要怎麽在外面移動時仍能取用伺服器上的Dify,而且確保不要被外部其他人濫用。這裡我選擇的方案是ZeroTier,個人用的虛擬內部網路。在25個裝置底下它的運作狀況非常好。即使伺服器沒有獨立的對外IP,只要我的手機跟伺服器都加入到同一個ZeroTier群組裡面,那麼彼此之間就能用事先訂好的虛擬區網IP溝通。
如果需要使用的裝置超過了25個,那比起ZeroTier可能更需要的是VPN。但個人使用的話,ZeroTier就很夠用了。
結語 / In Closing
在筆電架設Dify這種複雜系統,比起說方便,更像是一個試驗性的方案。一來是筆電限制了Dify的大部分功能只能呼叫外部API,二來是其實運作Dify也拖慢了筆電系統的效率跟電量。資訊系統的設計大多都傾向將複雜的功能拆分多個元件、各自維護並彼此溝通,這樣才是最理想的做法。
因此我接下來會試著在Proxmox VE架設Dify,並試著改善上述問題。希望完成之後,我也能夠在手機上使用Dify的功能啊。加油囉。