AI_Agent系統_SA文件_v4

2026-03-27




# AI Agent 系統

 

## 系統分析文件(SA Document)

 

| 欄位               | 內容           |

| ------------------ | -------------- |

| **文件版本** | v2             |

| **撰寫日期** | 2026-03-06     |

| **負責單位** | 機構設計整合部 |

| **系統代號** | MEC-AI         |

| **機密等級** | 機構內部文件   |

 

---

 

## 目錄

 

1. [專案背景與目標](#1-專案背景與目標)

2. [系統架構](#3-系統架構設計)

3. [業務流程分析](#7-關鍵流程設計)

4. [技術選型分析](#4-技術選型分析)

5. [資料庫設計](#5-資料庫設計)

6. [API 規格設計](#6-api-規格設計)

7. [前端設計規格](#8-前端設計規格)

8. [MCP 工具設計](#9-mcp-工具設計)

9. [安全設計](#10-安全設計)

10. [離線環境部署指南](#11-離線環境部署指南)

11. [專案結構與開發計畫](#12-專案結構與開發計畫)

12. [可替代/降級策略](#13-可替代降級策略)

13. [待調查事項與後續建議](#14-待調查事項與後續建議)

14. [附錄:Mermaid 圖例清單](#15-附錄mermaid-圖例清單)

 

---

 

---

 

## 1. 專案概述

 

### 1.1 專案背景

 

機構設計整合部的研發同仁日常以 SolidWorks、CATIA 等 CAD 軟體進行機構設計作業,需頻繁查閱指令手冊、功能說明及教育訓練資料。現有資料散落於各處文件,查閱效率低落,且無法支援自然語言提問。

 

本系統目標是在**完全離線的內網環境**中,建構一套以 AI Agent 為核心的知識輔助系統,部署於研發同仁的 OA 筆電,向量資料庫部署於 Remote Server。

 

## 1.2 專案目標

 

| 目標              | 說明                                            |

| ----------------- | ----------------------------------------------- |

| 📖 CAD 知識問答   | 自然語言查詢 CAD 指令、快捷鍵、操作步驟         |

| 📁 知識庫管理     | 批次匯入技術文件(PDF/Word/圖片)並自動向量化 |

| 🔧 MCP 工具整合   | 透過 MCP 協議整合 CAD 工具與專家知識            |

| 🔒 資料在地化     | 所有資料與運算皆留存於機構內網,不外傳          |

| 🛠️ 可維護可擴展 | 全開源技術棧,任何具備 Python 基礎的人員可維護  |

 

## 1.3 核心功能

 

### FR-01:多輪對話問答

 

- 使用者可透過桌面應用程式與 AI Agent 進行自然語言對話,無需登入

- 支援上下文記憶,多輪對話保持脈絡

- 支援串流輸出,逐字顯示回應以降低等待感

 

### FR-02:CAD 工具輔助

 

- Agent 可自動識別 CAD 相關查詢,並呼叫對應工具取得專業回應

- 涵蓋指令名稱、功能說明、操作步驟與快捷鍵查詢

 

### FR-03:知識庫 RAG 問答

 

- 匯入的技術文件可透過語意搜尋供 Agent 引用

- 回答附帶引用來源(文件名稱、頁碼)

 

### FR-04:多模態輸入

 

- Agent 可接收使用者上傳的圖片,分析圖片內容並結合知識庫回答

 

### FR-05:稽核日誌

 

- 所有操作(對話、文件匯入、系統設定變更)皆記錄至稽核日誌,便於稽核追蹤

 

---

 

## 2. 系統架構設計

 

### 2.1 整體架構

 

02_architecture_system.mmd

 

### 2.2 元件說明

 

#### 2.2.1 Client Layer(研發繪圖筆電)

 

#### 前端

 

| 技術        | 版本   | 用途           | 選擇理由                                |

| ----------- | ------ | -------------- | --------------------------------------- |

| React       | 18     | 前端介面框架   | 組件生態成熟,TypeScript 型別安全支援佳 |

| TypeScript  | 5.x    | 前端靜態型別   | 提升程式碼可維護性並減少執行期錯誤      |

| Vite        | 5.x    | 前端建置工具   | 極速 HMR,開發體驗優於 Webpack          |

| TailwindCSS | 3.x    | 前端樣式框架   | Utility-first 設計,快速建構一致 UI     |

| shadcn/ui   | latest | 前端 UI 元件庫 | 無綁定設計系統,可完全自訂的 Radix 元件 |

 

#### 後端

 

| 技術                   | 版本   | 用途                | 選擇理由                                          |

| ---------------------- | ------ | ------------------- | ------------------------------------------------- |

| FastAPI Service        |        |                     |                                                   |

| Python                 | 3.11   | 後端執行環境        | 穩定 LTS 版本,AI/ML 生態系最完整                 |

| FastAPI                | 0.111+ | 後端 API 框架       | 原生 async/await,自動產生 OpenAPI 文件           |

| Uvicorn                | 0.29+  | ASGI 伺服器         | 高效能 async HTTP,配合 FastAPI 的最佳選擇        |

| Agent                  |        |                     |                                                   |

| LangGraph              | 0.3+   | Agent 狀態機引擎    | 以圖結構管理多步 Agent 流程,支援 Checkpoint      |

| LangChain              | 0.3+   | LLM 整合框架        | 統一 LLM/Tool/Memory 介面,生態豐富               |

| langchain-community    | 0.3+   | LangChain 社群擴充  | 提供 PDF loader、文件處理器等現成工具             |

| langchain-postgres     | 0.0.x  | PGVector 整合       | 官方維護的 PostgreSQL 向量儲存 LangChain 整合     |

| langchain-mcp-adapters | latest | MCP 工具整合        | 橋接 MCP 協定與 LangChain Agent 工具介面          |

| llama.cpp Server       |        |                     |                                                   |

| llama.cpp server       | latest | LLM 本地推理引擎    | MIT 授權、輕量單執行檔、GGUF 量化支援最完整       |

| 模型                   |        |                     |                                                   |

| Qwen2.5-VL             | 7B     | 對話 + 視覺語言模型 | 中文能力強,支援圖文多模態,7B 可在 4GB VRAM 執行 |

| nomic-embed-text       | -      | Embedding           | 高品質,繁中支援良好,MIT 授權                    |

 

##### MCP Tools

 

| 技術    | 版本   | 用途           | 選擇理由                                  |

| ------- | ------ | -------------- | ----------------------------------------- |

| mcp SDK | latest | MCP 伺服器通訊 | 官方 MCP Python SDK,提供標準工具呼叫協定 |

 

#### 2.2.2 Server Layer(整合部專用伺服器)

 

#### 資料庫

 

| 技術       | 版本 | 用途                    | 選擇理由                                        |

| ---------- | ---- | ----------------------- | ----------------------------------------------- |

| PostgreSQL | 16   | 關聯式資料庫 + 向量儲存 | 單一資料庫同時承擔結構化資料與向量搜尋          |

| pgvector   | 0.7+ | 向量搜尋擴充            | PostgreSQL 原生向量索引,無需額外向量資料庫服務 |

| SQLAlchemy | 2.0  | ORM 框架                | 成熟 ORM,支援 async 模式與 Alembic 遷移整合    |

| Alembic    | 1.x  | 資料庫遷移管理          | SQLAlchemy 官方遷移工具,版本控制 schema 變更   |

 

#### 文件匯入

 

| 技術          | 版本   | 用途              | 選擇理由                                  |

| ------------- | ------ | ----------------- | ----------------------------------------- |

| pymupdf4llm   | latest | PDF 解析          | 將 PDF 直接轉為 LLM 友好的 Markdown 格式  |

| unstructured  | 0.14+  | 非結構化文件解析  | 支援多種文件格式的統一解析介面            |

| Tesseract OCR | 5.x    | 圖片 OCR 文字識別 | 開源 OCR 引擎,支援中文識別,離線完整運作 |

| Pillow        | 10.x   | 圖片前處理        | 輕量圖片處理庫,用於 OCR 前的影像預處理   |

 

---

 

## 3. **業務流程分析**

 

本章依系統業務範疇,由整體到局部依序說明各主要流程的步驟、決策點與相關元件。

 

---

 

### 3.0 整體業務流程總覽

 

本系統為部署於研發繪圖筆電的**桌面應用程式**,使用者啟動應用程式後即可直接使用,無需登入認證。系統涵蓋兩大業務主線:**使用者對話**為核心高頻路徑,**知識庫文件匯入**為後台維運路徑(由管理人員定期執行)。

 

**各流程對應章節一覽**

 

| 編號 | 業務流程                      | 涉及主要元件                                     | 對應小節 |

| ---- | ----------------------------- | ------------------------------------------------ | -------- |

| 3.1  | 對話主流程(整體)            | Desktop App → FastAPI → LangGraph Agent → LLM | §3.1    |

| 3.2  | 意圖分類與工具路由            | LangGraph `classify_intent` 節點               | §3.2    |

| 3.3  | RAG 知識檢索流程              | pgvector、Reranker、Context 壓縮                 | §3.3    |

| 3.4  | CAD 工具呼叫流程              | MCP Server `cad_command_query`                 | §3.4    |

| 3.5  | 視覺分析流程                  | Qwen2.5-VL + RAG 混合                            | §3.5    |

| 3.6  | Context 管理與 Token 預算控制 | `manage_context`、`AsyncPostgresSaver`       | §3.6    |

| 3.3  | 批次文件匯入與向量化流程      | 排程執行 `document_import.py` → pgvector      | §3.3    |

| 3.8  | 稽核日誌記錄流程              | `audit_logs` 資料表                            | §3.8    |

 

---

 

### 3.1 對話主流程

 

使用者啟動桌面應用程式後,直接在 `ChatWindow` 輸入問題(可附帶圖片)。系統以 Server-Sent Events(SSE)串流方式逐字回傳 LLM 回應,回應完成後附帶引用文件來源。

 

> 流程圖:`docs/diagrams/03_flowchart_chat_main.mmd`

 

#### SSE 事件格式

 

| 事件類型    | 說明                      | 範例                                                                     |

| ----------- | ------------------------- | ------------------------------------------------------------------------ |

| `token`   | 每一個輸出 token          | `{"type":"token","content":"要"}`                                      |

| `sources` | 引用文件來源列表          | `{"type":"sources","documents":[{"filename":"SW手冊.pdf","page":42}]}` |

| `done`    | 完成訊號,附帶 session_id | `{"type":"done","session_id":"550e8400-..."}`                          |

| `error`   | 發生錯誤時推送            | `{"type":"error","message":"..."}`                                     |

 

---

 

### 3.2 意圖分類與工具路由

 

`classify_intent` 節點根據使用者輸入的語意特徵與是否含有圖片,決定後續應呼叫哪一條工具路徑。

 

> 流程圖:`docs/diagrams/03_flowchart_intent_classify.mmd`

 

#### 意圖分類規則

 

| 意圖類別     | 觸發條件                                                                    | 後續路徑                          |

| ------------ | --------------------------------------------------------------------------- | --------------------------------- |

| `cad_tool` | 問句包含「指令」「快捷鍵」「操作步驟」「功能」等關鍵詞,且指向特定 CAD 動作 | → §3.4 CAD 工具呼叫             |

| `rag`      | 問句涉及「如何」「說明」「什麼是」「教學」等,需要文件知識                  | → §3.3 RAG 知識檢索             |

| `vision`   | `image_base64` 非空(使用者上傳了圖片)                                   | → §3.5 視覺分析(可再銜接 RAG) |

| `general`  | 一般問候、閒聊、簡單計算等,不需要外部資料                                  | → 直接 `generate_response`     |

 

> **複合意圖**:`cad_tool` 與 `rag` 可同時啟動——MCP 工具取得結構化指令資料後,可進一步由 RAG 補充說明文件,兩者輸出合併後再送入 LLM。

 

---

 

### 3.3 RAG 知識檢索流程

 

RAG 流程以多層策略從 pgvector 知識庫取回最相關的文件片段,並在送入 LLM 前完成品質篩選與 token 預算控制。

 

> 流程圖:`docs/diagrams/03_flowchart_rag_retrieval.mmd`

 

#### RAG 核心策略說明

 

| 策略                                       | 說明                                          | 實作方式                                                    |

| ------------------------------------------ | --------------------------------------------- | ----------------------------------------------------------- |

| **Standard RAG(分塊檢索)**         | 對長文件進行 chunking,向量搜尋取相關片段     | `RecursiveCharacterTextSplitter` + pgvector               |

| **Pre-retrieval 篩選**               | 以 metadata 縮小檢索範圍,避免無關文件干擾    | `rag_retrieve` 節點前置條件 + SQLite `pre_filter_index` |

| **Post-retrieval Rerank**            | 對 top-k 召回片段進行語意重排                 | Cross-encoder 評分(`rerank_node`)                       |

| **Contextual Compression**           | 壓縮召回內容,精確控制送入 LLM 的 token 量    | `compress_context` 節點(`langextract` 類工具)         |

| **Multi-turn / Iterative Retrieval** | 複雜問題採多輪迭代檢索與 query 重寫           | LangGraph 迴圈邊(conditional loop)                        |

| **Self-RAG**                         | Agent 自我評估召回結果品質,決定是否重新檢索  | `assess_retrieval` 評估節點                               |

| **GraphRAG(進階,選用)**           | 知識圖結構,支援多跳推理(複雜 CAD 關聯分析) | NetworkX 知識圖 + pgvector 混合搜尋                         |

 

#### Prompt 組裝與輸出

 

成功完成檢索後,將以下資訊組裝為最終 Prompt:

 

- **召回片段**:Rerank+壓縮後的文件段落

- **MCP Skill 輸出**(若 `cad_tool` 與 `rag` 複合觸發)

- **對話歷史**:`manage_context` 處理後的 context window

 

LLM 回應完成後,記錄引用來源(文件名稱、頁碼)與信心度,一併以 SSE `sources` 事件推送給前端。

 

---

 

### 3.4 CAD 工具呼叫流程

 

當意圖為 `cad_tool` 時,LangGraph 透過 MCP Client 呼叫 CAD Tools MCP Server(Port 8100),取得結構化的指令資料。

 

> 流程圖:`docs/diagrams/03_flowchart_cad_tool.mmd`

 

#### MCP 工具清單

 

| 工具名稱                | 說明                                          | 必填參數                  |

| ----------------------- | --------------------------------------------- | ------------------------- |

| `cad_command_query`   | 查詢 CAD 指令名稱、快捷鍵、操作步驟與功能說明 | `software`、`keyword` |

| `cad_shortcut_lookup` | 查詢 CAD 軟體特定動作的鍵盤快捷鍵             | `software`、`action`  |

 

---

 

### 3.5 視覺分析流程

 

當使用者上傳圖片時(`image_base64` 非空),系統以 Qwen2.5-VL 視覺語言模型分析圖片,並可選擇性地結合 RAG 補充知識庫資料。

 

> 流程圖:`docs/diagrams/03_flowchart_vision.mmd`

 

---

 

### 3.6 Context 管理與 Token 預算控制

 

每一輪 LLM 呼叫前,`manage_context` 節點負責確保送入 LLM 的 context 不超過 token 上限,並根據剩餘預算動態決定 RAG 的 `top_k` 值。對話狀態以 `AsyncSqliteSaver` 持久化至 Client 本機 SQLite,支援應用程式重新啟動後恢復對話。

 

> 流程圖:`docs/diagrams/03_flowchart_context_mgmt.mmd`

 

#### SQLite 本機快取整合

 

在 `rag_retrieve` 節點執行前,先查詢 Client 端 SQLite 的 `pre_filter_index` 快取:

 

| 情況                        | 處理方式                                                   |

| --------------------------- | ---------------------------------------------------------- |

| 快取命中(TTL 未過期)      | 直接使用本機 doc_ids,減少遠端 pgvector 查詢成本           |

| 快取未命中或 TTL 過期       | 向 Server 端 pgvector 執行完整向量搜尋,結果非同步寫回快取 |

| Server 無法連線(離線模式) | 使用最後一次快取結果(降級模式),待連線恢復後批次同步     |

 

---

 

### 3.3 批次文件匯入與向量化流程

 

知識庫文件由管理員透過**排程自動執行**的獨立匯入程式(`document_import.py`)維護,定期掃描 Server 端指定目錄,逐檔完成解析、切分、Embedding 並寫入 pgvector。此程式不依賴 FastAPI 服務,可獨立排程執行(如 Windows 工作排程器 / Linux cron)。

 

> 流程圖:`docs/diagrams/03_flowchart_batch_import.mmd`

 

#### 觸發方式

 

| 方式                           | 說明                                                      |

| ------------------------------ | --------------------------------------------------------- |

| **排程自動執行**(主要) | 由 Windows 工作排程器或 cron 定期觸發,例如每日凌晨 02:00 |

| **手動執行**(需要時)   | 管理員於 Server 端直接執行 `python document_import.py`  |

 

#### 支援的文件格式

 

| 格式            | 解析工具                | 備註                                     |

| --------------- | ----------------------- | ---------------------------------------- |

| PDF             | `pymupdf`(安全模式) | 支援純文字 PDF 與帶圖 PDF;防止 PDF 注入 |

| Word(.docx)   | `python-docx`         | 提取段落與表格文字                       |

| Markdown(.md) | 直接讀取                | 保留結構標記                             |

| 純文字(.txt)  | 直接讀取                | —                                       |

 

---

 

### 3.8 稽核日誌記錄流程

 

所有會改變系統狀態的操作,均會在操作完成後非同步寫入 `audit_logs` 資料表,不阻塞主要業務流程。

 

> 流程圖:`docs/diagrams/03_flowchart_audit_log.mmd`

 

#### 觸發寫入的操作清單

 

| 操作類別 | 具體事件                    | 記錄欄位                          |

| -------- | --------------------------- | --------------------------------- |

| 對話     | 建立 Conversation、傳送訊息 | session_id, action, timestamp     |

| 文件     | 批次匯入啟動、完成、失敗    | job_id, action, detail, timestamp |

| 管理     | 系統設定變更、MCP 工具異動  | action, detail, timestamp         |

 

---

 

## 4. Use Case 分析

 

### 4.1 Use Case Diagram

 

01_use_case.mmd

 

---

 

### 4.2 核心功能清單

 

| UC-ID | Use Case 名稱    | 主要 Actor |

| ----- | ---------------- | ---------- |

| UC-01 | 自然語言多輪對話 | 研發同仁   |

| UC-02 | CAD 指令查詢     | 研發同仁   |

| UC-03 | RAG 知識庫問答   | 研發同仁   |

| UC-04 | 視覺圖片分析     | 研發同仁   |

| UC-05 | 對話歷史管理     | 研發同仁   |

| UC-06 | 批次文件匯入     | 管理員     |

| UC-07 | 系統狀態監控     | 管理員     |

 

---

 

## 5. 資料庫設計

 

> **Remote(PostgreSQL 16 + pgvector)**:部署於整合部 Server,儲存知識庫向量索引與批次匯入任務狀態。  

> **Client(SQLite)**:部署於研發繪圖筆電,儲存對話歷史、訊息紀錄、稽核日誌與 LangGraph 狀態。  

> ORM:**SQLAlchemy 2.0**(Async 模式)

 

### 5.1 資料表清單

 

#### Remote(PostgreSQL 16,整合部 Server)

 

| 資料表             | 說明                                       |

| ------------------ | ------------------------------------------ |

| `documents`        | 匯入文件的元資料(檔名、狀態、統計)       |

| `document_chunks`  | 向量化後的文件段落(含 pgvector 向量欄位) |

| `batch_jobs`       | 批次匯入任務狀態追蹤(排程程式維護)       |

 

#### Client(SQLite,研發繪圖筆電)

 

| 資料表                  | 說明                                          |

| ----------------------- | --------------------------------------------- |

| `conversations`         | 對話工作階段(Session)紀錄                   |

| `messages`              | 每則對話訊息(含 Agent 中間步驟)             |

| `audit_logs`            | 所有操作的稽核紀錄                            |

| `langgraph_checkpoints` | LangGraph 對話狀態 Checkpoint(框架自動管理) |

 

### 5.2 資料表詳細定義

 

---

 

#### (Remote PostgreSQL)`documents`

 

- **目的**:記錄批次匯入文件的元資料,包含檔名、類型、儲存路徑、處理狀態(`pending`  `processing`  `completed` / `failed`)及分段數量統計。

- **關聯**:一個文件對應多筆 `document_chunks`(向量段落);由 Remote 排程匯入程式寫入,無使用者外鍵。

 

```sql

CREATE TABLE documents (

    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    filename        VARCHAR(512) NOT NULL,

    file_type       VARCHAR(32) NOT NULL,   -- 'pdf' | 'docx' | 'md' | 'txt' | 'image'

    file_path       TEXT NOT NULL,

    file_size       INTEGER NOT NULL,       -- bytes

    status          VARCHAR(32) NOT NULL DEFAULT 'pending',

                                            -- 'pending' | 'processing' | 'completed' | 'failed'

    chunk_count     INTEGER DEFAULT 0,

    metadata        JSONB DEFAULT '{}',     -- 自訂標籤、分類等

    created_at      TIMESTAMPTZ NOT NULL DEFAULT NOW(),

    updated_at      TIMESTAMPTZ NOT NULL DEFAULT NOW()

);

```

 

#### (Remote PostgreSQL)`document_chunks`(核心向量表)

 

- **目的**:將文件切分後的段落與對應 768 維向量(`nomic-embed-text`)一起存放,為 RAG 檢索的核心資料來源;支援文字、圖片描述、表格等多種段落類型。

- **關聯**:`document_id`  `documents`(ON DELETE CASCADE);以 HNSW 索引(`vector_cosine_ops`)加速 pgvector 餘弦相似度搜尋。

 

```sql

-- 需先啟用 pgvector:CREATE EXTENSION IF NOT EXISTS vector;

 

CREATE TABLE document_chunks (

    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    document_id     UUID NOT NULL REFERENCES documents(id) ON DELETE CASCADE,

    content         TEXT NOT NULL,

    embedding       VECTOR(768),            -- nomic-embed-text 維度為 768

    chunk_index     INTEGER NOT NULL,

    page_number     INTEGER,

    chunk_type      VARCHAR(32) DEFAULT 'text',  -- 'text' | 'image_description' | 'table'

    metadata        JSONB DEFAULT '{}',

    created_at      TIMESTAMPTZ NOT NULL DEFAULT NOW()

);

 

-- 向量相似度索引(HNSW,適合中小型資料集)

CREATE INDEX idx_doc_chunks_embedding

    ON document_chunks

    USING hnsw (embedding vector_cosine_ops)

    WITH (m = 16, ef_construction = 64);

 

CREATE INDEX idx_doc_chunks_document_id ON document_chunks(document_id);

```

 

#### (Remote PostgreSQL)`batch_jobs`

 

- **目的**:追蹤 Remote 端排程批次文件匯入任務的執行狀態,記錄總檔案數、已處理數、失敗數及錯誤明細,供管理員查閱。

- **關聯**:與 `documents` 為間接關係(批次任務產生多筆文件記錄,透過應用層對應)。

 

```sql

CREATE TABLE batch_jobs (

    id                  UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    status              VARCHAR(32) NOT NULL DEFAULT 'pending',

                                            -- 'pending' | 'processing' | 'completed' | 'failed'

    source_path         TEXT NOT NULL,

    total_files         INTEGER NOT NULL DEFAULT 0,

    processed_files     INTEGER NOT NULL DEFAULT 0,

    failed_files        INTEGER NOT NULL DEFAULT 0,

    error_log           JSONB DEFAULT '[]',

    started_at          TIMESTAMPTZ,

    completed_at        TIMESTAMPTZ,

    created_at          TIMESTAMPTZ NOT NULL DEFAULT NOW()

);

```

 

---

 

#### (Client SQLite)`conversations`

 

- **目的**:記錄對話工作階段(Session),可儲存自訂 `system_prompt` 以調整 Agent 行為;儲存於 Client 本機 SQLite,無需登入即可使用。

- **關聯**:一個對話包含多則 `messages`。

 

```sql

CREATE TABLE conversations (

    id              TEXT PRIMARY KEY,       -- UUID 字串(SQLite 無原生 UUID)

    title           TEXT NOT NULL DEFAULT '新對話',

    system_prompt   TEXT,

    created_at      TEXT NOT NULL DEFAULT (datetime('now')),

    updated_at      TEXT NOT NULL DEFAULT (datetime('now'))

);

```

 

#### (Client SQLite)`messages`

 

- **目的**:儲存對話中每一則訊息,角色涵蓋 `user`、`assistant`、`system`、`tool`;`metadata` 欄位可附加 RAG 引用來源、工具呼叫結果等附加資訊;儲存於 Client 本機 SQLite。

- **關聯**:`conversation_id`  `conversations`(ON DELETE CASCADE);以 `conversation_id` 與 `created_at` 建立索引加速查詢。

 

```sql

CREATE TABLE messages (

    id                  TEXT PRIMARY KEY,

    conversation_id     TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,

    role                TEXT NOT NULL,      -- 'user' | 'assistant' | 'system' | 'tool'

    content             TEXT NOT NULL,

    metadata            TEXT DEFAULT '{}',  -- JSON 字串,含引用來源、工具呼叫結果

    created_at          TEXT NOT NULL DEFAULT (datetime('now'))

);

CREATE INDEX idx_messages_conversation_id ON messages(conversation_id);

CREATE INDEX idx_messages_created_at ON messages(created_at);

```

 

#### (Client SQLite)`audit_logs`

 

- **目的**:記錄本機操作行為(對話建立、文件匹配觸發、系統設定變更等),提供稽核追蹤;儲存於 Client 本機 SQLite,無使用者外鍵。

- **關聯**:獨立資料表,無外鍵依賴。

 

```sql

CREATE TABLE audit_logs (

    id              TEXT PRIMARY KEY,

    action          TEXT NOT NULL,          -- 'chat', 'upload', 'delete', etc.

    resource_type   TEXT,

    resource_id     TEXT,

    details         TEXT DEFAULT '{}',      -- JSON 字串

    created_at      TEXT NOT NULL DEFAULT (datetime('now'))

);

CREATE INDEX idx_audit_logs_created_at ON audit_logs(created_at);

```

 

### 5.3 向量搜尋查詢範例

 

```sql

-- RAG 檢索:以 query_embedding 搜尋最相似的 5 個文件段落

SELECT

    dc.content,

    dc.metadata,

    d.filename,

    dc.page_number,

    1 - (dc.embedding <=> $1::vector) AS similarity

FROM document_chunks dc

JOIN documents d ON dc.document_id = d.id

WHERE d.status = 'completed'

ORDER BY dc.embedding <=> $1::vector

LIMIT 5;

```

 

---

 

## 6. API 規格設計

 

> Base URL: `http://localhost:8000/api/v1`(Client 本機服務)

> 認證方式:無需登入,無 Token

> 回應格式:`Content-Type: application/json`

 

### 6.0 API 總覽

 

| 編號  | API 端點                              | Method | 操作             | 說明                                       | 對應資料表                                                 |

| ----- | ------------------------------------- | ------ | ---------------- | ------------------------------------------ | ---------------------------------------------------------- |

| 6.2.1 | `/chat/stream`                      | POST   | 串流對話         | SSE 串流回傳 AI 回應,支援圖片輸入         | `conversations`, `messages`, `langgraph_checkpoints` |

| 6.2.2 | `/chat/conversations`               | GET    | 取得對話列表     | 查詢本機所有對話工作階段                   | `conversations`                                          |

| 6.2.3 | `/chat/conversations/{id}/messages` | GET    | 取得對話訊息     | 查詢指定對話的所有訊息紀錄                 | `messages`                                               |

| 6.3.2 | `/documents/batch-import`           | POST   | 批次匯入         | 指定伺服器本地資料夾路徑進行批次匯入       | `documents`, `document_chunks`, `batch_jobs`         |

| 6.3.3 | `/documents/batch-jobs/{job_id}`    | GET    | 查詢批次任務狀態 | 查詢批次匯入任務的進度與錯誤狀況           | `batch_jobs`                                             |

| 6.4.1 | `/admin/system-status`              | GET    | 系統狀態         | 查詢 llama.cpp、資料庫、MCP 工具的運行狀態 | `documents`, `document_chunks`, `mcp_tools`          |

 

---


 

#### `POST /chat/stream` — 串流對話(Server-Sent Events)

 

```json

// Request

{

  "session_id": "550e8400-...",    // 可選,不傳則建立新對話

  "message": "SolidWorks 如何建立曲面特徵?",

  "image_base64": null              // 可選,含圖片時帶入 base64

}

 

// Response (SSE stream)

data: {"type": "token", "content": "要"}

data: {"type": "token", "content": "在"}

data: {"type": "token", "content": "SolidWorks"}

...

data: {"type": "sources", "documents": [{"filename": "SW手冊.pdf", "page": 42}]}

data: {"type": "done", "session_id": "550e8400-..."}

```

 

#### `GET /chat/conversations` — 取得對話列表

 

```json

// Response 200

{

  "conversations": [

    {

      "id": "550e8400-...",

      "title": "SolidWorks 曲面特徵詢問",

      "updated_at": "2026-03-03T10:30:00Z",

      "message_count": 5

    }

  ],

  "total": 12,

  "page": 1

}

```

 

#### `GET /chat/conversations/{id}/messages` — 取得對話訊息

 

```json

// Response 200

{

  "messages": [

    {

      "id": "...",

      "role": "user",

      "content": "SolidWorks 如何建立曲面特徵?",

      "created_at": "2026-03-03T10:30:00Z"

    },

    {

      "id": "...",

      "role": "assistant",

      "content": "要在 SolidWorks 建立曲面特徵...",

      "metadata": {

        "sources": [{"filename": "SW手冊.pdf", "page": 42}],

        "tool_used": "rag"

      },

      "created_at": "2026-03-03T10:30:05Z"

    }

  ]

}

```

 

---

 

### 6.3 Document API

 

#### `POST /documents/upload` — 單一文件上傳

 

```

// Request (multipart/form-data)

Content-Type: multipart/form-data

file: <binary>

metadata: {"category": "SolidWorks", "tags": ["曲面", "特徵"]}

 

// Response 202

{

  "document_id": "550e8400-...",

  "filename": "SW曲面特徵手冊.pdf",

  "status": "processing",

  "job_id": "job-uuid"

}

```

 

#### `POST /documents/batch-import` — 批次匯入(資料夾路徑,伺服器本地路徑)

 

```json

// Request

{

  "source_path": "D:\\documents\\cad_manuals\\",

  "file_extensions": ["pdf", "docx", "md"],

  "metadata": {"category": "CAD手冊"}

}

 

// Response 202

{

  "job_id": "batch-job-uuid",

  "total_files": 23,

  "status": "processing"

}

```

 

#### `GET /documents/batch-jobs/{job_id}` — 查詢批次任務狀態

 

```json

// Response 200

{

  "job_id": "batch-job-uuid",

  "status": "processing",

  "total_files": 23,

  "processed_files": 10,

  "failed_files": 1,

  "progress_percent": 43,

  "estimated_completion": "2026-03-03T10:45:00Z"

}

```

 

---

 

### 6.4 Admin API

 

#### `GET /admin/system-status` — 系統狀態

 

```json

// Response 200

{

  "llama_cpp": {

    "status": "running",

    "models": [

      {"name": "qwen2.5-vl:7b", "size_gb": 4.4, "loaded": true},

      {"name": "nomic-embed-text", "size_gb": 0.3, "loaded": true}

    ]

  },

  "database": {

    "status": "connected",

    "document_count": 145,

    "chunk_count": 8230

  },

  "mcp_tools": [

    {"name": "cad_command_query", "status": "running"}

  ]

}

```

 

#### `GET /admin/tools` — MCP 工具清單

 

```json

// Response 200

{

  "tools": [

    {

      "name": "cad_command_query",

      "description": "查詢 CAD 軟體的指令、快捷鍵與操作步驟",

      "server_url": "http://localhost:8100",

      "is_active": true,

      "parameters": {

        "software": "string (solidworks|catia|autocad)",

        "keyword": "string"

      }

    }

  ]

}

```

 

---

 

## 8. 前端設計規格

 

### 8.1 頁面架構

 

```

/                   主頁面(重新導向至 /chat)

/chat               對話主頁

  /chat/:id         特定對話工作階段

/documents          文件管理頁

```

 

### 8.2 主要元件

 

| 元件                             | 說明                                       |

| -------------------------------- | ------------------------------------------ |

| `<ChatWindow />`         | 對話主要介面,支援串流輸出顯示             |

| `<MessageItem />`         | 單則訊息,支援 Markdown 渲染、引用來源顯示 |

| `<Sidebar />`          | 對話歷史清單                               |

 

---

 

## 9. MCP 工具設計

 

### 9.1 MCP 架構說明

 

MCP(Model Context Protocol)是 Anthropic 制定的開放協議,用於讓 LLM 呼叫外部工具。LangGraph 透過 `langchain-mcp-adapters` 套件整合 MCP Server,使 Agent 可動態呼叫工具。

 

### 9.2 CAD Tools MCP Server(Port 8100)

 

**MCP Server 設計規格**(`backend/mcp_servers/cad_tools/server.py`):

 

- Server 名稱:`"cad-tools"`,以 `mcp.server.Server` 建立實例

- 實作兩個 handler:`list_tools()`(回傳工具清單及 JSON Schema)與 `call_tool()`(依工具名稱路由至對應查詢邏輯)

 

**工具清單(Tools)**:

 

| 工具名稱                | 說明                                                | 必填參數                                                                              |

| ----------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------- |

| `cad_command_query`   | 查詢 CAD 軟體的指令名稱、快捷鍵、操作步驟與功能說明 | `software`(`solidworks` \| `catia` \| `autocad`)、`keyword`(指令關鍵字) |

| `cad_shortcut_lookup` | 查詢 CAD 軟體的鍵盤快捷鍵                           | `software`、`action`(動作名稱)                                                  |

 

### 9.3 LangGraph 中的 MCP 整合

 

**MCP Client 整合規格**(`backend/app/mcp/client.py`):

 

- 使用 `langchain-mcp-adapters` 的 `MultiServerMCPClient`,支援同時連接多個 MCP Server

- 連線設定格式:`{ server_name: { url: str, transport: str } }`,`transport` 使用 `"streamable_http"`

- `client.get_tools()` 自動將所有 MCP Tools 轉換為 `LangChain BaseTool` 格式

- 轉換後的工具可直接注入 LangGraph Agent 節點,無需額外包裝

 

---

 

## 10. 安全設計

 

### 10.1 認證與授權

 

| 機制                         | 說明                                                                                                    |

| ---------------------------- | ------------------------------------------------------------------------------------------------------- |

| **JWT Token**      | 登入後取得 JWT,每個 API 請求需帶入 `Authorization: Bearer <token>`                          |

| **Token 有效期**     | 預設 8 小時,可在 `config.py` 中調整                                  |

| **密碼儲存**       | 使用 `passlib[bcrypt]` 進行 hash,不儲存明文密碼                               |

| **角色控制**       | `user` 可對話與上傳文件;`admin` 額外可管理使用者與系統設定                            |

 

### 10.2 輸入安全

 

| 威脅                                | 防護措施                                                    |

| ----------------------------------- | ----------------------------------------------------------- |

| **Prompt Injection**        | System Prompt 明確限制 Agent 行為範圍;使用者輸入與指令分開 |

| **路徑穿越攻擊**         | 批次匯入路徑僅允許管理員操作,且限制在白名單目錄內          |

| **超大檔案**          | API 層限制上傳檔案大小(預設 50MB)                         |

| **惡意 PDF**          | 使用 pymupdf 的安全模式解析,避免 PDF 注入                  |

 

### 10.3 稽核日誌

 

以下操作都會寫入 Client 機本的 `audit_logs` 資料表:

 

- 對話建立、訊息傳送

- 文件匹配觸發(RAG 检索)

- 系統設定變更、MCP 工具異動

 

### 10.4 資料隔離

 

- 對話紀錄儲存於 Client 本機 SQLite,筆電間自然隔離,無跨機器資料決漏風險

- 向量知識庫(Remote PostgreSQL)為全域共享(機構內部知識庫),不限制特定使用者

 

### 10.5 網路與 TLS 安全

 

| 機制                                               | 說明                                                                                                                                                            |

| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |

| **內網隔離**                                 | FastAPI 服務(Port 8000)與 llama.cpp server(Port 8080)在 Client 端本機執行,僅供筆電本機存取;不對外廣播                                                     |

| **TLS(內部 CA)**                           | 建議以機構內部 CA 簽發 HTTPS 憑證,加密 Client ↔ PostgreSQL 通訊                                                                                               |

| **端點最小開放**                             | Client 端防火牆僅開放 Port 8000(API,供 Browser 存取);Port 8080(llama.cpp server)限制為 localhost;Server 端 Port 5432(PostgreSQL)限制為內網,不對外開放 |

 

### 10.6 備份與加密策略

 

| 項目                              | 策略                                                                                            |

| --------------------------------- | ----------------------------------------------------------------------------------------------- |

| **資料庫備份**        | 每日排程執行 `pg_dump mechdesign_ai > backup_YYYYMMDD.sql`,保留 30 天                |

| **向量資料備份**        | `document_chunks` 向量欄位隨 `pg_dump` 一併備份,恢復時重新建立 HNSW 索引              |

| **原始文件備份**        | `D:\mechdesign-ai\storage\documents\` 目錄定期複製至備援硬碟                  |

| **磁碟加密(選用)**      | 視機構安全規範,可對伺服器磁碟啟用 BitLocker 加密                                               |

| **欄位加密(選用)**      | 高敏感欄位可加入 SQLAlchemy 欄位層加密                          |

 

---

 

## 11. 離線環境部署指南

 

> 📌 所有軟體需預先下載至安裝媒介(USB 隨身碟),在離線環境中安裝。

> 📌 本指南假設作業系統為 **Windows 11**(Client 端與 Server 端皆適用)。

> 📌 **部署分工**:PostgreSQL 安裝於 Server 端(整合部專用伺服器);llama.cpp、FastAPI、LangGraph、MCP Servers、前端皆安裝於 **Client 端(研發繪圖筆電)**。

 

### 11.1 Server 端安裝步驟(PostgreSQL)

 

#### Step 1:安裝 PostgreSQL 16

 

1. 下載 [PostgreSQL 16 Windows 安裝檔](https://www.postgresql.org/download/windows/)(`.exe`)

2. 安裝時設定:

         - Port: `5432`

         - 超級使用者密碼:建議使用強密碼

3. 安裝完成後,以 psql 啟用 pgvector:

 

```sql

-- 以 postgres 超級使用者連入

CREATE DATABASE mechdesign_ai;

\c mechdesign_ai

CREATE EXTENSION IF NOT EXISTS vector;

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

```

 

4. 安裝 pgvector Windows 版本:下載 [pgvector releases](https://github.com/pgvector/pgvector/releases) 的 Windows 二進位包,複製 `.dll` 至 PostgreSQL 的 `lib` 目錄,複製 `.control` 和 `.sql` 至 `share/extension` 目錄。

 

---

 

### 11.2 Client 端安裝步驟(研發繪圖筆電)

 

#### Step 1:安裝 Python 3.11

 

1. 下載 [Python 3.11 Windows 安裝檔](https://www.python.org/downloads/windows/)

2. 安裝時勾選「Add Python to PATH」

3. 確認安裝:`python --version`

 

#### Step 2:安裝 llama.cpp server

 

1. 從 [llama.cpp GitHub Releases](https://github.com/ggml-org/llama.cpp/releases) 下載 Windows 預編譯二進位包(`llama-*-bin-win-cuda*.zip`)

2. 解壓縮至目標目錄(如 `D:\llama.cpp\`)

3. 匯入模型(需在有網路的機器預先下載 GGUF 格式):

 

```powershell

# 有網路環境下載模型(使用 huggingface-cli 或直接下載 .gguf 檔)

# 例:Qwen2.5-VL-7B-Instruct-Q4_K_M.gguf

# 複製 .gguf 檔至離線機器的 D:\models\ 目錄

```

 

4. 啟動 llama.cpp server(監聽所有 IP):

 

```powershell

# 在系統服務或開機腳本中執行

D:\llama.cpp\llama-server.exe `

  --model D:\models\qwen2.5-vl-7b-q4_k_m.gguf `

  --ctx-size 8192 --n-gpu-layers 35 `

  --host 0.0.0.0 --port 8080 --parallel 4

```

 

#### Step 3:安裝 Node.js(前端建構用)

 

1. 下載 [Node.js LTS](https://nodejs.org/)(v20+)

2. 確認安裝:`node --version`

 

#### Step 4:安裝後端 Python 依賴

 

```powershell

# 在有網路的環境先下載所有套件

pip download -r requirements.txt -d ./offline_packages

 

# 在離線環境安裝

pip install --no-index --find-links=./offline_packages -r requirements.txt

```

 

**`requirements.txt`**:

 

```

fastapi

uvicorn[standard]

langchain

langgraph

langchain-community

langchain-openai

langchain-postgres

langchain-mcp-adapters

mcp

psycopg[binary,pool]

pgvector

sqlalchemy

alembic

pymupdf4llm

unstructured[pdf]

pillow

python-multipart

python-jose[cryptography]

passlib[bcrypt]

pydantic-settings

httpx

python-dotenv

```

 

#### Step 5:設定環境變數並初始化資料庫

 

```powershell

# 設定環境變數 .env(DATABASE_URL 指向 Server 端 PostgreSQL IP)

DATABASE_URL=postgresql+psycopg://postgres:yourpassword@<Server-IP>:5432/mechdesign_ai

LLAMA_CPP_BASE_URL=http://localhost:8080

SECRET_KEY=your-32-char-secret-key-here

CHAT_MODEL=qwen2.5-vl:7b

EMBED_MODEL=nomic-embed-text

STORAGE_PATH=D:\mechdesign-ai\storage

 

# 執行資料庫初始化

python scripts/init_db.py

```

 

#### Step 6:設定 Windows 服務自動啟動

 

使用 NSSM(Non-Sucking Service Manager)將後端服務設定為 Windows 服務:

 

```powershell

# 下載 NSSM,然後:

nssm install MechDesignAI-Backend "python" "-m uvicorn app.main:app --host 0.0.0.0 --port 8000"

nssm set MechDesignAI-Backend AppDirectory "D:\mechdesign-ai\backend"

nssm start MechDesignAI-Backend

 

# MCP Servers 同理

nssm install MechDesignAI-CAD-MCP "python" "mcp_servers/cad_tools/server.py"

nssm start MechDesignAI-CAD-MCP

```

 

#### Step 7:建構前端

 

```powershell

cd D:\mechdesign-ai\frontend

 

# 離線安裝前端依賴(需預先下載 node_modules)

npm install --offline

 

# 建構生產版本

npm run build

 

# dist/ 目錄即為靜態網頁,可由 FastAPI 提供靜態服務

# 或設定 Nginx 提供服務

```

 

---

 

### 11.3 客戶端(繪圖筆電)日常使用方式

 

完成 11.2 節安裝後,日常使用僅需啟動以下服務後開啟瀏覽器:

 

```powershell

# 1. llama.cpp server 與 FastAPI 已設為 Windows 服務(開機自動啟動)

# 2. 在瀏覽器開啟:

http://localhost:8000

# 或從其他筆電透過 IP 存取(需開放 Port 8000):

http://<Client-筆電-IP>:8000

```

 

> 建議使用 Chrome 或 Edge 最新版本。

 

---

 

### 11.4 設定防火牆

 

#### Client 端(研發繪圖筆電)防火牆設定

 

| Port | 用途                                                         |

| ---- | ------------------------------------------------------------ |

| 8000 | FastAPI(主要 API 服務,允許內網其他筆電存取)               |

| 8080 | llama.cpp server(推理服務,**限 localhost,不對外**) |

| 8100 | CAD MCP Server(**限 localhost,不對外**)             |

 

#### Server 端(整合部專用伺服器)防火牆設定

 

| Port | 用途                                                         |

| ---- | ------------------------------------------------------------ |

| 5432 | PostgreSQL(**僅限內網 Client 筆電存取,不對外開放**) |

 

---

 

## 12. 專案結構與開發計畫

 

### 12.1 專案目錄結構

 

```

mechdesign-ai/

├── backend/

│   ├── app/

│   │   ├── __init__.py

│   │   ├── main.py                 # FastAPI 應用入口

│   │   ├── config.py               # 設定(從 .env 讀取)

│   │   ├── api/

│   │   │   ├── deps.py             # 依賴注入(JWT 驗證、DB Session)

│   │   │   └── v1/

│   │   │       ├── auth.py         # 認證 API

│   │   │       ├── chat.py         # 對話 API(含 SSE 串流)

│   │   │       ├── documents.py    # 文件管理 API

│   │   │       └── admin.py        # 管理 API

│   │   ├── agent/

│   │   │   ├── graph.py            # LangGraph 狀態機定義

│   │   │   ├── nodes.py            # 各節點函數實作

│   │   │   ├── state.py            # AgentState TypedDict

│   │   │   └── prompts.py          # System Prompts

│   │   ├── rag/

│   │   │   ├── retriever.py        # pgvector 向量搜尋

│   │   │   └── chunker.py          # 文字分塊邏輯

│   │   ├── ingestion/

│   │   │   ├── pdf_processor.py    # PDF 解析(含視覺描述)

│   │   │   └── batch_importer.py   # 批次匯入排程

│   │   ├── mcp/

│   │   │   └── client.py           # MCP Client 初始化

│   │   ├── services/

│   │   │   └── llama_cpp_service.py   # llama.cpp API 封裝

│   │   └── models/

│   │       ├── database.py         # SQLAlchemy ORM 模型

│   │       └── schemas.py          # Pydantic Request/Response

│   ├── mcp_servers/

│   │   └── cad_tools/

│   │       ├── server.py           # CAD Tools MCP Server

│   │       └── cad_data/

│   │           ├── solidworks.json # SolidWorks 指令資料庫

│   │           ├── catia.json

│   │           └── autocad.json

│   ├── migrations/

│   │   └── init.sql                # 初始化 SQL 腳本

│   ├── scripts/

│   │   ├── setup_windows.ps1       # Windows 一鍵環境設定腳本

│   │   ├── init_db.py              # 資料庫初始化

│   │   └── batch_import.py         # CLI 批次匯入工具

│   ├── .env.example                # 環境變數範本

│   └── requirements.txt

├── frontend/

│   ├── src/

│   │   ├── App.tsx

│   │   ├── components/

│   │   │   ├── ChatWindow.tsx

│   │   │   ├── MessageItem.tsx

│   │   │   ├── ImageUpload.tsx

│   │   │   ├── DocumentList.tsx

│   │   │   ├── BatchImportForm.tsx

│   │   │   └── Sidebar.tsx

│   │   ├── pages/

│   │   │   ├── Chat.tsx

│   │   │   ├── Documents.tsx

│   │   │   └── Admin.tsx

│   │   └── api/

│   │       ├── client.ts           # axios/fetch 基礎設定

│   │       ├── chat.ts

│   │       └── documents.ts

│   ├── package.json

│   └── vite.config.ts

└── docs/

    ├── SA文件_機構設計AI_Agent系統.md  ← 本文件

    └── diagrams/

        ├── 01_use_case.mmd

        ├── 02_uml_class.mmd

        ├── 03_database_schema.mmd

        ├── 04_sequence_rag.mmd

        └── 05_sequence_upload.mmd

```

 

### 12.2 開發階段規劃

 

#### M1(第 0–2 週):需求確認與環境準備

 

- 明確 Client 與 Remote 的資源預算、network policy 與驗證方式

- Client 端環境安裝:llama.cpp server + Python 虛擬環境 + Node.js

- Server 端環境安裝:PostgreSQL 16 + pgvector

- 評估並在測試環境安裝 Foundry Local / LM Studio CLI,比較推理效能與 API 相容性

- FastAPI 框架搞建:骨架 API、Task Queue(DB table 實作)

- LangGraph Agent 基礎版(單輪問答,無 RAG)

- 資料庫 Schema 建立,Alembic 遷移管理

- **交付物**:可問答的基礎 API 服務

 

#### M2(第 3–6 週):文件匯入服務與批次上傳

 

- PDF 解析服務(pymupdf4llm + Tesseract OCR 掃描文件支援)

- 圖片視覺描述(Qwen2.5-VL),描述合併回 Markdown

- 文字分塊(RecursiveCharacterTextSplitter,chunk_size=512, overlap=64)

- Embedding 向量化(nomic-embed-text)並批次寫入 pgvector

- 完成 `POST /documents/upload` 與 `POST /documents/batch-import`

- 批次任務進度追蹤 `GET /documents/batch-jobs/{job_id}`

- **交付物**:可查詢內部文件的 RAG 問答 API(90% 批次成功率)

 

#### M3(第 7–10 週):RAG Pipeline 與 MCP/Skill 框架

 

- RAG 向量搜尋整合至 LangGraph(含 Pre-retrieval 篩選與 Post-retrieval Rerank)

- CAD Tools MCP Server 開發(SolidWorks 指令資料庫)

- CATIA、AutoCAD 指令資料庫建置

- LangGraph MCP 工具呼叫節點、意圖分類路由完整實作

- Client Local Agent Runtime 基礎版(SQLite 快取、MCP 工具清單 Metadata 管理)

- **交付物**:完整 Agent(RAG + MCP 工具選用)

 

#### M4(第 11–14 週):多模態支援與上下文策略

 

- 圖像 Embedding 支援(CLIP 或 Qwen2.5-VL 作為多模態 Encoder)

- React 對話介面、串流輸出顯示、圖片上傳功能

- 文件管理頁面(上傳、批次匯入、狀態追蹤)、系統管理頁面

- 上下文管理驗證(Pre/Post Retrieval、Iterative Retrieval、Self-RAG)

- 評估 `langextract` 類工具作為 token 濃縮步驟

- **交付物**:完整前後端整合版本

 

#### M5(第 15–18 週):安全性、備份與文件化

 

- TLS(內部 CA)設定、網路隔離確認

- 備份策略落地(pg_dump 排程、原始文件備份)

- 整合測試(各流程端到端)、效能調優

- Windows 一鍵部署腳本 `setup_windows.ps1`

- 使用者說明文件、部署手冊

- **交付物**:可交付的完整系統

 

### 12.3 里程碑概覽

 

| 里程碑           | 週次     | 說明                                              |

| ---------------- | -------- | ------------------------------------------------- |

| M1:環境就緒     | W0–W2   | llama.cpp server + PostgreSQL + pgvector 基礎問答 |

| M2:RAG 問答可用 | W3–W6   | 文件上傳、向量化、OCR、RAG 對話                   |

| M3:Agent 完整   | W7–W10  | MCP 工具整合、多模態支援、Local Agent Runtime     |

| M4:前端完整     | W11–W14 | UI 全功能、上下文管理策略驗證                     |

| M5:正式部署     | W15–W18 | 安全設定、備份、測試通過,離線環境部署完成        |

 

---


 







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