Fidx – 本地語義搜索,單個SQLite文件,查詢時不需LLM
Fidx 是一個本地語義搜索引擎,將 BM25 全文搜索與 768 維向量搜索結合,全部存儲在單個 SQLite 文件中。查詢時無需 LLM,僅需一次 ONNX 嵌入,在 CPU 上即可實現毫秒級響應。支持 CLI、私有 RAG 檢索和代理記憶搜索。
Fidx 是一個全新的本地語義搜索引擎,旨在為本地文件和代理提供快速、私密的搜索體驗。它的核心設計理念是:在查詢路徑中避免使用任何大型語言模型(LLM),從而在保持高召回率的同時,實現毫秒級的響應速度。
Fidx 採用混合檢索策略,將 BM25 全文搜索(基於 FTS5)與 768 維向量搜索(通過 ONNX 嵌入)相結合,並使用倒數秩融合(RRF)對結果進行排序。這種設計使其既能精確匹配確切的名稱和標識符,也能理解語義查詢,如"那篇討論索引項目的文檔"。
所有數據——包括文檔、BM25 索引和向量嵌入——都存儲在一個單一的 SQLite 數據庫文件中。這意味着你可以輕鬆地複製、備份或刪除整個索引。Fidx 還支持集合(collection)功能,允許你將不同來源的文件分組,並針對特定集合進行搜索。
安裝方面,Fidx 需要 Python 3.11 或 3.12,並支持 sqlite3 加載擴展和 FTS5。推薦使用 uv 安裝,首次索引時會自動下載嵌入模型(之後可完全離線使用)。目前支持 Linux x86_64、macOS arm64 和 Windows x86_64 平台。
Fidx 的使用非常直觀:通過 CLI 註冊目錄、建立索引,然後使用 fidx search 進行搜索。它還提供了一個守護進程模式,可以保持模型和索引的熱狀態,使搜索延遲進一步降低到毫秒級。對於代理和 RAG 工具,Fidx 提供 JSON 輸出和文檔獲取命令,方便集成。
在基準測試中,Fidx 與 QMD 進行了對比。在四個語料庫(docs-small、docs、chat、code)上,Fidx 在查詢延遲上比 QMD 的 LLM 混合模式快 300–1000 倍(例如 18–49 ms vs 18–36 秒),同時在 purity 指標(noise@10 和 clean@10)上全面領先。在已知項查詢中,Fidx 在 docs 和 code 語料庫上的召回率(R@10)也優於 QMD。
需要注意的是,Fidx 的純向量模式在語義查詢(即查詢與目標文檔幾乎沒有詞彙重疊)上表現較好,而混合模式在某些情況下會略低於純向量模式。開發團隊表示,查詢自適應加權是未來的改進方向。此外,對於 92k 代碼文件的語義搜索,由於文本嵌入器的限制,效果有限,Fidx 在代碼搜索上的優勢在於詞彙匹配。
總體而言,Fidx 提供了一個輕量級、高性能的本地搜索解決方案,特別適合需要快速、私有且無需 LLM 的場景。無論是個人筆記、代碼庫還是代理記憶,Fidx 都能提供出色的搜索體驗。