# 標題:從零開始打造中文 AI 多店客服系統:Windows + RTX 5090 環境建置教學(支援 LINE 串接、多租戶 RAG 架構、模型微調、Docker) --- # 📌 教學目標 打造一套可以支援「多間店家」客服的 AI 聊天系統,能依據不同店家知識庫提供回答,若問題與資料無關則拒答,並可串接 LINE 提供自動客服功能。以 Windows 專業版 + RTX 5090 為開發環境。 --- # 🔧 系統功能需求拆解 | 模組 | 功能說明 | | ----------- | ------------------------------ | | RAG | 每間店各自資料庫查詢並回答 | | 多租戶處理 | 可區分不同店家 (如 A、B、C 店) 並給予不同知識與模型 | | 拒答機制 | 問題與資料不相符時給出預設安全回應 | | LINE 串接 | 客戶可直接透過 LINE 發問並收到 LLM 回覆 | | FastAPI API | 提供 webhook 接口與模型查詢服務 | | Docker | 建構跨平台穩定開發部署環境 | --- # 🧰 開發環境需求(以 Windows + Docker 為主) | 元件 | 說明 | | ----------------------- | --------------------------- | | Windows 11 專業版 | 建議已安裝 WSL2 (Ubuntu 22.04) | | GPU | NVIDIA RTX 5090(32GB GDDR7) | | 記憶體 | 至少 128GB RAM | | 硬碟 | 至少 2TB SSD(支援高速模型加載) | | Docker Desktop | 支援 GPU 容器部署 | | VS Code + Remote WSL 插件 | 開發撰寫用 | --- # 🪜 架構總覽流程 1. 設定好開發環境(WSL2 + Conda or Docker) 2. 建立向量資料庫與知識檔(每店一份) 3. 建立 FastAPI 後端與模型載入流程 4. 串接 LINE webhook API 5. 加入「拒答策略 + 安全 prompt」 6. 可擴展的模型管理與切換架構 --- # ✅ 架構圖總覽 (已提供圖片:多租戶 RAG + LINE 整合圖) ![架構圖](https://hackmd.io/_uploads/rJZ-FTklge.png) --- # 1️⃣ 安裝 WSL2 與 Ubuntu ## ✅ 在 Windows 中: 1. 開啟「Windows 終端機」(或 PowerShell) 2. 輸入以下指令安裝 Ubuntu: ```powershell wsl --install -d Ubuntu-22.04 ``` 3. 安裝後,請「重新開機」電腦。 4. 開啟 Ubuntu(第一次會設定使用者帳號密碼)。 --- # 2️⃣ 安裝 Miniconda 與 Python 環境 ## ✅ 在 Ubuntu 終端中操作(WSL) 1. 輸入以下指令下載與安裝 Miniconda: ```bash wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh ``` 2. 安裝完畢後,輸入: ```bash source ~/.bashrc ``` 3. 建立並啟用 conda 環境: ```bash conda create -n llm_env python=3.10 -y conda activate llm_env ``` --- # 3️⃣ 安裝 CUDA GPU 套件與 LLM 相關工具 仍在 Ubuntu + Conda 環境中執行: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers peft accelerate bitsandbytes faiss-cpu chromadb fastapi uvicorn line-bot-sdk ``` 這些套件支援 HuggingFace 模型、LoRA 微調、RAG、API 與 LINE。 --- # 4️⃣ 建立每間店的知識庫資料夾 ## ✅ 在 WSL Ubuntu 中操作: ```bash mkdir -p ~/llm_project/data/store_a mkdir -p ~/llm_project/data/store_b ``` 並準備 `faq.json`,例如: ```json [ {"question": "營業時間是幾點?", "answer": "我們營業時間是早上 9 點至晚上 9 點。"}, {"question": "是否提供外送?", "answer": "我們有配合 Uber Eats。"} ] ``` 之後可轉成向量資料庫(使用 FAISS 或 Chroma) --- # 5️⃣ 撰寫 FastAPI 主系統 + 模型查詢 API ## ✅ 在 VS Code 中打開專案目錄 `~/llm_project` 建立 `main.py`: ```python from fastapi import FastAPI, Request app = FastAPI() @app.post("/chat/{store_id}") async def chat(store_id: str, req: Request): question = (await req.json())["message"] vector_db = load_vector(store_id) result = search_relevant_qa(question, vector_db) if result.score < 0.7: return {"reply": "很抱歉,我只能回答與本店服務有關的問題喔。"} else: return {"reply": generate_llm_answer(result)} ``` --- # 6️⃣ 設定 LINE Bot 並對應 webhook URL 1. 前往 [LINE Developers Console](https://developers.line.biz/console/) 建立 Channel 2. 將 webhook URL 指向你的伺服器(或本機測試用 ngrok) ``` /webhook/store_a /webhook/store_b ``` 3. FastAPI 加入 webhook 處理端點: ```python @app.post("/webhook/{store_id}") async def webhook(store_id: str, req: Request): # 解析 LINE JSON, 並導入對應資料庫與模型處理 ``` --- # 7️⃣ 使用 Docker 將整個系統打包與部署 1. 在 `llm_project` 資料夾內新增 `Dockerfile` ```Dockerfile FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 RUN apt update && apt install -y python3-pip git wget curl COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] ``` 2. 建立 requirements.txt 檔案: ```txt transformers peft accelerate bitsandbytes faiss-cpu chromadb fastapi uvicorn line-bot-sdk torch==2.1.0+cu118 -f https://download.pytorch.org/whl/torch_stable.html ``` 3. 建立 image: ```bash cd ~/llm_project docker build -t my-llm-service . ``` 4. 匯出為 image 檔案: ```bash docker save -o my-llm-service.tar my-llm-service ``` --- # 🔁 附錄:自動向量庫建立腳本(FAQ 轉 FAISS) ## ✅ 檔案名稱:`build_vector.py` ```python import json import os from sentence_transformers import SentenceTransformer import faiss model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2') store_id = 'store_a' with open(f'data/{store_id}/faq.json', 'r', encoding='utf-8') as f: data = json.load(f) questions = [item['question'] for item in data] answers = [item['answer'] for item in data] embeddings = model.encode(questions, convert_to_tensor=False) index = faiss.IndexFlatL2(len(embeddings[0])) index.add(embeddings) faiss.write_index(index, f'data/{store_id}/vector.index') with open(f'data/{store_id}/answers.json', 'w', encoding='utf-8') as f: json.dump(answers, f, ensure_ascii=False) ``` --- # 🧪 附錄:LINE 測試工具與 API 模擬腳本 ## ✅ 模擬 POST 到 FastAPI `/chat/{store_id}` 介面 ### 檔案名稱:`test_chat.py` ```python import requests store_id = 'store_a' msg = "請問你們營業到幾點?" response = requests.post(f"http://localhost:8000/chat/{store_id}", json={"message": msg}) print(response.json()) ``` ## ✅ 模擬 LINE Bot webhook 資料格式 ```python @app.post("/webhook/{store_id}") async def webhook(store_id: str, request: Request): body = await request.json() msg = body['events'][0]['message']['text'] vector_db = load_vector(store_id) result = search_relevant_qa(msg, vector_db) if result.score < 0.7: reply = "很抱歉,我只能回答與本店服務有關的問題喔。" else: reply = generate_llm_answer(result) return {"reply": reply} ``` --- 📦 這樣你將具備: 1. 一鍵產生每家店的向量資料庫(build\_vector.py) 2. 用 Python 腳本模擬測試 `/chat` 與 webhook 請求 3. 更方便除錯 + 開發 + 線上串接 LINE Bot 若你還想加入: - 長文本向量化(PDF → chunks → 向量) - 圖形化管理界面(Streamlit / Gradio) 我也可以持續幫你擴展文件內容。 # 從零開始打造中文 AI 多店客服系統:Windows + RTX 5090 環境建置教學 支援 LINE 串接、多租戶 RAG 架構、模型微調與 Docker 部署 --- ## 📌 教學目標 打造一套可以支援「多間店家客服」的 AI 系統,具備以下功能: - 根據不同店家知識庫進行回答(RAG 架構) - 串接 LINE 並實現 webhook 對應與自動回應 - 對於非知識庫內的問題可拒答 - 支援模型微調與 Docker 容器化部署 開發與執行環境為 Windows 11 + WSL2 Ubuntu + RTX 5090 顯示卡。 ⚠️ 本教學僅選用「非中國開發」模型(如 Meta 的 LLaMA3、Mistral、Phi 等) --- ## 🔧 功能需求分析 | 模組 | 功能說明 | |--------------|---------------------------------------------| | RAG 查詢 | 依據店家 FAQ 建立向量資料庫,進行相關問答檢索 | | 多租戶管理 | 支援多間店獨立 webhook 與資料庫 | | 拒答機制 | 使用語意分數閾值判斷是否回應,避免不相關亂答 | | FastAPI API | 提供 `/chat/{store_id}` 與 `/webhook/{store_id}` 路由 | | LINE 串接 | 連動 LINE BOT 並依店家導向回應 | | Docker 部署 | 模型服務包裝為 image,可移植上雲或部署多實例 | --- ## 🧰 硬體與開發環境需求 | 項目 | 最低建議規格 | |------------|------------------------------------------| | 作業系統 | Windows 11 專業版 + WSL2 (Ubuntu 22.04) | | 顯示卡 | NVIDIA RTX 5090(32GB VRAM) | | 記憶體 | 128GB RAM | | 儲存空間 | 2TB SSD | | 編輯工具 | VS Code + Remote WSL 插件 | | 容器系統 | Docker Desktop(含 GPU 支援) | --- ## 🪜 建置流程總覽 1. 安裝 WSL2 + Ubuntu + Conda 環境 2. 安裝必要套件與模型依賴(Transformers、FAISS、LINE SDK) 3. 建立多店 FAQ json 與向量資料庫 4. 撰寫 FastAPI 應用並對應 webhook 與 chat 查詢 5. 串接 LINE Channel 並測試 6. 包裝成 Docker Image 並啟動服務 7. 可選:以 Ollama 測試模型,或部署微調後模型 --- ## 📦 非中國開發模型推薦(可商用、支援微調) | 模型名稱 | 開發者 | 尺寸 | 語言 | 可微調 | 特點 | |------------|--------------|--------|------|--------|--------------------------| | LLaMA 3 | Meta | 8B/70B | 多語 | ✅ | 穩定、社群活躍、可微調 | | Mistral | Mistral AI | 7B | 少量 | ✅ | 效能佳、小型高效、MoE 推論快 | | Mixtral | Mistral AI | 12.9B | 少量 | ✅ | 多專家架構、輸出多樣 | | Phi 2 | Microsoft | 2.7B | 少量 | ✅ | 小型推論任務、可快速微調 | | Gemma | Google DeepMind | 2B/7B | 少量 | ✅ | 輕量級,TPU 優化,原生支援 Google 平台 | 建議開發用:**LLaMA 3(8B) + Ollama 測試 + 向量查詢輔助回答(RAG)** --- ## 🧠 精度選擇說明(int4/int8/fp16) | 格式 | 精度 | 記憶體用量 | 特點 | |--------|------|------------|--------------------------| | int4 | 低 | 最低 | 適合省空間部署,可同時執行多模型 | | int8 | 中 | 中 | 精度與容量平衡,常見於部署環境 | | fp16 | 高 | 較高 | 用於推論與微調,支援 CUDA 加速 | | fp32 | 最高 | 最大 | 訓練原始模型用,不適合部署 | 部署時需**事先選定格式**,模型一經載入無法變更精度。 --- 📘 如需完整指令與程式碼(WSL 安裝、FAQ 建立、向量轉換、FastAPI 建置、LINE 測試、Dockerfile 編寫),請通知我,我將幫你一併寫入或產出 PDF。