🏗️

Open NotebookLLM 教學系列

Part 2: 技術架構與 AI 提供商

深入了解系統架構設計與多 AI 提供商整合方式

Provider 抽象層 RAG 架構 API 設計

🏛️ 系統架構總覽

前端 Frontend
React 18 + TypeScript + TailwindCSS + Zustand
⬇️ HTTP / SSE
API 層 Controllers
RESTful API + SSE 串流
⬇️
服務層 Services
RAG Service / Studio Service / Podcast Service
⬇️
AI 提供商抽象層
Gemini / OpenAI / Anthropic / Ollama / Groq / DeepSeek

🔌 AI Provider 抽象設計

所有 AI 提供商都實現統一介面,讓切換提供商無痛進行:

class BaseAIProvider:
    def generate(self, prompt: str) -> str:
        """生成文字回應"""
        raise NotImplementedError

    def generate_stream(self, prompt: str) -> Generator:
        """串流生成回應"""
        raise NotImplementedError

    def generate_embedding(self, text: str) -> List[float]:
        """生成向量嵌入"""
        raise NotImplementedError

    def generate_image(self, prompt: str) -> str:
        """生成圖片 (base64)"""
        raise NotImplementedError
                
設計模式:策略模式 (Strategy Pattern),讓應用層不需知道具體使用哪個 AI。

⚖️ AI 提供商特性比較

提供商 文字生成 嵌入向量 圖片生成 特色
Gemini 多模態、免費額度
OpenAI ✅ DALL-E 業界標竿
Anthropic ❌ 備援 超長上下文
Ollama 完全離線
Groq ❌ 備援 超高速推理
DeepSeek ❌ 備援 深度推理

🔍 RAG 檢索增強生成

RAG (Retrieval-Augmented Generation) 是本專案的核心技術:

1️⃣ 文件處理

上傳文件 → 解析內容 → 分割成 Chunks

2️⃣ 向量嵌入

將每個 Chunk 轉換為向量,存入資料庫

3️⃣ 檢索查詢

用戶問題 → 向量化 → 相似度搜尋

4️⃣ 增強生成

將相關 Chunks + 問題送給 LLM 生成答案

優勢:AI 回答基於你的資料,減少幻覺,提高準確性!

🚀 進階 RAG 搜尋技術

RRF 融合

Reciprocal Rank Fusion 演算法,結合全文搜尋 + 向量搜尋的排名結果。

Query Expansion

LLM 自動擴展查詢,生成同義詞和相關詞,提高召回率。

LLM Reranking

使用 LLM 對搜尋結果進行智能重排序,提升精準度。

去重機制

自動識別並合併重複的搜尋結果,避免冗餘資訊。

📡 RESTful API 設計

模組 端點範例 說明
筆記本 GET /api/notebooks 取得所有筆記本
來源 POST /api/notebooks/:id/sources/upload 上傳文件
對話 POST /api/notebooks/:id/chats/stream SSE 串流對話
工作室 POST /api/notebooks/:id/studio/mindmap 生成心智圖
Podcast POST /api/notebooks/:id/studio/podcast 生成 Podcast

🗄️ 資料庫設計

Notebook

筆記本主表:id, title, created_at, folder_id

Source

來源資料:id, notebook_id, type, title, content, url

SourceChunk

分割區塊:id, source_id, content, embedding, chunk_index

Chat

對話記錄:id, notebook_id, role, content, sources

StudioOutput

工作室輸出:id, notebook_id, type, title, data

Folder

資料夾:id, name, emoji, order

搜尋引擎:使用 SQLite FTS5 全文搜尋 + 向量相似度搜尋

🎯 Part 2 總結

在本單元中,我們深入了解了:

分層架構

前端 → API → 服務層 → AI 抽象層

Provider 模式

統一介面,輕鬆切換 AI 提供商

RAG 流程

文件處理 → 嵌入 → 檢索 → 生成

進階搜尋

RRF 融合、Query Expansion、Reranking

下一步:Part 3 將帶你實際動手設定環境與安裝專案!
➡️ 前往 Part 3:環境設定與安裝