agent detail 2

2026-03-02




# AI Agent 系統架構設計書(SA)

---

| 項目     | 內容                                                  |
| -------- | ----------------------------------------------------- |
| 文件版本 | v4.0                                                  |
| 建立日期 | 2026-03-02                                            |
| 文件狀態 | 可執行(待 Phase 0 PoC 驗收後更新 §3、§5)          |
| 適用場景 | 機構設計研發、光學自動化、產線站點 AI 整合            |
| 相關圖檔 | `diagrams/` 資料夾內 8 個 `.mmd` 檔案(詳見附錄) |

> **本文件說明**:以 v2.0 的模組化架構與 Sprint 開發計畫為骨架,採用 v3.1 的技術選型(Ollama + Qwen3-1.7B、AnythingLLM + pgvector、FastAPI、Python MCP SDK),去除 Docker、Redis、Semantic Kernel 等依賴,簡化為可立即執行的方案。

---

## 目錄

1. [技術選型決議(已定案)](#1-技術選型決議已定案)
2. [系統總體架構](#2-系統總體架構)
3. [模組設計與元件規格](#3-模組設計與元件規格)
4. [資料流程設計](#4-資料流程設計)
5. [API 介面規格](#5-api-介面規格)
6. [資料庫設計](#6-資料庫設計)
7. [部署架構與環境規格](#7-部署架構與環境規格)
8. [開發階段計畫](#8-開發階段計畫)
9. [人力配置與分工](#9-人力配置與分工)
10. [驗收標準](#10-驗收標準)
11. [風險評估](#11-風險評估)
12. [待釐清事項](#12-待釐清事項)

---

## 1. 技術選型決議(已定案)

### 1.1 技術棧總表

| 層級               | 選定技術                              | 決策理由                                                     |
| ------------------ | ------------------------------------- | ------------------------------------------------------------ |
| LLM 推理引擎       | Ollama                                | Windows 原生、OpenAI 相容 API (:11434)、零配置、模型庫豐富   |
| 推理模型           | Qwen3-1.7B Q4_K_M                     | 全節點統一版本、~1.5GB VRAM、硬體門檻低                      |
| 嵌入模型           | nomic-embed-text                      | 輕量(~270MB VRAM)、離線支援、語意品質佳                    |
| 知識庫平台         | AnythingLLM Server                    | MIT 授權、無 Docker 安裝選項、管理介面友善,支援 pgvector    |
| 向量資料庫(主庫) | PostgreSQL 15+ + pgvector             | 與關聯式 DB 共用同一 PG 實例,減少運維複雜度                 |
| 向量資料庫(副本) | PostgreSQL 15+ + pgvector(邊緣節點) | 邊緣節點本地安裝,離線可查詢,差異 SQL 包同步                |
| API 後端           | FastAPI(Python 3.11+)               | 輕量、非同步、易整合 MCP                                     |
| 工具調用框架       | Python MCP SDK                        | 標準協議、LLM 與工具解耦                                     |
| 工具路由引擎       | Python 規則字典(intent_router)      | 補償 1.7B Function Calling 不穩定,詳見 §3.5                |
| 中央 / 邊緣資料庫  | PostgreSQL 15+                        | 向量存儲(pgvector)、節點管理、版本控管、告警紀錄、對話歷史 |
| 邊緣對話資料庫     | SQLite                                | 對話歷史與同步狀態(向量資料已改由 pgvector 負責)           |
| Log 收集           | MQTT + WebSocket + HTTP               | 多頻率適配,支援各種設備輸出協議                             |

### 1.2 明確排除項

| 排除方案        | 排除理由                                            |
| --------------- | --------------------------------------------------- |
| Docker Compose  | 初期約束,不使用容器化                              |
| Dify            | 核心部署依賴 Docker Compose                         |
| RAGFlow         | 最低需求 16GB RAM + Docker                          |
| Semantic Kernel | 對 LLM Function Calling 依賴過高,1.7B 不穩定       |
| Redis           | 簡化架構,邊緣節點改用 SQLite,任務佇列改為同步處理 |
| 雲端 LLM API    | 離線環境無法使用(可保留為有網路時的備援)          |

---

## 2. 系統總體架構

圖檔: [ai_gen_docs/diagrams/system-architecture.mmd](ai_gen_docs/diagrams/system-architecture.mmd)

![1772445633474](image/AI_Agent_SA_v4/1772445633474.png)

### 2.1 架構總覽圖

```
              ┌──────────────────────────────────────────────────┐
              │                   客戶端層                        │
              │  機構整合平台      光學自動化設備      產線站點    │
              │  Web / Desktop     嵌入式 / 工控       HMI Edge  │
              └───────┬───────────────┬──────────────────┬───────┘
                      │ RESTful API   │                  │ WebSocket
                      └───────────────┴──────────────────┘
                                      │ LAN
         ┌────────────────────────────▼──────────────────────────┐
         │                  中央 AI 伺服器(專用機)               │
         │  M01 API Gateway (FastAPI :8000)                      │
         │  ├─ M04 AI 對話引擎 (Ollama + Qwen3-1.7B)            │
         │  ├─ M05 MCP 工具調用引擎 (規則引擎 + MCP SDK :8002)   │
         │  ├─ M02 知識庫管理 (AnythingLLM :3001 + pgvector)    │
         │  ├─ M06 邊緣同步服務 (:8001)                          │
         │  └─ M08 系統監控                                       │
         └─────────────────────────┬─────────────────────────────┘
                      LAN 同步通道 │
          ┌──────────────────────┬─┴────────────────────┐
          ↓                      ↓                       ↓
   研發工作站              光學自動化站              產線站點
   Ollama 1.7B             Ollama 1.7B              Ollama 1.7B
   pgvector 副本(唯讀)    pgvector 副本(唯讀)     pgvector 副本(唯讀)
   CAD MCP(本地)         量測 MCP(本地)          Log MCP + 告警推送
```

### 2.2 模組清單

| 模組 | 名稱               | 部署位置                         | 對外介面             |
| ---- | ------------------ | -------------------------------- | -------------------- |
| M01  | API Gateway 與認證 | 中央伺服器                       | REST API             |
| M02  | 知識庫管理         | 中央伺服器                       | REST API             |
| M03  | 文件向量化處理     | 中央伺服器(AnythingLLM 內部)   | 內部服務             |
| M04  | AI 對話引擎        | 所有節點                         | REST API(SSE 串流) |
| M05  | MCP 工具調用引擎   | 所有節點(工具依節點類型不同)   | REST API + 內部 SDK  |
| M06  | 邊緣節點同步服務   | 中央(服務端)/ 各邊緣(客戶端) | REST API             |
| M07  | 產線 Log 分析      | 產線站點                         | MQTT / WS / HTTP     |
| M08  | 系統監控           | 中央伺服器                       | REST API             |

### 2.3 關鍵約束條件

| 約束               | 內容                                                                      |
| ------------------ | ------------------------------------------------------------------------- |
| **模型上限** | Qwen3-1.7B;Function Calling 不穩定,改用規則引擎工具路由(詳見 §3.5)   |
| **離線需求** | 所有邊緣節點支援完全離線,恢復 LAN 後自動同步知識庫副本                   |
| **CAD 軟體** | AutoCAD、CATIA、Creo、NX、PROE、SolidWorks、中望(共 7 套,嚴格分期實作) |
| **容器化**   | 初期不使用 Docker,所有服務原生安裝於 Windows                             |
| **外出使用** | 研發筆電假設不需外出離線(可隨時連回 LAN)                                |

---

## 3. 模組設計與元件規格

### M01 — API Gateway 與使用者認證

```
目的:統一入口、JWT 鑒權、請求路由至各模組
技術:FastAPI (Python 3.11+) + PyJWT + bcrypt

角色定義:
  admin      → 系統管理、節點管理、模型配置
  kb_admin   → 知識庫文件 CRUD
  user       → 問答對話、工具調用
  api_client → 僅 API 存取(服務帳號,供各客戶端使用)

權限矩陣:
┌──────────────────┬─────────┬──────────┬──────┬────────────┐
│ 功能             │ admin   │ kb_admin │ user │ api_client │
├──────────────────┼─────────┼──────────┼──────┼────────────┤
│ 節點管理         │ ✅      │ ❌       │ ❌   │ ❌         │
│ 知識庫 CRUD      │ ✅      │ ✅       │ ❌   │ ❌         │
│ 文件上傳         │ ✅      │ ✅       │ ❌   │ ✅         │
│ 對話問答         │ ✅      │ ✅       │ ✅   │ ✅         │
│ MCP 工具調用     │ ✅      │ ✅       │ ✅   │ ✅         │
│ 系統監控         │ ✅      │ ✅       │ ❌   │ ❌         │
└──────────────────┴─────────┴──────────┴──────┴────────────┘
```

---

### M02 — 知識庫管理

```
目的:封裝 AnythingLLM API,提供統一知識庫管理介面
技術:FastAPI Proxy → AnythingLLM Server (:3001) + PostgreSQL + pgvector(主庫)

核心功能:
  1. 建立知識庫(Workspace)  POST /api/knowledge/workspace
  2. 上傳文件                  POST /api/knowledge/upload
  3. 語意搜尋                  GET  /api/knowledge/search
  4. 分類管理                  GET  /api/knowledge/categories
  5. 版本查詢                  GET  /api/knowledge/version

知識庫分類與同步範圍:
┌─────────────────┬──────────────────────────────┬────────────────┐
│ 分類 (scope)    │ 內容                          │ 同步到哪些節點 │
├─────────────────┼──────────────────────────────┼────────────────┤
│ common          │ 通用設計規範、材料手冊         │ 所有節點       │
│ engineering     │ 機構設計文件、CAD 指令說明     │ 研發工作站     │
│ optics          │ 光學設備手冊、量測規範         │ 光學自動化站   │
│ production      │ 產線 SOP、歷史異常案例         │ 產線站點       │
└─────────────────┴──────────────────────────────┴────────────────┘
```

---

### M03 — 文件向量化處理

圖檔: [ai_gen_docs/diagrams/document-import-flow.mmd](ai_gen_docs/diagrams/document-import-flow.mmd)

![1772445664656](image/AI_Agent_SA_v4/1772445664656.png)

```
目的:文件上傳後自動向量化,由 AnythingLLM 觸發,不需額外開發
技術:AnythingLLM 內建解析 + nomic-embed-text(透過 Ollama)

支援格式:
  直接向量化:    .txt .md .pdf .docx .csv
  提取文字後:    .dxf .dwg(提取標註文字 → 向量化)

向量化流程(全自動,由 AnythingLLM 管理):
  上傳文件
    → AnythingLLM 解析切段
    → Ollama nomic-embed-text 向量化(只跑一次,中央伺服器執行)
    → 寫入 PostgreSQL + pgvector 主庫
    → 更新版本號(格式:v{YYYYMMDD}-{序號})
    → 記錄差異文件 ID 到 PostgreSQL kb_versions 表
```

---

### M04 — AI 對話引擎

圖檔: [ai_gen_docs/diagrams/rag-chat-flow.mmd](ai_gen_docs/diagrams/rag-chat-flow.mmd)

![1772445693466](image/AI_Agent_SA_v4/1772445693466.png)

```
目的:帶知識庫 RAG 的 AI 對話,支援 SSE 串流回覆
技術:Ollama API (:11434) + Qwen3-1.7B + PostgreSQL + pgvector(邊緣節點本地 or 中央主庫)

對話流程:
  使用者問題
    → POST /api/chat(API Gateway 鑒權)
    → pgvector 語意搜尋(邊緣節點本地 or 中央主庫,依節點)
    → 組裝 Prompt(RAG 片段 + 對話歷史,≤ 2,000 tokens 建議值)
    → Ollama Qwen3-1.7B 生成回覆(SSE 串流輸出)
    → 儲存對話歷史(邊緣 SQLite / 中央 PostgreSQL)
    → 回傳回覆 + 引用來源清單

Context Window 管理:
  Qwen3-1.7B 支援 32K tokens,但建議送入量控制 ≤ 2,000 tokens
  產線 Log 場景:滑動視窗 5 分鐘 → 統計摘要 → 異常候選行 → LLM 分析
```

---

### M05 — MCP 工具調用引擎

圖檔: [ai_gen_docs/diagrams/mcp-tool-call-flow.mmd](ai_gen_docs/diagrams/mcp-tool-call-flow.mmd)

![1772445717383](image/AI_Agent_SA_v4/1772445717383.png)

```
目的:管理所有 MCP Server,提供工具調用能力
       補償 Qwen3-1.7B Function Calling 不穩定的核心機制
技術:Python MCP SDK + 規則路由引擎(intent_router.py)

⚠️ 架構原則:LLM 不做工具選擇決策,由規則引擎負責。

兩段式工具調用流程:
  使用者輸入
    → [規則引擎] 關鍵字比對 → 決定使用哪個 MCP 工具
    → [LLM] 從輸入中萃取執行所需參數(few-shot prompt 輔助)
    → [MCP SDK] 執行工具
    → [LLM] 組裝自然語言回覆

規則路由字典(intent_router.py 摘要):
┌───────────────────┬────────────────────────────────────────────┐
│ 意圖 key          │ 比對關鍵字(任一符合即觸發)               │
├───────────────────┼────────────────────────────────────────────┤
│ cad_query         │ 查詢指令、怎麼建立、如何繪製、CAD 指令     │
│ cad_execute       │ 幫我執行、建立螺孔、建立特徵、幫我在       │
│ pmi_create_project│ 建立專案、新增專案、建立 ECO               │
│ pmi_create_task   │ 建立任務、新增任務、指派工作               │
│ knowledge_search  │ 查詢、說明、什麼是、規範、標準             │
└───────────────────┴────────────────────────────────────────────┘
無比對 → 純 RAG 問答(不呼叫 MCP 工具)

已定義 MCP Server:
  cad/          → CAD MCP(部署於研發工作站)
  pmi/          → PMI/LPC MCP(部署於中央伺服器)
  measurement/  → 量測設備 MCP(部署於光學自動化站)
  log/          → Log 分析 MCP(部署於產線站點)
  knowledge/    → 知識庫查詢 MCP(所有節點)

各場景可靠度:
  RAG 知識庫查詢    ✅ 高   純文字,無 Function Calling
  CAD 指令查詢      ✅ 高   規則比對選工具,LLM 僅萃取關鍵字
  CAD 執行操作      ⚠️ 中  複雜參數需 few-shot prompt,加入確認步驟
  PMI/LPC 任務建立  ✅ 高   結構化欄位,few-shot 輔助
  量測數據整理      ✅ 高   模板驅動,LLM 做格式轉換
  產線 Log 分析     ✅ 高   規則 + 模式比對,LLM 生成摘要語言

升級路徑(無需修改 MCP 介面):
  VRAM ≥ 2.5GB → 換 Qwen3-4B → 部分場景可改回 Function Calling
  VRAM ≥ 4.5GB → 換 Qwen2.5-7B → 全面啟用 Function Calling
```

---

### M06 — 邊緣節點同步服務

圖檔: [ai_gen_docs/diagrams/knowledge-sync-flow.mmd](ai_gen_docs/diagrams/knowledge-sync-flow.mmd)

![1772445739661](image/AI_Agent_SA_v4/1772445739661.png)

```
目的:維護中央主庫與各邊緣節點 pgvector 副本的版本一致性
技術:FastAPI(同步服務端 :8001)+ Python 背景服務(客戶端)

同步流程:
  中央主庫文件更新 → 版本號遞增(v{YYYYMMDD}-{序號})
  邊緣客戶端每 5 分鐘 → GET /api/sync/check?node_id=...&current_version=...
  → 版本落後:中央同步服務查詢差異向量包
       SELECT id, document_id, content, embedding FROM document_vectors
        WHERE document_id = ANY(diff_ids) AND scope = ANY(node_scope)
  → 序列化為 JSON 陥列包(對小文件量 < 50MB。大量文件分批傳輸)
  → 邊緣節點收到向量包 → INSERT INTO document_vectors ... ON CONFLICT DO UPDATE
  → 回報 POST /api/sync/ack

離線期間:使用本地 pgvector 查詢,結果可能略舊
恢復連線:自動補同步,不需人工介入
```

---

### M07 — 產線 Log 分析

![1772445881706](image/AI_Agent_SA_v4/1772445881706.png)

```
目的:多通道收集設備 Log,LLM 分析異常模式,主動推送告警
技術:MQTT + WebSocket + HTTP 收集 + Qwen3-1.7B 分析 + WebSocket 推送

Log 收集通道:
  MQTT      → broker localhost:1883,topics: factory/+/log, factory/+/sensor
  WebSocket → port: 9001
  HTTP      → endpoint: /log/ingest

Context 壓縮策略(避免超過建議送入量):
  原始 Log → 滑動視窗(最近 5 分鐘)
  → 統計摘要(每類 Log 出現次數、最大/最小值)
  → 異常候選(僅保留偏離正常範圍條目)
  → 送給 LLM(壓縮至 < 2,000 tokens)

告警等級:
  critical  → LLM 判定嚴重 or 規則引擎觸發 → 立即 WebSocket 推送
  warning   → LLM 判定一般異常 → 記錄,累積每小時報表
  info      → LLM 判定正常 → 只記錄定期摘要
```

---

### M08 — 系統監控

```
目的:顯示各節點同步狀態、服務健康度、告警統計
技術:FastAPI REST API

端點:
  GET /api/system/health   → 各服務狀態(Ollama / AnythingLLM / PostgreSQL)
  GET /api/system/nodes    → 所有節點狀態、同步版本、最後上線時間
  GET /api/system/stats    → 對話數、工具調用數、告警數
```

---

## 4. 資料流程設計

### 4.1 文件匯入流程

```
文件負責人
  → AnythingLLM Web UI 上傳文件(:3001)
  → nomic-embed-text 自動向量化(中央伺服器執行)
  → 寫入 PostgreSQL + pgvector 主庫,版本號遞增
  → PostgreSQL kb_versions 記錄差異 document_ids
  → 邊緣節點下次同步時取得差異向量 SQL 包 → INSERT/UPDATE 本地 pgvector
```

### 4.2 AI 對話流程(RAG)

```
使用者問題
  → POST /api/chat(API Gateway JWT 鑒權)
  → pgvector 語意搜尋(邊緣節點本地 or 中央主庫)
  → 組裝 Prompt(RAG 片段 + 歷史,≤ 2,000 tokens)
  → Ollama Qwen3-1.7B(SSE 串流)
  → 儲存對話(SQLite / PostgreSQL)
  → 回傳回覆 + 引用來源
```

### 4.3 MCP 工具調用流程

```
使用者指令
  → POST /api/tool-call(API Gateway JWT 鑒權)
  → 規則引擎 intent_router:關鍵字比對 → 選定工具
  → LLM 參數萃取 prompt(few-shot)→ 取得結構化參數
  → MCP SDK → MCP Server → 實際工具執行
  → LLM 組裝自然語言回覆
  → 回傳結果 + 工具執行紀錄(工具名、參數、狀態、延遲)
```

### 4.4 邊緣離線問答流程

```
邊緣節點(LAN 斷線中)
  → 使用者問題 → POST /api/chat(本地 API Gateway)
  → 本地 pgvector 語意搜尋(邊緣節點 PostgreSQL)
  → 本地 Ollama Qwen3-1.7B 推理
  → 回傳結果(可能使用略舊的知識庫版本)

恢復 LAN 後:
  → 同步客戶端偵測到版本落後
  → 自動下載差異包,更新本地副本
```

---

## 5. API 介面規格

### 5.1 API 端點總覽

| 分類               | Method | 路徑                          | 說明                         |
| ------------------ | ------ | ----------------------------- | ---------------------------- |
| **健康檢查** | GET    | `/api/health`               | 服務狀態確認                 |
| **對話**     | POST   | `/api/chat`                 | RAG 問答(SSE 串流)         |
|                    | POST   | `/api/tool-call`            | MCP 工具調用問答             |
|                    | GET    | `/api/conversations`        | 對話歷史清單                 |
|                    | DELETE | `/api/conversations/{id}`   | 刪除對話                     |
| **知識庫**   | POST   | `/api/knowledge/upload`     | 文件上傳                     |
|                    | GET    | `/api/knowledge/search`     | 語意搜尋                     |
|                    | GET    | `/api/knowledge/categories` | 分類清單                     |
|                    | GET    | `/api/knowledge/version`    | 目前版本號查詢               |
| **同步**     | GET    | `/api/sync/check`           | 節點版本比對(邊緣節點呼叫) |
|                    | GET    | `/api/sync/patch`           | 下載差異向量包               |
|                    | POST   | `/api/sync/ack`             | 同步完成回報                 |
| **MCP 工具** | GET    | `/api/mcp/tools`            | 列出可用工具                 |
|                    | POST   | `/api/mcp/invoke`           | 直接調用指定工具             |
| **告警**     | WS     | `/ws/alerts`                | 訂閱產線告警推送             |
| **系統**     | GET    | `/api/system/health`        | 各服務狀態                   |
|                    | GET    | `/api/system/nodes`         | 節點狀態清單                 |
|                    | GET    | `/api/system/stats`         | 系統統計數據                 |

### 5.2 核心 API 詳細規格

#### POST `/api/chat` — RAG 問答(SSE 串流)

```json
// Request
{
  "query": "M8 螺絲的建議鎖固扭矩是多少?",
  "node_id": "ws-01",
  "conversation_id": "conv_abc123"
}

// Response(SSE 串流)
event: delta
data: {"content": "根據公司設計規範第三章,"}

event: delta
data: {"content": "M8 螺絲的建議扭矩為 25 N·m"}

event: done
data: {
  "conversation_id": "conv_abc123",
  "sources": [
    { "document": "機械設計規範_v3.2.pdf", "page": 42, "score": 0.94,
      "excerpt": "M8 鎖固扭矩:25 N·m(乾燥狀態)" }
  ],
  "model_used": "qwen3:1.7b",
  "latency_ms": 850
}
```

#### POST `/api/tool-call` — MCP 工具調用問答

```json
// Request
{
  "query": "幫我在 SolidWorks 的目前零件建立 M8 深 20mm 的螺孔",
  "node_id": "ws-01",
  "context": { "software": "SolidWorks", "version": "2024" }
}

// Response
{
  "answer": "已成功建立 M8 深度 20mm 的螺孔特徵(Feature ID: feat_001)",
  "tool_calls": [
    {
      "tool": "cad_execute_command",
      "args": { "software": "SolidWorks", "command": "InsertHole",
                "params": { "type": "M8", "depth": 20, "unit": "mm" } },
      "result": { "status": "success", "feature_id": "feat_001" },
      "latency_ms": 1850
    }
  ],
  "intent_matched": "cad_execute",
  "latency_ms": 2800
}
```

#### GET `/api/sync/check` — 節點版本比對

```json
// Request
GET /api/sync/check?node_id=ws-01&current_version=v20260228-003&scope=engineering

// Response(有差異)
{
  "status": "outdated",
  "latest_version": "v20260302-001",
  "diff_document_ids": ["doc_123", "doc_456"],
  "diff_size_bytes": 524288,
  "sync_url": "/api/sync/patch?ids=doc_123,doc_456"
}
```

---

## 6. 資料庫設計

![1772445929521](image/AI_Agent_SA_v4/1772445929521.png)

### 6.1 儲存架構總覽

| 儲存類型              | 技術                      | 位置       | 用途                                    |
| --------------------- | ------------------------- | ---------- | --------------------------------------- |
| 向量資料庫(主庫)    | PostgreSQL 15+ + pgvector | 中央伺服器 | 知識庫語意向量(Master)                |
| 向量資料庫(副本)    | PostgreSQL 15+ + pgvector | 各邊緣節點 | 離線知識庫查詢,差異 SQL 包同步         |
| 關聯式(中央 + 邊緣) | PostgreSQL 15+            | 所有節點   | 向量與關聯式統一一實例,不另安裝向量 DB |
| 對話歷史(邊緣)      | SQLite                    | 各邊緣節點 | 對話歷史、同步狀態(輕量輔助 DB)       |
| 原始媒體              | 本地磁碟 / NAS            | 中央伺服器 | 原始圖片、影片、DXF/DWG                 |

### 6.2 PostgreSQL 資料表(中央伺服器 + 邊緣節點均適用)

> **安裝 pgvector**:`CREATE EXTENSION IF NOT EXISTS vector;`
> **AnythingLLM 設定**:環境變數 `VECTOR_DB=pgvector`、`PGVECTOR_CONNECTION_STRING=postgresql://user:pass@localhost/anythingllm`

```sql
-- ① pgvector 擴充(各節點 PostgreSQL 均需執行)
CREATE EXTENSION IF NOT EXISTS vector;

-- ② 向量文件表(主庫完整版 / 副本僅存 scope 內資料)
CREATE TABLE document_vectors (
    id          UUID         PRIMARY KEY DEFAULT gen_random_uuid(),
    document_id VARCHAR(50)  NOT NULL,   -- 對應 kb_versions.document_ids 內的 ID
    scope       VARCHAR(50)  NOT NULL,   -- common / engineering / optics / production
    content     TEXT         NOT NULL,   -- 切段原文
    embedding   vector(768)  NOT NULL,   -- nomic-embed-text 輸出維度
    metadata    JSONB,                   -- { filename, page, category }
    created_at  TIMESTAMP    NOT NULL DEFAULT NOW()
);
CREATE INDEX ON document_vectors USING ivfflat (embedding vector_cosine_ops);
CREATE INDEX ON document_vectors (document_id);
CREATE INDEX ON document_vectors (scope);
```

```sql
-- ③ 邊緣節點管理(僅中央伺服器)
CREATE TABLE nodes (
    id                VARCHAR(50)  PRIMARY KEY,   -- "ws-01"
    type              VARCHAR(20)  NOT NULL,       -- engineering / optics / production
    scope             VARCHAR(50),                 -- 知識庫同步範圍
    last_seen         TIMESTAMP,
    last_sync_version VARCHAR(30),
    status            VARCHAR(20)  DEFAULT 'offline'
);

-- 知識庫版本紀錄
CREATE TABLE kb_versions (
    version      VARCHAR(30) PRIMARY KEY,          -- "v20260302-001"
    created_at   TIMESTAMP   NOT NULL DEFAULT NOW(),
    document_ids JSONB,
    description  TEXT
);

-- 告警紀錄
CREATE TABLE alerts (
    id              SERIAL      PRIMARY KEY,
    node_id         VARCHAR(50),
    severity        VARCHAR(20) NOT NULL,           -- critical / warning / info
    message         TEXT        NOT NULL,
    raw_excerpt     TEXT,
    created_at      TIMESTAMP   NOT NULL DEFAULT NOW(),
    acknowledged_at TIMESTAMP
);

-- MCP 工具調用日誌
CREATE TABLE tool_call_logs (
    id          SERIAL      PRIMARY KEY,
    node_id     VARCHAR(50),
    tool_name   VARCHAR(100),
    intent      VARCHAR(50),                        -- 規則引擎比對結果
    args        JSONB,
    result      JSONB,
    status      VARCHAR(20),                        -- success / error
    latency_ms  INT,
    created_at  TIMESTAMP   NOT NULL DEFAULT NOW()
);
```

### 6.3 SQLite 資料表(邊緣節點)

```sql
CREATE TABLE conversations (
    id         TEXT PRIMARY KEY,
    title      TEXT,
    created_at TEXT,
    updated_at TEXT
);

CREATE TABLE messages (
    id              TEXT PRIMARY KEY,
    conversation_id TEXT REFERENCES conversations(id),
    role            TEXT NOT NULL,         -- user / assistant
    content         TEXT NOT NULL,
    sources         TEXT,                  -- JSON:引用來源
    tool_calls      TEXT,                  -- JSON:工具調用紀錄
    latency_ms      INTEGER,
    created_at      TEXT
);

CREATE TABLE sync_state (
    key   TEXT PRIMARY KEY,
    value TEXT
    -- 記錄:current_version, last_sync_time, sync_status
);
```

---

## 7. 部署架構與環境規格

### 7.1 中央伺服器

**建議硬體規格**:CPU 8 核 / RAM 16GB / GPU VRAM 4GB+ / SSD 500GB

| 服務             | 技術                   | Port  | 說明                             |
| ---------------- | ---------------------- | ----- | -------------------------------- |
| API Gateway      | FastAPI (Python 3.11+) | 8000  | 統一入口、路由、JWT 鑒權         |
| 推理引擎         | Ollama + Qwen3-1.7B    | 11434 | LLM 推理 + nomic-embed-text 嵌入 |
| 知識庫管理       | AnythingLLM Server     | 3001  | 文件管理介面 + pgvector 主庫     |
| 邊緣同步服務     | FastAPI(子應用)      | 8001  | 差異計算、版本推送               |
| MCP Orchestrator | Python MCP SDK         | 8002  | MCP Server 統一調用              |

```
/opt/ai-agent/
├── gateway/          # FastAPI API Gateway
│   ├── main.py
│   └── routers/
│       ├── chat.py
│       ├── tool_call.py
│       ├── knowledge.py
│       └── sync.py
├── sync-service/     # 邊緣同步服務
│   ├── server.py
│   └── client.py
├── mcp-servers/
│   ├── knowledge/    # 知識庫查詢 MCP(所有節點)
│   ├── cad/          # CAD MCP(研發工作站)
│   │   ├── adapters/
│   │   │   ├── base.py        # ICADAdapter 抽象類別
│   │   │   ├── autocad.py     # Phase 1
│   │   │   ├── solidworks.py  # Phase 1
│   │   │   ├── catia.py       # Phase 2
│   │   │   └── nx.py          # Phase 2
│   │   └── server.py
│   ├── pmi/          # PMI/LPC MCP(中央伺服器)
│   ├── measurement/  # 量測設備 MCP(光學自動化站)
│   └── log/          # Log 分析 MCP(產線站點)
├── models/           # Ollama 模型存放
└── anythingllm/      # AnythingLLM 設定與資料
```

### 7.2 邊緣節點規格

| 節點類型     | 最低 VRAM | 本地服務                                            |
| ------------ | --------- | --------------------------------------------------- |
| 研發工作站   | 2GB       | Ollama 1.7B + PostgreSQL + pgvector 副本 + CAD MCP  |
| 光學自動化站 | 2GB       | Ollama 1.7B + PostgreSQL + pgvector 副本 + 量測 MCP |
| 產線站點     | 2GB       | Ollama 1.7B + PostgreSQL + pgvector 副本 + Log MCP  |

```
C:\ai-agent\
├── ollama\                # Ollama 執行檔與模型
├── postgresql\            # PostgreSQL 15 + pgvector(本地向量庫)
│   ├── data\              # DB 資料目錄
│   └── pg_hba.conf        # 僅允許本地連線
├── mcp-servers\
│   └── cad\               # 依節點類型安裝對應 MCP
├── sync-client\           # 同步客戶端(背景服務)
└── config.yaml            # 節點設定
```

```yaml
# config.yaml 範例(研發工作站)
node:
  id: "ws-01"
  type: "engineering"
  scope: ["common", "engineering"]

sync:
  server_url: "http://192.168.1.100:8001"
  check_interval_seconds: 300
  retry_on_failure: true

ollama:
  host: "http://localhost:11434"
  default_model: "qwen3:1.7b"
  embed_model: "nomic-embed-text"
  num_gpu_layers: 28       # 設計軟體未開啟時(1.7B 共 28 層)
  num_gpu_layers_low: 8    # 設計軟體高負載時

database:
  host: "localhost"
  port: 5432
  name: "ai_agent"
  user: "ai_agent"
  # 合併向量與關聯式資料庫,不另載其他向量 DB
  # 中央伺服器為完整主庫,邊緣節點仅存 scope 內的向量副本
```

---

## 8. 開發階段計畫

![1772445983647](image/AI_Agent_SA_v4/1772445983647.png)

### 8.1 總覽甘特圖

```
Phase 0: PoC 驗證     ██████░░░░░░░░░░░░░░░░░░░░░░░░░░  Week 1-3
Phase 1: 核心功能     ░░░░░░████████████░░░░░░░░░░░░░░  Week 4-7
Phase 2: 擴展場景     ░░░░░░░░░░░░░░░░░░██████████████  Week 8-12
Phase 3: 優化完整     ░░░░░░░░░░░░░░░░░░░░░░░░░░████████  Week 13-16
                      ──────────────────────────────────────
                      W1      W4      W7      W10     W13    W16
```

### 8.2 Phase 0 — PoC 驗證(Week 1–3)

> **目標**:驗證最核心技術鏈路(中央推理 + 邊緣副本 + 規則引擎 + AutoCAD MCP),確認可行性再展開。

| Task ID | 任務                                     | 產出物                                 | 工時估算 |
| ------- | ---------------------------------------- | -------------------------------------- | -------- |
| P0-T1   | 中央伺服器 Ollama + AnythingLLM 建置     | 推理服務可用、知識庫可上傳             | 2 天     |
| P0-T2   | 研發工作站邊緣節點安裝                   | Ollama 1.7B 可離線推理                 | 2 天     |
| P0-T3   | API Gateway 基礎骨架 + JWT               | `/api/chat`、`/api/tool-call` 可通 | 3 天     |
| P0-T4   | 規則引擎 intent_router + AutoCAD MCP PoC | 自然語言 → AutoCAD 指令成功           | 5 天     |
| P0-T5   | 知識庫上傳 + 邊緣副本同步驗證            | 差異同步可用、離線問答準確率 > 80%     | 3 天     |

**PoC 通過標準**:

- [ ] AutoCAD MCP 工具調用至少一個場景成功(規則引擎正確選工具)
- [ ] 離線狀態下知識庫查詢回應時間 < 5 秒
- [ ] 邊緣副本與主庫同步完成,版本一致

**決策點**:PoC 驗收後決定是否繼續 Phase 1,以及是否調整規則引擎字典完整度。

---

### 8.3 Phase 1 — 核心功能(Week 4–7)

> **目標**:研發工作站場景全部可試用(知識庫問答 + CAD MCP + PMI MCP + 邊緣離線)。

#### Sprint 1(Week 4–5):知識庫 + 對話核心

| Task ID | 功能                             | 驗收標準                                       |
| ------- | -------------------------------- | ---------------------------------------------- |
| T1-1    | M01 API Gateway 完整開發         | 所有端點可用,JWT 鑒權正確(401/403 回傳正確) |
| T1-2    | M02 知識庫管理 API(上傳、搜尋) | 上傳 PDF → 60 秒內完成向量化,可被查詢        |
| T1-3    | M04 對話引擎(RAG + SSE 串流)   | 問答回覆以 SSE 串流逐字顯示,含引用來源        |
| T1-4    | 對話歷史持久化(SQLite)         | 重新整理頁面後對話歷史保留                     |

#### Sprint 2(Week 6–7):MCP 工具 + 同步服務

| Task ID | 功能                              | 驗收標準                                    |
| ------- | --------------------------------- | ------------------------------------------- |
| T2-1    | M05 規則引擎 intent_router 完整版 | 所有意圖類型比對正確,無比對時走 RAG        |
| T2-2    | CAD MCP AutoCAD 完整適配器        | 指令查詢 + 執行操作均可用                   |
| T2-3    | CAD MCP SolidWorks 完整適配器     | 指令查詢 + 執行操作均可用                   |
| T2-4    | PMI/LPC MCP Server                | 建立/查詢/更新任務均可用                    |
| T2-5    | M06 邊緣同步服務完整開發          | 差異同步、版本號、ack 機制全部可用          |
| T2-6    | 研發工作站一鍵部署腳本            | `install-workstation.ps1` 10 分鐘完成安裝 |

> **Phase 1 交付物**:研發工作站場景可供試用,涵蓋 AutoCAD / SolidWorks MCP + PMI MCP + 知識庫問答 + 邊緣離線能力。

---

### 8.4 Phase 2 — 擴展場景(Week 8–12)

| Task ID | 功能                      | 前置條件                            | 驗收標準                      |
| ------- | ------------------------- | ----------------------------------- | ----------------------------- |
| T3-1    | M07 Log MCP(三通道收集) | 確認 Log 格式與頻率                 | MQTT / WS / HTTP 三通道均可收 |
| T3-2    | 主動告警推送(WebSocket) | T3-1 完成                           | 異常偵測後 < 3 秒推送         |
| T3-3    | 產線站點邊緣部署          | T3-2 完成                           | 離線 Log 分析可用             |
| T3-4    | 量測設備 MCP Server       | 確認設備 SDK 與文件                 | 自然語言設定量測參數成功      |
| T3-5    | 光學自動化站邊緣部署      | T3-4 完成                           | 離線量測分析可用              |
| T3-6    | CATIA MCP 適配器          | **確認 CAA V5 API 授權 ⚠️** | 基本指令查詢可用              |
| T3-7    | NX MCP 適配器             | **確認 NX Open 授權 ⚠️**    | 基本指令查詢可用              |
| T3-8    | M08 節點監控儀表板        | Phase 1 完成                        | 顯示所有節點同步狀態與版本    |

> **Phase 2 交付物**:三類邊緣節點全部可試用,產線告警上線,CATIA/NX 視授權確認後決定。

---

### 8.5 Phase 3 — 優化與完整(Week 13–16)

| Task ID | 任務                   | 說明                                    |
| ------- | ---------------------- | --------------------------------------- |
| P3-T1   | Creo / PROE MCP 適配器 | J-Link API 整合                         |
| P3-T2   | 中望 CAD MCP 適配器    | ZWCAD API 整合                          |
| P3-T3   | 效能優化與壓力測試     | 10 工作站同時離線查詢,回應 < 5 秒      |
| P3-T4   | 安全強化 + SOP 文件    | API 存取控制、本地資料加密              |
| P3-T5   | 多節點監控完整版       | 推理狀態、告警統計、工具調用成功率      |
| P3-T6   | 模型升級評估           | 若 VRAM 允許,評估換 4B/7B 移除規則引擎 |

### 8.6 里程碑總覽

| 里程碑 | 時間         | 交付物                       | 決策點                         |
| ------ | ------------ | ---------------------------- | ------------------------------ |
| M0     | Week 3 結束  | **PoC 驗收**           | 確認技術選型,決定繼續 Phase 1 |
| M1     | Week 7 結束  | **研發工作站場景上線** | 收集回饋,決定 Phase 2 優先序  |
| M2     | Week 12 結束 | **三類節點全部上線**   | 決定是否升級模型(4B / 7B)    |
| M3     | Week 16 結束 | **正式上線**           | —                             |

---

## 9. 人力配置與分工

### 9.1 團隊組成

| 角色           | 人數 | 職責                                                 | 投入比例    |
| -------------- | ---- | ---------------------------------------------------- | ----------- |
| SA / Tech Lead | 1    | 架構設計、技術決策、Code Review、跨模組協調          | 100%        |
| 後端工程師     | 2    | FastAPI Gateway、MCP Server 開發、同步服務           | 100%        |
| AI 工程師      | 1    | 規則引擎維護、Prompt 調優、RAG 效果優化、Ollama 調參 | 80%         |
| DevOps         | 1    | PowerShell 部署腳本、節點安裝、監控設定              | 50%(兼職) |
| QA             | 1    | 功能測試、MCP 工具場景測試                           | 50%(兼職) |

### 9.2 Phase 1 每週分工

```
              Week 4           Week 5           Week 6           Week 7
後端 A       T1-1 Gateway     T1-2 知識庫API   T2-2 CAD AutoCAD T2-5 同步服務
後端 B       T1-3 對話引擎    T1-4 歷史持久化  T2-3 CAD SolidWorks T2-6 部署腳本
AI 工程師    規則引擎設計      T2-1 intent_router T2-4 PMI MCP   Prompt 調優
DevOps       環境安裝驗收      config.yaml 模板  安裝腳本 v1     安裝腳本 v2
QA           測試案例設計      —               T1 整合測試       T2 整合測試
```

---

## 10. 驗收標準

### 10.1 功能驗收

| 編號  | 驗收項目            | 通過條件                                       |
| ----- | ------------------- | ---------------------------------------------- |
| AC-01 | 邊緣節點離線問答    | LAN 斷線後仍可查詢,回應時間 < 5 秒            |
| AC-02 | 知識庫副本自動同步  | 主庫更新後,節點恢復連線時自動補同步           |
| AC-03 | AutoCAD 指令查詢    | 自然語言查詢 → 規則引擎選工具 → 正確指令清單 |
| AC-04 | SolidWorks 操作執行 | 自然語言 → SW COM API 執行,操作成功          |
| AC-05 | PMI/LPC 任務建立    | 自然語言 → PMI 系統新增任務成功               |
| AC-06 | 產線 Log 異常偵測   | 異常 Log 注入 → 3 秒內 WebSocket 告警         |
| AC-07 | 量測數據整理報表    | 自然語言請求 → 匯出 CSV 報表成功              |
| AC-08 | 知識庫文件上傳      | 上傳 PDF → 60 秒內完成向量化,可被查詢        |
| AC-09 | MCP 工具選擇正確率  | 規則引擎比對正確率 ≥ 95%(基於測試語句集)    |

### 10.2 效能指標

| 指標                  | 目標值                             |
| --------------------- | ---------------------------------- |
| 一般問答首 Token 延遲 | 邊緣節點 ≤ 2 秒(Qwen3-1.7B)     |
| MCP 工具調用完成時間  | ≤ 4 秒(規則路由 + CAD API 呼叫) |
| 產線告警推送延遲      | 異常偵測後 ≤ 3 秒                 |
| 知識庫同步速度        | LAN 100Mbps 環境下 1GB < 2 分鐘    |
| 節點自動同步頻率      | 預設每 5 分鐘檢查一次              |

---

## 11. 風險評估

| 風險 ID | 描述                             | 嚴重度 | 應對策略                                                                |
| ------- | -------------------------------- | ------ | ----------------------------------------------------------------------- |
| R-01    | CATIA/NX API 需商業授權          | 🔴 高  | Phase 2 前優先確認授權;Phase 1 只做 AutoCAD/SolidWorks                 |
| R-02    | 各節點硬體差異,老設備 VRAM 不足 | 🟢 低  | 1.7B 僅需 ~2GB VRAM,硬體門檻已大幅降低                                 |
| R-03    | 知識庫副本同步在 LAN 不穩時失敗  | 🟡 中  | 副本唯讀設計、支援手動觸發、retry 3 次機制                              |
| R-04    | 產線 Log 量超過建議送入量        | 🟡 中  | 滑動視窗 + 統計摘要壓縮,送入 < 2,000 tokens                            |
| R-05    | 7 套 CAD API 差異大,開發工時高  | 🔴 高  | 嚴格分期,Phase 1 只做 AutoCAD/SolidWorks,每期驗收後評估 ROI           |
| R-06    | 設計軟體與 Ollama 共用 VRAM 衝突 | 🟡 中  | 動態調整 `OLLAMA_NUM_GPU_LAYERS`(28/8),提供快捷腳本切換            |
| R-07    | PMI/LPC 系統 API 未開放          | 🟡 中  | 事先確認 API 存取方式;備案為 RPA 自動化                                |
| R-08    | 1.7B Function Calling 不穩定     | 🔴 高  | 規則引擎補位(§3.5);PoC 驗證規則字典完整度;規則比對正確率列入 AC-09 |
| R-09    | 1.7B 複雜推理品質偏低            | 🟡 中  | 結構化 Prompt 模板;few-shot 示例;複雜指令加確認步驟                   |

---

## 12. 待釐清事項

在正式進入 Phase 0 前,以下問題需要確認:

| # | 問題                                        | 影響範圍                           | 優先度 |
| - | ------------------------------------------- | ---------------------------------- | ------ |
| 1 | 中央伺服器實際硬體規格(CPU / RAM / GPU)? | 決定可承載節點數量與服務穩定性     | 🟡 中  |
| 2 | 產線 Log 更新頻率(毫秒 / 秒 / 分鐘)?     | 決定 Log MCP 緩衝策略              | 🔴 高  |
| 3 | CATIA / NX 版本及 Developer API 授權狀況?  | 決定 Phase 2 CAD 整合可行性        | 🔴 高  |
| 4 | PMI/LPC 系統是否有開放 REST API 文件?      | 決定 PMI MCP 封裝方式(API / RPA) | 🟡 中  |
| 5 | 量測設備使用哪個廠商 SDK(是否有文件)?    | 決定量測 MCP 開發工時              | 🟡 中  |
| 6 | 各邊緣節點最低硬體規格(最老的設備)?      | 確認老設備是否達 ~2GB VRAM         | 🟢 低  |
| 7 | 知識庫文件預估數量與更新頻率?              | 決定同步頻率與副本大小             | 🟢 低  |

---

## 附錄:專案檔案結構

### 圖檔清單(`diagrams/`)

| 檔案名稱                     | 類型            | 對應章節       | 說明                                          |
| ---------------------------- | --------------- | -------------- | --------------------------------------------- |
| `system-architecture.mmd`  | flowchart (TB)  | §2.1          | 系統整體架構(中央伺服器 + 三類邊緣節點)     |
| `document-import-flow.mmd` | flowchart (TD)  | §3 M03, §4.1 | 文件匯入 → 解析 → 向量化 → 寫入 pgvector   |
| `rag-chat-flow.mmd`        | sequenceDiagram | §3 M04, §4.2 | RAG 對話流程(JWT → pgvector → LLM → SSE) |
| `mcp-tool-call-flow.mmd`   | sequenceDiagram | §3 M05, §4.3 | MCP 工具調用(規則引擎兩段式流程)            |
| `knowledge-sync-flow.mmd`  | sequenceDiagram | §3 M06, §4.4 | pgvector 差異同步(SQL 向量包 INSERT)        |
| `log-analysis-flow.mmd`    | flowchart (TD)  | §3 M07        | 產線 Log 分析與 WebSocket 告警推送            |
| `db-schema-er.mmd`         | erDiagram       | §6            | PostgreSQL + SQLite 資料表 ER 圖              |
| `development-gantt.mmd`    | gantt           | §8            | Phase 0–3 開發甘特圖(Week 1–16)           |

```
ai-agent-system/
├── docs/
│   ├── AI_Agent_SA_v4.md          # 本文件
│   └── diagrams/                  # .mmd 流程圖(共 8 個)
│       ├── system-architecture.mmd
│       ├── document-import-flow.mmd
│       ├── rag-chat-flow.mmd
│       ├── mcp-tool-call-flow.mmd
│       ├── knowledge-sync-flow.mmd
│       ├── log-analysis-flow.mmd
│       ├── db-schema-er.mmd
│       └── development-gantt.mmd
├── gateway/                       # FastAPI API Gateway
│   ├── main.py
│   └── routers/
│       ├── chat.py
│       ├── tool_call.py
│       ├── knowledge.py
│       └── sync.py
├── mcp-servers/
│   ├── knowledge/
│   ├── cad/
│   │   ├── adapters/
│   │   │   ├── base.py            # ICADAdapter 抽象類別
│   │   │   ├── autocad.py         # Phase 1
│   │   │   ├── solidworks.py      # Phase 1
│   │   │   ├── catia.py           # Phase 2
│   │   │   └── nx.py              # Phase 2
│   │   └── server.py
│   ├── pmi/
│   ├── measurement/
│   └── log/
├── sync-service/
│   ├── server.py                  # 中央同步服務端
│   └── client.py                  # 邊緣節點同步客戶端
└── deploy/
    ├── install-server.ps1
    ├── install-workstation.ps1
    ├── install-production.ps1
    └── config-templates/
        ├── workstation-config.yaml
        ├── optics-config.yaml
        └── production-config.yaml
```

---

> **文件狀態**:本文件為可執行的系統架構設計書,§3(模組規格詳細技術參數)與 §5(API 規格)的技術細節待 Phase 0 PoC 驗收後依實際結果更新。

*最後更新:2026-03-02(v4.0:以 v2.0 模組化架構為骨架,統一採用 v3.1 技術棧;簡化複雜度,移除 Docker / Semantic Kernel / Redis 依賴)*







Login to like - 0 Likes



Comments...


No Comments Yet...



Add Comment...



shumin

A graduated biotechnology engineer. Now is a software engineer


Latest Posts



Footer with Icons