一個困擾我很久的小事

我是 Obsidian 的重度使用者,vault 裡躺著好幾千則筆記。

但有件事很不方便:Obsidian 內建的搜尋,只會找「你打的那幾個字」。

問題是,三年前寫的筆記,我哪記得當時用了什麼字?我心裡想的是「鬆弛性膀胱要怎麼處理」,筆記裡寫的卻是 Neurogenic Bladder → flaccid type → 間歇性導尿。字對不起來,搜尋就一片空白。最慘的是,有好幾次我以為自己沒寫過,結果重寫一遍,事後才發現早就有一篇更完整的躺在那裡 😅

所以我花了點時間,幫自己的 vault 裝上一套「用意思找筆記」的工具。用了大半年,現在把它整理乾淨、開源出來。

三套組

它不是一個大功能,而是三個各司其職、共用同一份索引的小工具。

🔍 Vault Search — 用一句話找到對的段落

最核心的一個。你用自然語言問一句話,它回傳語意上最接近的筆記段落,而不是關鍵字比對。

我打「脊髓損傷後的鬆弛性膀胱怎麼處理」,它直接翻出 Neurogenic Bladder 那篇,即使那幾個中文字一個都沒出現在筆記裡。它看的是意思,不是字。

結果還會自動分成「主要相關」跟「其他相關」兩層,並且可以折疊預覽,不用一篇一篇點開。

Vault Search 語意搜尋面板

這是一個會即時更新的側欄。當我在讀某篇筆記、或選取一段文字時,它自動在旁邊跳出相關的其他筆記。

對我來說這是「驚喜製造機」。很多「我早就忘記自己寫過」的東西,就這樣被串了起來。寫一篇新筆記的時候,旁邊會冒出三五篇舊筆記提醒我「這裡其實可以連過去」,慢慢把零散的卡片織成一張網。

Related Notes 相關筆記側欄

💬 Vault Chat — 直接跟自己的筆記對話

這就是大家熟悉的 RAG:它先搜尋相關筆記,再把內容餵給 AI 回答。但我刻意設計了三種模式:

  • Vault 模式:只根據筆記回答,不用擔心 AI 自己生成內容。
  • Hybrid 模式:以筆記為主,不足時用 AI 自己的知識補充,並標明哪些是「補充」。
  • Free 模式:不搜尋筆記,純自由對話,還能查 PubMed 文獻。

每次回答後,它會列出引用了哪幾篇筆記,可以一鍵點開查證。對醫療這種「答錯會出事」的領域,可追溯來源這件事我很在意。

Vault Chat 與筆記對話

點開任何一個引用,還能看到它實際餵給 AI 的那段筆記原文,整條推理鏈是攤開可查的。

Vault Chat 引用來源預覽

它怎麼運作(給好奇的人)

簡單講:

  1. 一支 indexer 程式走訪整個 vault,把每篇筆記依標題切塊,用地端的 embedding 模型(bge-m3,中英雙語)轉成向量,存進 LanceDB 這個本地向量資料庫。之後都是增量更新,改過的才重算。
  2. 搜尋時,把你的問題也轉成向量,找最接近的段落,再用一套排序邏輯重新加權(信任的資料夾加分、越新的筆記越前面)。
  3. 一支 FastAPI 服務把這些開給 Obsidian plugin 用;另外還有一支 MCP server,讓 Claude Code 這類 coding agent 能直接把「搜尋我的 vault」當工具呼叫。

embedding 全程在地端跑,所以搜尋時筆記不會離開你的電腦。這對放著病人相關內容、或任何不想上雲的筆記的人來說,是底線。

為什麼堅持「地端優先」

這套東西最初是繞著我家裡一台常開、有顯卡的電腦 + 一份 Claude 訂閱打造的。但我整理開源版時,特地把這些「假設」拆掉了,因為大部分人不會剛好有這套配置。所以:

  • 沒有顯卡? 沒差,bge-m3 在 CPU 上就跑得動,只是大 vault 初次建索引慢一點,搜尋本身是即時的。
  • 沒有 Claude 訂閱? 對話用 Vault 模式就好,整段跑在地端模型上,零成本。
  • 沒有常開的機器? 開 Obsidian 時順手啟動 server 就好。
  • 想讓手機也能用? 把 server 跑在家裡的電腦或 NAS,設一把 API key,手機就能連回來查自己的筆記。

README 裡有一張完整的「依你的環境調整」對照表,把這些替代方案都寫清楚了。

誰適合用

雖然我是醫師、拿它讀考試,但這套工具跟領域完全無關。研究者的論文庫、律師的法條筆記、工程師的技術文件、或者單純一個長年累積的個人 wiki,只要是一堆 markdown 筆記,它都能用。

完全免費、MIT 授權、附中英文完整安裝說明。如果你也常常「搜不到自己寫過的筆記」,歡迎試試,也歡迎一起把它做得更好。

👉 GitHub: github.com/drpwchen/vault-search