# 影片筆記:Mac mini 变身家庭 AI 服务器:从零搭建完整本地 AI 工作流 ## ⚠️ 可先使用,仍有待修正項目 本筆記已完成可閱讀的逐字稿與時間跳轉;下列為待處理問題,建議播放原片確認。 - 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。) - 待修正:逐字稿可先使用,但有待校正清單(segment=6 unnatural_sentence_boundary: 標點出現在句首或停在逗號位置,斷句可能不符合文法/口語;segment=7 unnatural_sentence_boundary: 標點出現在句首或停在逗號位置,斷句可能不符合文法/口語) ## 一句話總結 本影片詳細演示了如何將一台入門款 M4 Mac mini(16GB 記憶體)改造成家庭本地 AI 伺服器,透過串接 Ollama、OpenWebUI、Whisper.cpp 與 N8N,實現從影片上傳、語音轉寫、OCR 文字提取、知識庫檢索到自動化摘要生成的完整本地 AI 工作流。 ## 核心重點 1. **硬體與架構**:使用 M4 Mac mini 作為基礎,模型與數據完全在本地運行,確保隱私與數據安全。 2. **核心軟體堆疊**: * **Ollama**:負責運行大語言模型(LLM)、向量模型(Embedding)及 OCR 模型。 * **OpenWebUI**:提供類似 ChatGPT 的網頁介面,並統一管理 API 金鑰與權限。 * **Whisper.cpp**:處理語音轉寫,支援 Apple Silicon Metal 加速。 * **N8N**:透過 Docker 部署,用於串接 Webhook、語音轉寫與 AI 摘要的自動化流程。 3. **關鍵技術實現**: * **RAG(檢索增強生成)**:透過 Embedding 模型將本地文件向量化,讓 AI 能基於特定知識庫回答問題。 * **OCR 處理**:針對掃描版 PDF 或圖片,使用專門的 OCR 模型提取文字,再輸入 RAG 系統。 * **自動化串接**:建立 N8N 工作流,自動觸發「影片上傳 -> Whisper 轉寫 -> Qwen 摘要 -> 返回結果」的鏈路。 4. **資源管理**:強調根據記憶體大小選擇合適的模型參數(如 16GB 記憶體適合 4B 或 9B 模型),並注意服務重啟時的順序與資源釋放。 ## 詳細大綱 ### 一、 前言與硬體準備 * **目標**:將閒置 Mac 變為本地 AI 伺服器,模型與數據均在本地運行。 * **硬體規格**:M4 入門款 Mac mini,16GB 統一記憶體,256GB SSD。 * **未來擴展**:提及後續可能涉及本地圖片/視頻生成、AI 編程及 Home Assistant 整合。 ### 二、 核心模型部署 (Ollama) * **安裝 Ollama**:從官網下載並拖入應用程式資料夾。 * **模型選擇原則**: * 模型大小影響運行體驗,非越大越好。 * 8GB 記憶體建議 4B 級別;16GB 可運行 4B 或嘗試 9B;24GB+ 可嘗試更大規格。 * 需確認模型標籤以 Ollama 模型庫實際存在為準。 * **下載模型指令**: 1. **語言模型 (LLM)**:`ollama pull qwen2.5:4b-q4_K_M` (註:逐字稿口誤為「大約模型」,實際指 LLM,負責聊天與生成)。 2. **向量模型 (Embedding)**:用於知識庫檢索,將文檔轉為向量數據。 3. **OCR 模型**:`ollama pull qwen2.5-ocr` (註:逐字稿口誤為「歐塞AR」),負責圖片文字提取。 * **測試與管理**: * `ollama run`:測試模型回應。 * `ollama stop`:停止模型以釋放資源。 * `ollama ps`:檢查運行狀態。 ### 三、 網頁介面與 API 管理 (OpenWebUI) * **部署 OpenWebUI**: * 使用 Python 3.11 環境安裝,固定版本 0.11.0。 * 建議安裝 Homebrew 以方便管理。 * 創建獨立虛擬環境避免衝突。 * **初始設定**: * 首次啟動僅允許本機訪問 (`127.0.0.1:3000`)。 * 建立第一個帳號自動成為管理員。 * 關閉新用戶註冊,暫不安裝第三方工具。 * **開放局網訪問**: * 查詢 Mac mini 局網 IP。 * 重新啟動 OpenWebUI,透過 `IP:3000` 讓局網內其他設備訪問。 * 確認服務未暴露至公網,無需路由器端口轉發。 * **API 金鑰設定**: * 在 OpenWebUI 設定中生成 API Key (以 SK 開頭)。 * 建議為 N8N 等自動化工具創建普通帳號並生成專屬 Key,避免使用管理員 Key。 * 測試 API 接口:使用 `curl` 命令測試模型列表與聊天接口。 ### 四、 知識庫與檢索增強生成 (RAG) * **RAG 原理**:先從資料找內容,再交給 AI 生成回答,避免僅依賴模型記憶。 * **設定步驟**: * 在 OpenWebUI 文檔頁面選擇 Ollama API。 * 模型選擇預先下載的 Embedding 模型 (如 `qwen2.5-embedding:0.6b`)。 * 調整參數:Chunk Size (片段大小), Chunk Overlap (重疊部分), TopK (檢索片段數,建議設為 3)。 * **測試驗證**: * 上傳測試文件 (TXT/PDF/Docx)。 * 透過 `#` 號手動附加知識庫進行提問。 * 確認回答包含引用來源。 * **注意**:掃描版 PDF 需先經 OCR 處理才能放入 RAG。 ### 五、 影像理解與文字提取 (OCR) * **區分概念**: * **圖片理解**:描述畫面內容並識別文字 (使用大語言模型,如 Qwen 3.5 4B/9B)。 * **OCR 提取**:專注於提取文字、表格、圖表 (使用 GLM OCR 模型)。 * **圖片理解設定**: * 若出現提示不足,需在 OpenWebUI 模型設定中調整 `NUMCTX` (上下文長度),例如設為 8192。 * **OCR 處理流程**: * 使用 `ollama run qwen2.5-ocr` 處理圖片。 * 對於掃描 PDF,建議先用預覽轉為 PNG,再交給 OCR。 * 輸出結果可保存為 TXT/Markdown 並上傳至知識庫。 * **優化建議**:圖片過大時縮放至 1600-2200 像素,優先使用 PNG/JPG,避免模糊、傾斜、反光。 ### 六、 語音轉寫 (Whisper.cpp) * **工具介紹**:Whisper.cpp 為 C++ 實現,針對 Apple Silicon 提供 Metal 加速。 * **安裝與模型**: * 需安裝 `ffmpeg` (處理音頻格式) 與 `Whisper.cpp`。 * 下載支援中文的多語言模型 (如 `large-v3-turbo` 或 `small` 多語言版),避免使用僅針對英文優化的模型。 * 下載後計算 SHA-1 值進行核對。 * **轉寫流程**: 1. 使用 `ffmpeg` 將視頻音頻轉為 16kHz 單聲道 PCM S16LE 格式。 2. 運行 `Whisper.cpp`,指定模型、音頻文件、語言 (zh) 及 Prompt (專有名詞)。 3. 生成 TXT (純文字)、SRT (字幕)、VTT (網頁字幕) 文件。 4. 8GB 記憶體可嘗試 `large-v3-turbo-q5_0`,若壓力大則換用 `small` 多語言模型。 5. **注意**:中文轉寫時不要開啟翻譯參數,否則會譯為英文。 ### 七、 自動化工作流串接 (N8N) * **Whisper Server API**: * 將 Whisper.cpp 啟動為本地 API 服務,供 N8N 調用。 * 僅限家庭局網內使用,勿暴露至公網。 * **N8N 部署**: * 使用 Docker Desktop 運行,固定版本。 * 生成加密金鑰,創建本地管理員帳號。 * **工作流設計 (四個節點)**: 1. **Webhook**:工作流入口,接收視頻上傳。 2. **HTTP Request (Whisper 轉寫)**:將二進制文件發送給本地 Whisper Server。需注意 `input data field name` 必須與 Webhook 輸出的二進制字段名稱一致 (如 `data` 或 `data0`)。 3. **HTTP Request (Qwen 整理)**:將 Whisper 返回的完整轉寫稿,連同提示詞發送給 OpenWebUI API 進行摘要、提綱、標題與章節建議生成。 4. **Respond to Webhook**:將最終結果以 JSON 格式返回給用戶。 * **測試與發布**: * 使用 `Listen for Test Event` 測試 Webhook。 * 測試成功後點擊 `Publish` 發布工作流。 * 正式地址將變更為 `Webhook AI Video Notes`。 * **結果處理**: * 若需閱讀 Markdown 格式結果,可使用 `JQ` 或 Python JSON 模塊處理 JSON 中的轉義字符 (如 `\n`)。 ### 八、 服務重啟與維護 * **重啟順序建議**: 1. **Ollama**:打開 App 或執行 `open -a Ollama`,確認版本資訊返回正常。 2. **OpenWebUI**:確認局網 IP 未變化,保持終端窗口運行,確保 API 可用。 3. **Whisper Server**:僅在需要轉寫時啟動,保持終端窗口運行。 4. **N8N (Docker)**:啟動 Docker Desktop,容器應自動恢復 (`Restart Unless Stopped`)。若未啟動,手動執行 `docker start n8n`。 * **架構總結**: * 底層:Ollama (運行模型)。 * 中間層:OpenWebUI (統一 API 與權限管理)。 * 應用層:RAG (知識庫), OCR (影像), Whisper (語音), N8N (自動化)。 * 最終目標:將 Mac mini 變為長期運行、多設備共享的本地 AI 伺服器。 ## 工具 / 模型 / 名詞整理 | 類別 | 名稱/版本 | 備註/說明 | | :--- | :--- | :--- | | **硬體** | Mac mini (M4 入門款) | 16GB 統一記憶體, 256GB SSD | | **基礎設施** | Ollama | 本地 AI 模型運行環境 | | **基礎設施** | OpenWebUI | 網頁對話介面, 統一 API 管理 | | **基礎設施** | N8N | 自動化工作流工具 | | **基礎設施** | Docker Desktop | 用於運行 N8N 容器 | | **基礎設施** | Homebrew | Mac 套件管理工具 | | **基礎設施** | Python 3.11 | 運行 OpenWebUI 的環境 | | **語言模型 (LLM)** | Qwen 2.5 (千問) | 逐字稿口誤為「簽問」、「千萬」、「前文」、「輕文」等 | | **LLM 規格** | 4B, 9B, 27B, 35B | 參數大小,依記憶體選擇 | | **量化格式** | Q4_K_M, Q5_0 | 量化技術,平衡大小與效果 | | **向量模型** | Qwen 2.5 Embedding | 用於 RAG 檢索,逐字稿口誤為「向量模型」具體名稱未明說,僅提及功能 | | **OCR 模型** | Qwen 2.5 OCR | 逐字稿口誤為「歐塞AR」、「GLM OCR」混用,實際指代 Qwen 的 OCR 能力或模型 | | **語音模型** | Whisper.cpp | 語音轉寫工具,C++ 實現 | | **Whisper 模型** | large-v3-turbo, small | 多語言模型,支援中文 | | **音頻處理** | FFmpeg | 處理音頻格式轉換 | | **其他工具** | JQ | JSON 數據處理工具 | | **其他工具** | macOS 預覽 (Preview) | 用於將 PDF 頁面導出為圖片 | | **其他工具** | macOS 文字編輯 (TextEdit) | 用於創建測試文本文件 | ## 操作流程整理 1. **環境準備**: * 安裝 Ollama 並下載所需模型 (LLM, Embedding, OCR)。 * 安裝 Python 3.11 環境,部署 OpenWebUI。 * 安裝 Docker Desktop 並部署 N8N。 * 安裝 FFmpeg 與 Whisper.cpp。 2. **基礎服務啟動與測試**: * 啟動 Ollama,確認模型運行狀態 (`ollama ps`)。 * 啟動 OpenWebUI,設定管理員帳號,生成 API Key。 * 測試 OpenWebUI 的局網訪問與 API 接口。 3. **知識庫與 OCR 設定**: * 在 OpenWebUI 中配置 Embedding 模型與 RAG 參數 (Chunk Size, TopK)。 * 對於圖片/PDF,若為掃描版,先使用預覽轉為 PNG,再透過 `ollama run qwen2.5-ocr` 提取文字。 * 將提取的文字或原始文件上傳至 OpenWebUI 知識庫,並透過 `#` 號測試檢索。 4. **語音轉寫設定**: * 使用 FFmpeg 將視頻音頻轉為 16kHz 單聲道 PCM S16LE 格式。 * 運行 Whisper.cpp,指定多語言模型 (如 `large-v3-turbo`) 與語言代碼 (zh)。 * 生成 TXT/SRT/VTT 文件。 5. **自動化工作流 (N8N) 串接**: * 啟動 Whisper Server API。 * 在 N8N 中建立工作流: * 節點 1:Webhook 接收視頻文件。 * 節點 2:HTTP Request 調用 Whisper Server 進行轉寫。 * 節點 3:HTTP Request 調用 OpenWebUI API,將轉寫稿發送給 LLM 進行摘要與章節建議。 * 節點 4:Respond to Webhook 返回 JSON 結果。 * 測試 Webhook 並發布工作流。 6. **日常維護**: * Mac 重啟後,依序啟動 Ollama、OpenWebUI、Whisper Server (按需) 與 N8N (Docker)。 ## 值得注意的限制或風險 1. **硬體資源限制**: * 16GB 記憶體對於大參數模型(如 9B 以上)可能產生壓力,建議優先選擇 4B 或量化後的模型。 * 處理高分辨率圖片或長視頻時,可能遇到記憶體不足或處理緩慢的情況。 2. **OCR 與 RAG 的兼容性**: * 掃描版 PDF 必須先經過 OCR 處理才能放入 RAG 系統,否則無法檢索。 * 圖片若過於模糊、傾斜或有反光,會嚴重影響 OCR 準確率。 3. **網路與安全性**: * 所有服務建議僅在家庭局網內運行,避免暴露至公網,以防未經授權的 API 調用。 * OpenWebUI 的 API Key 應為自動化工具創建獨立帳號並生成專屬 Key,避免使用管理員 Key。 4. **模型選擇與版本**: * 需確認 Ollama 模型庫中實際存在的模型標籤,避免下載不存在的版本。 * Whisper 模型選擇需支援中文,避免使用僅針對英文優化的模型。 ## 逐字稿辨識疑點 * **模型名稱聽寫錯誤**: * 逐字稿多次出現「簽問」、「千萬」、「前文」、「輕文」、「千問」,根據上下文應均指代阿里通義千問系列模型 (Qwen),但依規則標記為聽寫錯誤,不自行更正。 * 逐字稿出現「歐塞AR」、「GLM OCR」,指代 OCR 模型,但前文又提及選擇「簽問的 AR 模型」,名稱混亂,標記為疑點。 * 逐字稿出現「大約模型」,根據上下文指代「語言模型 (LLM)」,標記為疑點。 * 逐字稿出現「總業資料」,根據上下文可能指「總結資料」或「專業資料」,標記為疑點