🏗️

系統架構與程式解析

Part 4:了解 RAG 平台的技術組成與程式碼結構

前後端分離 Flask API JavaScript RESTful

📁 專案結構總覽

📁 RAG知識庫問答平台/
├── app.py              # Flask 後端主程式
├── requirements.txt   # Python 套件清單
├── README.md          # 說明文件
│
├── 📁 templates/
│   └── index.html     # 主頁面模板
│
├── 📁 static/
│   ├── style.css      # 樣式表
│   └── script.js      # 前端邏輯
│
├── 📁 data/
│   ├── knowledge_base.json
│   └── knowledge_base_example.csv
│
└── 📁 gas_scripts/
    └── 知識庫API.gs   # Google Apps Script

檔案說明

app.py - 所有後端邏輯

templates/ - HTML 頁面

static/ - CSS + JS

data/ - 知識庫資料

🏛️ 系統三層架構

🖥️

前端層

HTML + CSS + JS

使用者介面

⚙️

後端層

Flask + Python

業務邏輯、API

💾

資料層

JSON 檔案

知識庫儲存

前後端分離:前端透過 HTTP API 與後端溝通,資料用 JSON 格式交換。

⚙️ 後端:Flask 框架

Flask 是 Python 輕量級網頁框架,負責處理 HTTP 請求。

🛣️ 路由(Route)

定義 URL 路徑對應的處理函式

/api/chat → 聊天功能

📥 請求處理

接收前端發送的 JSON 資料

request.json

📤 回應生成

將結果打包成 JSON 回傳

jsonify(result)

📁 靜態檔案

提供 CSS、JS、圖片等資源

/static/...

🔌 主要 API 端點

方法 端點 功能
POST /api/chat 發送訊息,取得 AI 回覆
GET /api/knowledge-base 取得知識庫列表
POST /api/knowledge-base 新增知識
PUT /api/knowledge-base/<id> 更新知識
DELETE /api/knowledge-base/<id> 刪除知識
POST /api/knowledge-base/search 搜尋知識庫

💬 聊天 API 處理流程

@app.route('/api/chat', methods=['POST'])
def chat():
    # 1. 接收前端資料
    data = request.json
    message = data['message']
    use_rag = data.get('use_rag', False)

    # 2. 若啟用 RAG,進行知識庫搜尋
    if use_rag:
        relevant_docs = search_knowledge_base(message)
        context = build_context(relevant_docs)

    # 3. 呼叫 AI API
    response = call_ai_api(message, context)

    # 4. 回傳結果
    return jsonify({
        'response': response,
        'sources': relevant_docs
    })
核心就是:接收 → 搜尋 → AI 生成 → 回傳

🎨 前端:JavaScript 邏輯

前端使用原生 JavaScript(無框架),主要功能:

📝 狀態管理

使用全域變數儲存對話記錄、設定等

🔄 API 呼叫

使用 fetch() 發送 HTTP 請求

🖼️ 畫面更新

動態生成 HTML 元素顯示對話

💾 本地儲存

使用 localStorage 保存設定

📡 前端發送請求範例

async function sendMessage(message) {
    // 1. 準備請求資料
    const requestData = {
        message: message,
        api_key: settings.apiKey,
        api_type: settings.apiType,
        use_rag: settings.useRAG
    };

    // 2. 發送 POST 請求
    const response = await fetch('/api/chat', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(requestData)
    });

    // 3. 解析回應
    const result = await response.json();

    // 4. 顯示結果
    displayMessage(result.response);
    displaySources(result.sources);
}

🔄 完整資料流程

1. 使用者輸入問題
2. JavaScript 發送 fetch 請求
3. Flask 接收並處理
4. 向量搜尋知識庫
5. 呼叫 AI API 生成答案
6. 回傳 JSON → 前端顯示

🔧 技術堆疊總覽

後端技術

  • Flask 3.0 - 網頁框架
  • OpenAI SDK - GPT API
  • Google GenAI - Gemini API
  • Sentence Transformers - 向量嵌入
  • Scikit-learn - 相似度計算
  • Pandas - 資料處理

前端技術

  • HTML5 - 頁面結構
  • CSS3 - 樣式設計
  • JavaScript - 互動邏輯
  • Fetch API - HTTP 請求
  • LocalStorage - 本地儲存
  • Font Awesome - 圖示

📝 Part 4 總結

前後端分離

前端負責介面,後端負責邏輯,透過 API 溝通

Flask 後端

處理 HTTP 請求、呼叫 AI、管理知識庫

RESTful API

使用標準的 HTTP 方法(GET/POST/PUT/DELETE)

JSON 資料交換

前後端使用 JSON 格式傳遞資料

🚀 下一步

Part 5:知識庫管理與進階應用!