模型 / 資料集
StarTrail-org/LEANN avatar
StarTrail-org/LEANN

LEANN:把 6000 萬段文字塞進 6GB 的向量索引

[MLsys2026 Best Paper]: https://arxiv.org/abs/2506.08276. RAG on Everything with LEANN. Enjoy 97% storage savings while running a fast, accurate, and 100% private RAG application on your personal device.

12,940 個 Star1,169 個 ForkPythonMIT

秒懂

它是什麼?
LEANN 用圖結構的選擇性重算取代預先儲存全部向量,官方數字是索引 6000 萬個 chunk 只需 6GB 而非 201GB。它的代價是把儲存壓力換成查詢時的嵌入計算,這個交換是否划算,取決於你的硬體與使用頻率。
適合誰用?
LEANN 適合資料量已超過一般向量資料庫能塞進筆電的個人使用者,以及想在 Claude Code 這類工具裡加上語意檢索、又不願把本機檔案送上雲端的人。不適合需要高 QPS 線上服務、或必須在無 GPU 環境下維持毫秒級尾延遲的團隊,因為它的設計把成本從磁碟移到查詢時的嵌入計算。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 11 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

它要解決的是筆電裝不下索引,而不是檢索不夠準

傳統向量資料庫把每個 chunk 的嵌入向量存成固定長度的浮點陣列。文件一多,這些向量的總量會超過原始文字本身,索引因此比語料還大。README 給的對照是 6000 萬個 text chunk:一般做法要 201GB,LEANN 只要 6GB。這個數字不是靠降低精度換來的,README 的說法是「without accuracy loss」,代價轉移到查詢時重算嵌入。

目標使用者寫得很明確:想把檔案系統、Apple Mail、瀏覽器歷史、WeChat 與 iMessage 對話、ChatGPT 與 Claude 的對話紀錄、Slack 訊息、Twitter 書籤全部做成語意檢索,但不想付雲端費用、也不想讓資料離開本機的人。README 把這件事稱為 democratizes personal AI,用詞誇張,但場景是真的:這些資料的總量對單機硬碟是壓力,對雲端服務則是隱私問題。

選擇性重算與高度保留剪枝:省下的是向量,不是圖

LEANN 的核心機制是 graph-based selective recomputation,搭配 high-degree preserving pruning。索引裡保存的是圖的拓樸結構,不是每個節點的嵌入向量。查詢時沿著圖走訪,遇到需要比較的節點才即時計算它的嵌入。

這裡有兩個設計選擇值得注意。第一,剪枝特意保留高度節點,因為圖搜尋的連通性靠這些樞紐維持,砍掉它們會讓走訪提前斷路。第二,圖本身用 CSR 格式儲存,README 說這是為了把圖的儲存開銷壓到最低。也就是說,省下的 97% 全部來自嵌入向量,圖的邊仍然要佔空間,只是規模小得多。

推論很直接:這個架構把成本從磁碟移到 CPU 與嵌入模型。每次查詢要呼叫的嵌入次數不再是常數,而取決於圖走訪的路徑長度。如果你的嵌入模型是本地小模型,這筆帳划得來;如果每次都要打遠端 API,隱私前提就先破了。

安裝路徑與 MCP 服務的實際指令

README 要求先裝 uv,指令是 curl -LsSf https://astral.sh/uv/install.sh | sh。接著把 repo 抓下來以取得範例:git clone https://github.com/yichuan-w/LEANN.git leann,再 cd leann。虛擬環境用 uv venv 建立,source .venv/bin/activate 啟用,最後從 PyPI 安裝。README 這一段的指令在結尾被截斷,套件名稱只寫到 lea,完整名稱請以 PyPI 頁面為準,不要照抄這個不完整的字串。

支援的 Python 版本是 3.10 到 3.14,平台涵蓋 Ubuntu、Arch、WSL、macOS(ARM64 與 Intel)以及 Windows。

MCP 整合是另一個獨立套件,路徑在 packages/leann-mcp/README.md。README 對它的定位是「drop-in semantic search MCP service fully compatible with Claude Code」,用來補上 Claude Code 只有 grep 式關鍵字搜尋的缺口。這條路徑的設定步驟要另外看該子目錄的說明,主 README 沒有展開。

ContextBench 的數字要連同它的註腳一起讀

README 提到在 30 個 SWE-Bench Pro 任務上,把 LEANN 接進 Claude Code 與 BM25 對比,模型、agent、工具與 8192 token 的檢索預算都固定。結果是初始相關程式碼召回率 24.2% 對 11.4%,探索後的覆蓋率高出 12.6 個百分點(38.4% 對 25.8%),token 用量少 8.4%(3.22M 對 3.51M)。

README 自己附了一句註腳:結果是 30 個任務上標註 gold-line 指標的宏平均,而且「Better context access does not guarantee issue resolution」。這句話很重要,它承認了檢索改善不等於問題被解決。另外 30 個任務的樣本量不大,重現腳本放在 benchmarks/contextbench/README.md,要評估的人應該先跑一遍再決定,而不是直接引用這三個數字。

即時重算意味著查詢延遲不穩定

這個架構最明顯的取捨在延遲。因為嵌入是查詢時才算,回應時間會隨走訪路徑波動,不像預先算好向量的索引那樣可以靠快取壓平尾延遲。README 沒有給出查詢延遲數字,任何關於毫秒級效能的說法都無法從現有材料確認。

第二個限制是嵌入模型必須可重複呼叫。文件規模越大,同樣的嵌入被重算的次數越多,如果模型本身推論慢,整體吞吐會被拖住。第三,README 列出的平台清單裡沒有提到 GPU 加速,而且專案首頁正在用社群問卷調查使用者要不要 GPU Acceleration,這暗示目前版本在這方面並不完整。

什麼情況下不該用 LEANN:需要高 QPS 的線上檢索服務、需要在同一台機器上同時跑多個索引、或是語料本身很小(幾千個 chunk)的場景。語料小的時候,直接存全部向量佔不了多少空間,選擇性重算帶來的複雜度沒有回報。

與 FAISS 的差別在於誰付嵌入成本

FAISS 是這個領域最常被拿來對比的函式庫,LEANN 的 topics 裡也直接列了 faiss。兩者的差別不在索引演算法本身,而在嵌入的儲存策略。FAISS 走的是預先計算並保存向量,查詢時只做距離比較,因此延遲可預測、可快取,代價是索引檔案隨語料線性膨脹。

LEANN 把這個順序反過來:索引階段只建圖,向量留到查詢時才算。儲存降下來了,但每次查詢都要重新付出嵌入成本。選哪一個取決於你的瓶頸在哪一側。硬碟與記憶體吃緊、查詢頻率不高、嵌入模型在本機跑得動,LEANN 的帳算得過來。反過來,如果你的向量已經算好放在雲端、查詢量大、需要穩定延遲,FAISS 或建立在其上的向量資料庫仍然是更直接的選擇。

LEANN 在生態整合上另外做了 LangChain、LlamaIndex、Ollama 與 MCP 的接口,這是 FAISS 本身不提供的層次。

授權、版本節奏與維護成本

授權是 MIT,對商業使用與修改相對寬鬆,但這不是法律意見,實際條款請自行閱讀 LICENSE 全文。

版本節奏可以從 release 記錄看出:v0.3.5 在 2025 年 11 月、v0.3.6 在 2026 年 1 月、v0.3.7 在 2026 年 3 月,大約兩個月一個小版本,最後一次 push 是 2026 年 9 月。專案仍在活躍維護,但也還在 0.3.x,API 有變動的可能。

升級成本的主要來源是嵌入模型與 MCP 服務的綁定。README 明說「We track zero telemetry」,專案用社群問卷而非遙測來決定 v0.4 的方向,並把 GPU 加速與更多整合列為選項。這意味著功能優先順序由問卷決定,你關心的功能未必會排進下一個版本。若你打算長期依賴,先確認 packages/leann-mcp/ 的介面在你的 agent 工作流程裡是否穩定,這比追蹤主版本號更實際。

編輯結論

LEANN 適合資料量已超過一般向量資料庫能塞進筆電的個人使用者,以及想在 Claude Code 這類工具裡加上語意檢索、又不願把本機檔案送上雲端的人。不適合需要高 QPS 線上服務、或必須在無 GPU 環境下維持毫秒級尾延遲的團隊,因為它的設計把成本從磁碟移到查詢時的嵌入計算。採用前先確認三件事:你的目標平台是否落在 README 列出的 Ubuntu、Arch、WSL、macOS(ARM64 與 Intel)與 Windows 範圍內;你的嵌入模型能否在本機重複呼叫而不成為瓶頸;以及 benchmarks/contextbench/README.md 的重現步驟是否真的能在你的資料上跑出相近的檢索覆蓋率。若你只需要關鍵字比對,Claude Code 內建的 grep 式搜尋就夠了,裝 MCP 服務只是多一層維護負擔。

官方來源

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. StarTrail-org/LEANN on GitHub
社群筆記

社群筆記