Files
Leo 3f2db62850 Initial commit: n8n 版 LLM Wiki
Karpathy 的 LLM Wiki 觀念,用 n8n + Google Docs + Google Sheets 實作。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:21:44 +08:00

160 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# n8n 版 LLM Wiki
> Andrej Karpathy 的「LLM Wiki」概念,用 **n8n + Google Docs + Google Sheets** 重新實作的可下載版本。
> 不需要 Obsidian、不需要向量資料庫,人人都有的 Google 工具就能玩這套「新 RAG」。
感謝 [Andrej Karpathy](https://github.com/karpathy) 提出這個觀念。原文(gist):
<https://gist.github.com/karpathy/442a6bf555914893e9891c11ac484894>
---
## 這是什麼?
傳統 RAG 把文件丟進嵌入模型「碎紙化」存進向量庫,查詢時抽幾條碎紙給 LLM,LLM 只看得到那幾條、看不到全局。
Karpathy 的 **LLM Wiki** 用的是另一套思路 — **pre-compile(預編譯)**
把所有原始資料交給 LLM,讓它像「維基百科總編輯」一樣,把內容**整理、改寫、互相連結**後寫進一個結構化的知識庫。你問問題時,它先查**目錄(index)**,再讀對應的 wiki 條目來回答 — 有全局觀,知道來龍去脈,而不是靠碎紙拼湊。
| | 傳統向量 RAG | LLM Wiki(本專案) |
|---|---|---|
| 入庫方式 | 切塊 → 嵌入 → 存向量 | LLM 閱讀 → 整理改寫 → 寫成 wiki 條目 |
| 找資料方式 | 向量相似度 | 查**目錄**(像人查索引) |
| 資料成長 | 無限增加(知識**倉庫**) | 結構性整理、更新而非堆疊(知識**庫**) |
| 原稿角色 | 直接被切碎 | 單一事實來源(SSOT),有爭議時回查 |
| 成本 | 嵌入便宜 | Token 燒得較兇,但整理品質高 |
> **更新而非新增**:給它 1 萬份文件,它不會生成 1 萬篇 wiki,而是整理成一本結構化的「教科書」。內容相近就**更新**既有條目,差很多才**新增**。
---
## 為什麼用 Google Docs + Sheets
- **Obsidian 沒有網路版**,不一定人人習慣 — 重點是觀念,工具不重要。
- **Google Docs** 當 wiki 條目本體,電腦手機通用、人人都有。
- **Google Sheets** 當**目錄(index**:結構化、乾淨、搜尋飛快,n8n 又能直接讀成 JSON。目錄裡不只篇名,還有 `keywords``summary``last_updated`,讓 AI 好找。
---
## 倉庫內容
```
.
├── workflows/
│ ├── LLM_wiki.json # 主工作流(入庫 + 查詢兩條流程)
│ └── create_wiki_page.json # 子工作流:建立 Google Doc 並移到指定資料夾
├── index.xlsx # 目錄範本(上傳 Google Drive 後轉成 Google Sheets
├── wiki/
│ └── RAG 檢索增強生成(RAG.docx # 一篇 wiki 條目範例(轉成 Google Docs
└── README.md
```
> ⚠️ 這是**零件包**,你需要自己組裝(接上自己的 Google 帳號與 LLM 金鑰)。
### 為什麼下載的是 `.xlsx` 和 `.docx`
這個專案產生的 wiki 原本放在 **Google Drive 的 Docs / Sheets**。為了方便在 GitHub 上發佈下載,匯出成 Office 格式(`.xlsx` / `.docx`)。
**👉 你下載後,要把它們上傳到自己的 Google Drive,並轉回 Google 原生格式才能被 n8n 呼叫:**
| 下載到的檔案 | 上傳後請轉成 | 用途 |
|---|---|---|
| `index.xlsx` | **Google Sheets** | 目錄(index |
| `wiki/*.docx` | **Google Docs** | wiki 條目(範例,可刪) |
轉換方式(任一即可):
- 在 Google Drive 直接用 Google Sheets / Google Docs **開啟** `.xlsx` / `.docx`,再「檔案 → 另存為 Google 試算表 / Google 文件」。
- 或在 Drive 設定中開啟「上傳時自動轉換為 Google 文件格式」,再上傳。
---
## 目錄(index)欄位
`index.xlsx` 是 wiki 的目錄,AI 靠它找資料。欄位:
| 欄位 | 說明 |
|---|---|
| `topic` | 主題名稱(也是 wiki 條目的標題) |
| `doc_id` | 對應 Google Doc 的 ID |
| `keywords` | 關鍵字,幫 AI 比對問題 |
| `summary` | 摘要,幫 AI 判斷相關性 |
| `last_updated` | 最後更新日期 |
---
## 運作原理(兩條流程)
主工作流 `LLM_wiki.json` 內含兩條獨立流程。
### 1️⃣ 資料入庫(寫入)
`On form submission`(上傳 `.md` / `.txt`)→ `Extract from File`**`AI Agent`(知識寫入助手)**
寫入 Agent 的邏輯:
1. **先讀目錄** `get_indexs`(鐵律:沒讀過 index 不准做任何事)。
2. 把上傳文件拆成一個或多個主題。
3. 逐一判斷:
- **主題已存在** → `write_wiki`Append 到既有 Doc+ `update_wiki`(更新該條目的 keywords / summary)。
- **主題不存在** → `create_wiki_page`(建新 Doc,呼叫子工作流)+ `write_wiki`(寫入初始內容)+ `write_index`(在目錄新增一行)。
4. 確認每個主題都完成最後一步(更新過 index)才回報結果。
### 2️⃣ 資料查詢(讀取)
`When chat message received`**`AI Agent1`(知識查詢助手)**
查詢 Agent 的邏輯:
1. `get_indexs` 讀目錄,瀏覽所有 keywords / summary。
2. 判斷哪個(些)`doc_id` 與問題最相關。
3. `read_wiki` 讀取對應 Doc 全文。
4. 根據讀到的內容回答(只讀不寫;目錄裡找不到就老實說「Wiki 尚未收錄此主題」)。
### 子工作流 `create_wiki_page.json`
因為 Google Docs 節點**無法直接在指定資料夾建立文件**,所以拆成子工作流:用 Webhook 觸發 → `Create a document``Move file`(移到指定 wiki 資料夾)→ 回傳 `doc_id`。主工作流用 HTTP Request 節點呼叫它。
---
## 安裝與設定
### 需求
- 一個可用的 **n8n** 實例(自架或雲端)。
- **Google 帳號**Docs / Sheets / Drive 權限)。
- 一個 **LLM**。本專案範例用 **Google Gemini**`lmChatGoogleGemini` 節點),可自行換成其他 LLM 節點。
### 步驟
1. **匯入工作流**:在 n8n 中匯入 `workflows/LLM_wiki.json``workflows/create_wiki_page.json`
2. **準備 Google 檔案**
-`index.xlsx` 上傳 Google Drive 並**轉成 Google Sheets**。
- 在 Drive 建一個資料夾放 wiki 條目(例:`wiki/`)。
- (可選)把 `wiki/*.docx` 上傳並**轉成 Google Docs** 當範例,或直接刪掉從零開始。
3. **接憑證**:在每個 Google Sheets / Docs / Drive 節點接上你的 Google OAuth 憑證;LLM 節點接上你的金鑰。
4. **指定目標**
-`get_indexs` / `get_indexs1` / `write_index` 指向你的 index Google Sheet。
-`create_wiki_page` 子工作流的「建立文件」與「Move file」指向你的 wiki 資料夾。
- 主工作流的 `create_wiki_page` HTTP 節點 URL 改成**你自己 n8n 的 webhook 網址**(範本內是作者的網址,務必替換)。
5. **啟用並測試**
- 用表單上傳一份 `.md` / `.txt` → 看 index 是否新增、wiki 資料夾是否多出 Doc。
- 在 chat 觸發器問一個問題 → 看它是否查目錄、讀 Doc、回答。
---
## 注意事項
- **Token 燒得較兇**:因為是讓 LLM 真的去「讀、整理、改寫」資料,比向量法耗 token。處理大量文件前先評估成本。
- **範本內含作者的 webhook 網址**,請替換成自己的。
- 這套設計**重整理輕堆疊** — 它整理出來的是一個「知識**庫**」,而不是無限長大的「知識**倉庫**」。
---
## 致謝
觀念來自 **Andrej Karpathy** 的 LLM Wiki[原文 gist](https://gist.github.com/karpathy/442a6bf555914893e9891c11ac484894))。本專案只是把同一個觀念換成人人都有的 Google 工具,方便教學與實際使用。
## 授權
MIT License,詳見 [LICENSE](LICENSE)。