TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

sese-engine 是中國開發者莉沫醬的原始碼公開專案,用 Python 在自己的機器上爬網頁、建反向索引、統計反向連結權重,整套搜尋引擎生產線不依賴資料庫。本文拆解它的六件式架構與中文命名原始碼,並整理自架前的三個現實:寫明版權所無的玩笑授權、釘死在 Python 3.8 的環境,以及搜尋功能已經失效的官方示範站。
用 AI 摘要這篇文章:
想擁有自己的搜尋引擎,市面上常見的路線是 SearxNG 這種聚合器:自己不爬網,把 Google、Bing 等引擎的結果兜在一起再呈現。中國開發者莉沫醬(GitHub 帳號 RimoChan)的 sese-engine 走的是更硬派的一條路:搜尋引擎的每個零件都自己造。爬蟲自己寫、反向索引自己建、反向連結自己統計,整套用 Python 壓在一個不需要資料庫、不需要訊息服務的專案裡,連變數名稱都是中文。這個 2022 年 1 月開工的專案,到 2026 年 8 月累積了 943 個星、82 次 fork。

先講結論:拿它當日常搜尋引擎並不合格,拿它當搜尋引擎原理的活教材則綽綽有餘。原始碼和設計文件把「按一次搜尋鍵背後發生了什麼」講得非常透明,這種可讀性在同類專案裡少見。真要自架,得先過三關:一份寫明「版權所無」的半開玩笑授權、一個釘死在 Python 3.8 的執行環境,以及官方示範站早就掛掉、維運全靠自己這個事實。這篇把六部件架構和這三關一次攤開。
名字的梗也先說清楚。sese 沿用作者一貫的戲謔命名風格,官方前端倉庫的自我描述,翻成台灣用語就是色色搜尋引擎 UI,名字和內容無關,本體是一套正經的搜尋引擎程式碼。
打開倉庫第一眼會以為走錯地方:檔名幾乎全用中文詞,原始檔名為簡體,以下以繁體轉寫,核心模組更是一檔一個字。爬蟲叫蟲.py,主流程叫上網.py,反向索引整理叫回.py,另外還有人伺服器.py、收穫伺服器.py、儲存.py、設定.py。啟動腳本做的事情很直白:開一個 tmux 工作階段切成四格,四個行程分頭跑,爬蟲掛掉就自動重開,Windows 和 Linux 各有對應腳本。
設計文件把系統分成六個部件:全天候上網的爬蟲(文件原話形容它是現代大學生的榜樣)、反向索引整理器、反向連結統計器、直接寫入檔案系統的本地儲存、Flask 前端伺服器,最後一個部件是用戶,文件還一本正經地補了一句,它通常是一個人類,但也可以不是。網頁介面沒有算進六部件裡,它住在另一位開發者的獨立倉庫,想接前端的人要另外部署。每個部件的程式碼都短到能一次讀完。

其中兩個設計最值得細看。一個是爬蟲的記憶體管理:它本質上是無限的廣度優先搜尋,把每個網址當節點、頁面裡的連結當邊,從設定檔指定的入口一路擴散。這種佇列早晚撐爆記憶體,所以每掃完一層就照規則丟掉一部分候選:佇列太長時按權重隨機丟、單一網域塞太多時丟、純 HTTP 的網址太多時丟、沒有人反向連結的網域也丟。丟誰留誰,看的是已造訪次數、語種和反向連結數。另一個是排序用的熱門度估算:反向連結統計器把網址按斜線分層建成一棵樹,好比 github.com/RimoChan 是 github.com 的子節點,靠這棵樹在 4G 等級的記憶體裡估算每個網址的繁榮度,被越多網域引用的網址排序越前面,也越不容易在索引整理時被丟掉。這套取捨等於把 PageRank 的精神壓進平民硬體,讀起來比論文痛快。
搜尋結果的摘要也有巧思:設定檔裡的線上摘要功能預設開啟,第一次查到某個網址時才去造訪它的頁面抓簡介,限時 3 秒,抓到的內容存進磁碟快取重複使用;一時抓不到就先不顯示,背景再慢慢補抓一次。這個設計讓結果的簡介保持新鮮,代價是新結果的第一次查詢會慢一些,速度隨目標網站的回應狀況浮動。
語言辨識也沒有外包給雲端:倉庫裡直接附了一份 fastText 的 lid.176.ftz 模型檔,爬蟲抓到頁面後用它判斷語種,每個網域會累積自己的語種分布紀錄,這份資料正是後面搜尋口味調整的基礎。
README 放了官方示範站 sese.yyj.moe,歡迎大家一起去玩。截至 2026 年 8 月,這個站的前端還開得起來,搜尋功能卻是壞的:輸入關鍵字送出,等來的是伺服器錯誤,介面彈出的訊息也很符合這個專案的畫風,大意是伺服器壞了,快去打莉沫醬一頓。
這不是第一次。GitHub issue 的公開紀錄顯示,2024 年 12 月就有使用者回報示範站失效,作者當時的回覆是伺服器沒錢了,後來才想辦法續命重開。README 也自己招了:這台機器是一年 70 元人民幣租來的低階伺服器,第一次查詢卡個幾秒屬於正常,大概是服務行程被系統換到硬碟裡了。一個用興趣支撐的示範站,掛掉是常態而非意外。
對讀者的意義很直接:想體驗 sese-engine,自架是唯一的路。示範站適合當門面參考,不適合當可用性依據。
多數開源專案的授權條款一行就看懂,這個專案的 LICENSE 是一篇小宣言,名叫莉沫醬革命協議(原文為簡體)0x0,開頭四個字是版權所無。條文大意是:作者認為著作權法愚蠢且應該廢除,因此不覺得自己對這個倉庫擁有什麼權利,自然也沒有權利可以授予任何人;你對副本做任何事的權利與生俱來,但這麼做也許在事實上觸犯了當地法律;作者用良心保證不起訴,其餘請自行依道德判斷行事。
GitHub 的授權偵測也因此顯示為 Other。它確實不是任何經 OSI 認可的開源授權,把它理解成作者客氣地宣告不追究,比理解成開源授權更精確。實務影響分成兩層:自己抓來玩、改來學,風險很低;要把衍生成果商用或再散布,就少了正規授權那層法律保障,後果自負。
README 的部署說明只有三步:裝一個 Python 3.8、用 pip 裝依賴、跑啟動腳本。輕量化是真的:不用裝資料庫、不用訊息佇列,一個 Python 環境加上檔案系統就能跑,搜尋服務開在本機 80 埠,一份 curl 指令就能測。
但 Python 3.8 這個指定是認真的。README 明說版本太高依賴會裝不上,而 Python 3.8 的官方支援早在 2024 年 10 月就結束了。翻開依賴清單能看到原因:fasttext 0.9.2 和 reppy 0.4.14 這兩個套件在 PyPI 上只有原始碼套件,沒有現成的安裝檔,裝它們就是在本機編譯,新版 Python 搭配新版工具鏈很容易卡在這一步。整份依賴清單有 22 個套件,全部釘死版本,看得出是同一個年代凍結出來的環境,裡面拿得到中文斷詞用的 jieba、當伺服器的 waitress,還有輸出監控指標的 prometheus-client。想在 2026 年的機器上玩它,比較穩的做法是老實開一個 Python 3.8 的虛擬環境,或者改走社群維護的 Docker 路線:xiongnemo 的 sese-engine-docker,以及針對樹莓派 ARM 架構的 mengguyi 版本。
爬蟲的禮貌性寫得很扎實。蟲.py 的邏輯是:對每個網域先抓 robots.txt,不允許就直接丟出例外走人;同一網域兩次請求之間固定冷卻 3 秒;只收 HTML,其他格式一律略過;預設的使用者代理名稱叫 loli_spider。
麻煩在於守規矩的代價。很多大型網站的 robots.txt 對不認識的爬蟲一律全域封鎖,用預設名稱出門,等於被大部分門口擋在外面。作者自己在 GitHub issue 裡承認:程式確實尊重 robots 協議,但示範站爬蟲的名字確實不是 loli_spider。換句話說,連官方示範都要換個名字才爬得到東西。把名稱改成大型引擎的白名單身分能大幅提高收錄量,但那就違背了對方 robots 檔的意願,這條線要不要跨,每個自架者得自己判斷。自架搜尋引擎的第一課在這裡:你的引擎有多自由,止於別人網站的大門口。
預設的爬取入口是中文維基百科,這個起點選得聰明:維基媒體的站點對爬蟲相對友善,連結密度又高,天然適合廣度優先搜尋往外擴散。我們先前介紹過維基媒體旗下資源的另一種玩法,Wikimedia Commons 的免費多媒體素材庫,同樣建立在這個開放的生態上。
打開配置.py 會發現這個搜尋引擎的價值觀全攤在明面上,參數名稱本身就是中文說明書:入口網址、爬取執行緒數預設 22、單一關鍵詞最多收錄 11000 條網址、同一網域在同一關鍵詞下最多佔 20 條、反向連結權重、連續關鍵詞加成係數,全部可以改。
其中語種權重這條最誠實也最有個性。預設值 0.5,註解寫著增加中文網站的權重、減少我看不懂的語種的權重。也就是說,預設搜尋結果會偏向中文,理由是作者只看得懂中文。這種偏好商業搜尋引擎不會寫出來,它寫了。你想要更接近國際網路原貌的樣本,就自己把數字調低。權重還設了每日 0.996 的衰減率,久未更新的網站會慢慢滑出排名,排序規則沒有任何黑盒子。
想盯著引擎的健康狀態,專案附了一套 Grafana 儀表板,README 用贈送加問號來形容它,搭配 Prometheus 指標,爬蟲速度、佇列積壓、索引佔用的記憶體行數都能畫成即時圖表,對長期養索引的人是實用的窗。

自架搜尋這幾年比較常見的是 SearxNG 這種後設搜尋:把現有引擎的結果聚合起來,賣點是不把你的查詢紀錄交給大廠。sese-engine 屬於另一個物種,從爬取、索引到排序全部自己來。好處是收錄標準、排序規則、語種偏好完全由你定,索引就放在你的硬碟裡,誰也拿不走;代價是覆蓋規模受你的頻寬、硬碟和時間限制,一台小主機能養出來的索引,和商業引擎有根本上的差距。README 給的建議配置是 2 核心、4G 記憶體、128G 硬碟、5Mbps 頻寬,爬蟲約吃 1 到 2G 記憶體,搜尋服務本身幾乎不吃資源。
順帶釐清需求。如果你的問題其實是找回自己電腦裡的檔案,本機檔案搜尋工具會省事得多;想看第三方自訂搜尋的內容邊界,先前介紹過的飛搜是另一種自己動手搜的樣貌;而只是想集中收自己關注的資訊來源,RSS 聚合器比養一隻爬蟲實際。
收斂到判斷。想弄懂搜尋引擎內部怎麼運作的人,這個專案值得整包讀:設計文件加原始碼,一個下午讀得完,比多數教科書具體,六部件架構每個環節都有對應程式可以對照。手上有閒置機器、想長期養一個自己的索引當實驗的人,它也勝任,前提是接受環境限制和沒有活躍維護的現實:倉庫最後一次提交停在 2025 年 5 月,到現在超過一年沒有動靜,8 個 issue 開著沒有下文,裝了就是現狀,別期待更新。
反過來說,想要開箱即用的 Google 替代品的人不用勉強:示範站掛著、安裝有門檻、索引要花時間養,這條路要投入的金錢和時間,對一般使用者來說成本偏高,聚合式自架搜尋會實際得多。
有個耐人尋味的細節是周邊比本體活得健康。官方前端 sese-engine-ui 由雲遊君(YunYouJun)維護,292 個星,2026 年 6 月還有提交紀錄;兩個第三方 Docker 專案也都找得到。引擎核心睡著了,外殼還醒著,這種狀態本身就說明了它的定位:一個被當教材和玩具傳承的極簡實作。
授權採莉沫醬革命協議 0x0,版權所無、作者承諾不起訴,非 OSI 認可的開源授權,商用前請自行評估。專案現況(截至 2026 年 8 月):943 星、82 fork,最後提交 2025 年 5 月 10 日,8 個開啟 issue,主力語言 Python,僅支援 3.8 版,Windows 與 Linux 都有啟動腳本。前端介面與 Docker 部署的周邊倉庫仍可取得,示範站的搜尋功能則處於失效狀態,動手前建議先到倉庫確認最新狀態。相關資源:GitHub 主倉庫、官方示範站、前端介面倉庫、Docker 部署套件。