讓Dify使用自己管理的搜尋引擎:SearXNG / Let Dify Use My Self-Hosting Search Engine: SearXNG
我在「自行架設大型語言模式應用程式:Dify」這篇講到我用SerpAPI作為Dify的搜尋引擎,但除了使用別人提供的API之外,我們也可以用SearXNG自行架設客製化的搜尋引擎,並將它跟Dify結合一起使用。
In the article "Self-Hosting a Large Language Model Application: Dify," I mentioned using SerpAPI as the search engine for Dify. However, besides using third-party APIs, we can also utilize SearXNG to set up a customized search engine and integrate it with Dify.
SearXNG:可自訂的後設搜尋引擎 / SearXNG: A Customizable Metasearch Engine
SearXNG 是一個免費且開源的後設搜尋引擎(metasearch engine),它可以彙整來自超過上百種不同的搜尋服務(例如Google、Bing、DuckDuckGo等)的結果,讓使用者一次搜尋就能得到更全面的資訊。SearXNG 實際上是從另一個開源專案 Searx 延伸出來的分支,並在其基礎上進行了改進和更新。
SearXNG 提供了一個簡潔易用的介面,讓使用者可以輕鬆地輸入關鍵字並快速得到搜尋結果。除了基本的網頁搜尋之外,SearXNG 也支援圖片、影片、新聞、地圖等不同類別的搜尋,滿足使用者多元的搜尋需求。使用者還可以透過設定偏好設定(preferences)來自訂搜尋引擎的行為,例如選擇想要使用的搜尋服務、設定搜尋結果的語言和地區等等,打造個人化的搜尋體驗。
有別於其他的搜尋引擎服務,SearXNG 大多是使用者自行建置在私人伺服器的個體(instance)。我們可以在 searx.space 找到許多公開的 SearXNG 執行個體,但更多時候,我們會需要用它架設一個私人使用的 SearXNG 執行個體,不僅讓自己完全掌控自己的搜尋資料,更可以作為Dify等其他系統的資料來源。
架設適合Dify的SearXNG / Setting Up SearXNG for Dify
https://ivonblog.com/posts/self-hosting-searxng-docker-instance/
在臺灣的網路社群裡,Ivon的部落格有許多關於SearXNG的介紹。它甚至也在「自架開源SearXNG元搜尋引擎,一次搜尋Google、Duckduckgo多個搜尋引擎」這篇文章裡提供了docker-compose.yaml的範本,能讓我們輕鬆用Docker架設SearXNG。
https://docs.dify.ai/guides/tools/tool-configuration/searxng
不過如果我們是為了將搜尋結果跟Dify整合的話,Dify其實提供了更簡單的設定方法。我稍微整理一下原本教學文件的做法,把它跟原本的Dify設定檔案分離開來,讓它成為可獨自運作、又可跟Dify整合的配置。
用Docker Compose架設SearXNG / Setting Up SearXNG with Docker Compose
整體而言,我們需要三份文件,並依照以下架構整理:
- searxng/settings.yml
searxng/uwsgi.ini
這兩份檔案來自於Dify的設定檔。 - docker-compose.yml:內容如下:
version: '3.8'
services:
searxng:
image: searxng/searxng:2024.12.1-0245e82bd
ports:
- "8080:8080"
volumes:
- "./searxng:/etc/searxng"
restart: unless-stopped
這樣就能用「docker compose up -d」指令,讓SearXNG運作。SearXNG的運作過程常常會出現錯誤訊息,但似乎仍然能夠正常運作,我就沒有特別處理了。
設定SearXNG的搜尋引擎 / Setting Up Search Engines in SearXNG
架設好SearXNG後,我們還需要對它進行設置。以剛剛在docker-compose.yml設定的連接埠8080開啟網頁後,我們會先看到SearXNG的搜尋引擎畫面。從右上角的齒輪能夠進入「偏好設定」(Preferences),在這裡我們能找到「搜尋引擎」(ENGINES),然後就可以各別設定不同搜尋方式對應的搜尋引擎。
https://searx.github.io/searx/admin/engines.html
目前SearXNG支援的搜尋服務數量來到了132種。其中最為知名的Google、Bing、DuckDuckGo皆有在支援內。SearXNG的搜尋引擎類別分成以下10類:
- 一般網頁 General:基本的搜尋引擎,例如Google。
- 圖片 Images:搜尋引擎提供的圖片搜尋功能,也包括主要收錄圖片為主的圖庫,例如imgur。
- 影片 Videos:搜尋引擎提供的影片搜尋功能,也包括主要收錄影片為主的網站,例如YouTube。
- 新聞 News:搜尋引擎提供的新聞搜尋功能,例如Google News。但並不會直接搜尋新聞媒體的網站。
- 地圖 Map:目前僅有Apple Maps、OpenStreetMap、Photon,不支援大家比較熟悉的Google Map。
- 音樂 Music:歌詞、廣播的搜尋引擎,例如Genius。當然,不會有魔鏡歌詞網。
- 科技 It:主要是軟體和程式碼的官方網站和論壇,例如GitHub。
- 科學 Science:收錄學術論文的網站,包括Google Scholar和大家的最愛Arxiv預印本典藏庫。
- 檔案 Files:Android和iOS的應用程式以及其他來源有點微妙的網站。有Google Play Apps跟Apple App Store就很夠用了吧?
- 社群媒體 Social Media:lemmy、mastodon、跟reddit。並沒有包含臺灣常用的社群媒體。
到底要選擇那個搜尋引擎好呢?Ivon的選擇是Bing、DuckDuckGo跟Google,但我自己覺得使用Google即可。如果搜尋引擎找到不正確的資料,反而會讓LLM的回答變得不合適。
在Dify設定SearXNG / Setting Up SearXNG in Dify
確保SearXNG可以連線,並且設定完成後,我們便能在Dify的Tools裡面加入SearXNG的授權。授權資訊只要寫SearXNG網址即可,不難。
接著我們就可以在Workflow裡面使用SearXNG了。
這樣我們便能達到讓AI上網搜尋資料並解讀後摘要的目的了。如果做的更加仔細的話,實作出類似Perplexity效果的搜尋結果也不是不可能的喔。
結語 / In Closing
這次我們不使用SerpAPI,而改用自己架設的SearXNG,以此作為Dify的搜尋引擎。SearXNG本身其實只是多個搜尋引擎服務的接口,所以它運作起來並不怎麽消耗資源。我本來以為SearXNG的搜尋應該會比SerpAPI還慢,實際使用上其實兩者都還蠻快的,這真是讓我意外。不像SerpAPI免費帳戶每月只有100次的搜尋額度,SearXNG就讓我們放縱地在網際網路上搜尋各種資料。現在還能在Dify中跟LLM相互結合,蹦出各種有趣的應用。
不過目前我是把SearXNG的搜尋結果合併成字串交給LLM解讀,它還不能像Perplexity那樣指出資料的參考來源。雖然Dify有提供Citation and Attribution的功能,但跟我們想象的還是有段落差啊。不知道有沒有更好的做法呢?
文章的最後要來問大家的是:你對於AI可以搜尋網路資料的功能有什麼看法呢?
- 1. 很不錯:這可以讓我確保AI的回答內容有所依據。
- 2. 還好吧:搜尋引擎上面也是充斥著內容農場,不能說有用搜尋引擎就是很好的回答。
- 3. 不重要:只要AI給我回答就好了,內容來源是什麼,很重要嗎?
- 4. 其他:歡迎在下面留言,分享你的想法喔!