每個人都有筆記的死角。

你在 Notion 寫過讀書心得,在 Bear 貼過文章連結,在 Obsidian 建過「以後要整理」的資料夾。結果幾個月後,你想找某個概念,找不到。或者找到了,但已經不記得當初為什麼覺得重要。

我去年也有同樣的困境。直到看到 Andrej Karpathy 提出的一個想法,才真正解決這個問題。這篇是把這套架構跑了大半年、反覆長大之後的現況紀錄。


傳統 RAG 的錯誤假設

在大型語言模型流行後,個人知識管理的「正確解法」似乎是:把所有筆記餵進向量資料庫,用語意搜尋查詢。這就是所謂的 RAG(Retrieval-Augmented Generation)。

但這個方案有個根本問題:它假設你的原始資料已經足夠好了。

實際上,原始筆記充滿雜訊,倉促抄下的引文、未完成的思路、沒有脈絡的截圖。每次查詢,LLM 都要從這些雜訊重新推導答案,成本高且品質不穩定。

Karpathy 的觀察更犀利:

“The wiki is a persistent, compounding artifact.”

真正有價值的不是原始資料,而是整理過的知識。RAG 每次都在從頭整理;wiki 方法是整理一次,反覆複用。


核心架構:三層分工

Karpathy LLM Wiki 的核心思路是明確分工:

內容誰負責
Raw原始文件(文章、書摘、財報)人類放入,LLM 只讀
Wiki整理後的知識頁、摘要、交叉引用LLM 維護
SchemaCLAUDE.md,定義結構與規則人類制定

人類做策展,LLM 做基礎建設。這個分工讓知識可以隨時間複利累積,而不是每次查詢都從零開始。


我的實作:域優先結構

我在 Obsidian 上實作了這個架構,並加了一層設計:以生活域為頂層資料夾。

vault/
  books/        ← 閱讀
  finance/      ← 財務追蹤
  coffee/       ← 咖啡品飲
  engineer/     ← 技術筆記
  art/          ← 展覽與藝評
  ideas/        ← 跨域觀察、碎片想法
  skateboard/   ← 滑板練習日記
  projects/     ← 對外專案(對應 Hugo section)
  others/       ← 雜項暫存區(dance、drawing、games、commute…)

每個域從最小結構開始,按追蹤型態長大成兩種型別之一:

{domain}/
  records.md 或 logs/YYYY-MM-DD.md   ← 追蹤型域,兩者擇一
  raw/                               ← 原始素材,累積到 5 個檔才開
  wiki/                              ← 整理後的知識頁
  index.md                          ← 域的目錄

records.md 是單檔表格追蹤,適合 coffee、art 這種一列一筆的域。logs/YYYY-MM-DD.md 是每日一檔的時序 journal,適合 skateboard、dance 這種記當日體感的練習域。同一個域只能擇一。

這個設計的好處是:查詢有路徑可循。要找咖啡相關知識,先看 coffee/index.md,再往下看 coffee/wiki/,不需要掃整個 vault。LLM 每次讀的檔案數從幾百個降到 2 到 4 個。

不確定歸屬的東西也不強塞。無明確域的外部素材先進 others/raw/,同主題聚到 5 個檔以上再升成子域。往上搬比往下藏的心理成本低,所以預設 others/、長大再升頂層。


資料流向:Inbox 作為入口

所有新資料都先進 Inbox/,以時間戳命名(如 2026-04-15T10_33_21.txt)。這是關鍵設計:把「放入」和「分類」解耦。

Inbox/(時間戳檔名)
  → /inbox-triage → {domain}/raw/(概念素材,有意義檔名)
                  → {domain}/logs/YYYY-MM-DD.md(練習日記)
                  → TODO.md(需要後續 skill 的待辦,統一收納)
  ↳ /note-enrich(缺事實時,網路補充就近融入,帶來源連結)
  → /book-review、/note-explore、/wiki-build → {domain}/wiki/
  → /wiki-render(選用)→ slides

/inbox-triage 是第一個 skill:讀取 Inbox 裡每個檔案的內容,推斷它屬於哪個域,建議一個有意義的路徑,讓我確認後再移動。它還會把需要後續處理的 note 一律追加進根目錄 TODO.md,讓管線不斷在人腦記憶。

這條動線有一條硬規矩:不准跳過 raw/ 直接寫 wiki/。raw 是 wiki 的前置沉澱。唯一例外是從書頁或藝評頁「外提」的概念頁,沉澱留在來源側,用 frontmatter 的 sources 溯源。


Skills 系統:從原子指令長成管線

整個架構的操作介面是一組 Claude Code skills,存在 .claude/skills/。剛開始是 9 個原子指令,跑了半年後收斂成更少、更成套的管線。

指令用途
/inbox-triage分類 Inbox,路由至 raw/ 或 logs/,待辦寫進 TODO.md
/note-enrich對任何 note 做網頁搜尋擴充,事實就近融入
/wiki-build整合多份 raw + Inbox 為 wiki 頁,反壓縮紀律
/note-explore靈魂拷問 + 發散探索一份 note
/wiki-query索引加速查詢,不掃全 vault
/book-review書籍管線一條龍:登記 → 對話式心得 → 概念 ingest
/art-review展覽/劇場登記 + 藝評頁 + 概念外提至 ideas
/vault-maintainvault 健康唯一入口,掃描 + 安全項自動修復
/wiki-render/wiki-compile渲染 Marp 投影片、打包域匯出
/threads-cards/medium-cover從文章產 Threads 圖卡、Medium 封面
/retro對當前 session 做對話式 retrospective

最大的變化是合併。原本的 book-add / book-review / book-ingest / book-update 四個指令,收成一個 /book-review 一條龍;wiki-lint 併入 /vault-maintaininbox-enrich 升級成 /note-enrich。設計法則是單一寫入點與 pull-not-push:每個管線只有一個入口,收尾時主動提議下一步,而不是散成一堆得自己記得串接的小指令。

舉個 /book-review 的例子:讀完一本書,一個指令就走完登記、對話式心得、概念提取三段。LLM 會從心得提取幾個核心概念,依「概念路由規則」分配到對應域。有明確域歸屬的(如「複利思維」)進 finance/wiki/;跨域或通用的心理學概念進 ideas/wiki/。然後自動更新對應域 index.md,並在根目錄 log.md 追加記錄。


最後一塊拼圖:Karpathy Guidelines

架構設計完了,還有一個問題沒解決:LLM 執行 skill 時,怎麼避免它「多做了一些你沒要求的事」?

我整合了 andrej-karpathy-skills 的四個行為原則,把它們直接寫進每個 skill 檔案:

1. 行動前陳述理解 每個 skill 執行前,先說出計劃:「我理解這是 X,計劃做 Y,確認嗎?」讓我有機會在任何副作用發生前糾正誤解。

2. 最小化操作 只執行 skill 定義的步驟。看到格式不統一?不管。看到可以順手優化的地方?不做。

3. 手術式修改 只更新指定欄位或區塊。更新書籍 status 只改 status,不動其他欄位,不重寫整個檔案。

4. 目標驅動驗證 每個 skill 末尾有「成功標準」checklist:目標檔案存在嗎?log.md 更新了嗎?index.md 有新條目嗎?LLM 逐一確認後才算完成。

這四條原則讓 LLM 從「有點不可控的助理」變成「可以放心授權的執行者」。


從 guideline 到 hook:把準則變成物理擋牆

寫進 skill 的準則是軟約束,靠 LLM 自律遵守。跑久了會發現,光靠自律不夠,總有幾類錯誤反覆發生。

於是我把最常犯的違規變成硬約束,用 Claude Code 的 hooks 在 .claude/hooks/ 攔下。PreToolUse 會在寫入前物理擋下這幾種動作:根目錄寫一次性腳本(.py / .js / .json)、寫進依賴夾、產生 iCloud 衝突副本、以及 wiki 頁缺 summary / tags / date。Stop 時另外掃 iCloud 衝突副本提醒。

這一步的意義是:行為準則不再只是「希望 LLM 記得」,而是「做錯了根本存不進去」。這跟 Harness Engineering 的精神一致,把智慧從人工遵守轉成機械化驗證。

vault 位在 iCloud Drive、跨 Mac 與 Windows 同步,這些 hook 也順手擋掉了 iCloud 最愛咬人的兩個行為:脫水佔位檔、以及雲端權威檔名把 rename 還原成衝突副本。


跨域視圖:Hub 策展頁

三層架構解決的是「單一主題怎麼長」。但有些主題天生跨域,例如「注意力」同時牽動閱讀、工程、情緒。

這類主題我開一個 hub 策展頁放在頂層 hubs/,例如 hub-注意力hub-ai-協作工程hub-學習方法。hub 只聚合、不合成:它把各域既有的 wiki 頁連過來,每條連結都必附一句「為什麼在這個展間」,禁止純連結清單。

hub 和 wiki-build 的分工很清楚。wiki-build 把單域的 raw 合成成內容頁;hub 策展跨域的既有 wiki 頁,永遠不完成、持續累積。新開 hub 需要 tag 探勘數據支持(跨兩域以上的主題叢),維持少量。


實際效果

目前活躍的域有 books、finance、coffee、engineer、art、ideas、skateboard 等十個左右。每次讀完一本書,從 inbox 到概念頁上線,大約 15 分鐘。查詢某個財務概念,三個 index 跳轉就找到答案,不需要全文搜尋。

最重要的是知識真的在累積。讀第 20 本書的時候,LLM 會自動找到它與之前 19 本書的交叉引用,連結我當時沒有意識到的關係。這才是 Karpathy 說的 compounding artifact:不是筆記數量增加,而是知識密度在提升。


技術細節

  • 前端:Obsidian(免費、本地優先,附件走 per-folder _attachments/
  • 執行:Claude Code(跑 skills)
  • SchemaCLAUDE.md(domain 結構、路由規則、LLM 行為準則)
  • 護欄.claude/hooks/(PreToolUse 物理擋違規、Stop 掃衝突副本)
  • 輸出/wiki-render 出 Marp 投影片;/threads-cards/medium-cover 出社群圖卡
  • 發布:Vault 到 Hugo 的推送交給獨立工具 vault-forge,vault 端只寫扁平 frontmatter 的內容,不為發布改結構
  • 成本:無向量 DB,查詢 context 通常少於 10 個檔案,費用可忽略不計

如果你也在用 Obsidian,覺得筆記越來越多但越來越難查,這個架構值得試試。不需要任何付費插件,只需要一個能執行 Claude Code 的終端機。從最小的三層分工開始,等它自己長出你需要的域、管線和護欄。


延伸閱讀

  • karpathy-llm-wiki-obsidian — 原始架構筆記,三層結構與四個核心操作(Ingest / Query / Lint / Compile)的最短說明
  • karpathy-guidelines — 四個行為原則的 canonical 詳述,本文「最後一塊拼圖」的來源
  • ai-note-layering — raw 保留原聲、wiki 做 AI 清版的分層原則,回答「補充放哪裡」
  • llm-wiki-extension-mechanisms — 外部案例(gbrain、obsidian-wiki 等)如何驗證並餵料給這套 wiki-* skill 家族
  • llm-wiki-worker-summary-2026-04-25 — 本文的早期 worker 探索沉澱
  • Karpathy 原始 Gist:https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f
  • 影片 Obsidian + Karpathy = 95% Cheaper “RAG”:https://youtu.be/b6ygsbflbX4
  • 行為原則 plugin:https://github.com/forrestchang/andrej-karpathy-skills