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>
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
# 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)。
|
||||
Reference in New Issue
Block a user