# 標題:從零開始打造中文 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 整合圖)

---
# 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。