Files
Document_Translator/PRD.md
2025-09-02 10:31:35 +08:00

337 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 產品需求文件 (PRD) - 文件翻譯 Web 系統
## 1. 產品概述
### 1.1 產品名稱
PANJIT Document Translator Web System
### 1.2 產品定位
企業級文件批量翻譯管理系統,提供 Web 化介面,支援多語言文件翻譯、使用者權限管理、任務排隊處理及成本追蹤功能。
### 1.3 目標使用者
- **主要使用者**: PANJIT 公司內部員工
- **管理員**: IT 部門管理人員 (ymirliu@panjit.com.tw)
### 1.4 核心價值
- 將現有桌面版翻譯工具轉換為 Web 服務
- 實現使用者工作隔離,每人只能查看自己的翻譯任務
- 自動化任務排隊與處理
- 完善的通知機制與成本管理
## 2. 功能需求
### 2.1 使用者認證與授權
#### 2.1.1 AD 帳號登入
- **需求描述**: 使用公司 AD (Active Directory) 帳號進行身份驗證
- **技術實現**: 使用 LDAP3 連接公司 AD 服務器
- **驗證流程**:
1. 使用者輸入 AD 帳號與密碼
2. 系統透過 LDAP 驗證身份
3. 成功後建立 Session記錄使用者資訊
4. 失敗則顯示錯誤訊息
#### 2.1.2 權限管理
- **一般使用者**: 只能查看和管理自己的翻譯任務
- **管理員** (ymirliu@panjit.com.tw):
- 查看所有使用者的任務
- 查看系統使用統計
- 查看 Dify API 成本報表
- 管理系統設定
### 2.2 文件上傳與管理
#### 2.2.1 檔案上傳
- **支援格式**: .docx, .doc, .pptx, .xlsx, .xls, .pdf
- **檔案大小限制**: 單檔最大 25MB
- **上傳介面**:
- 拖放上傳
- 點擊選擇檔案
- 顯示上傳進度
#### 2.2.2 翻譯設定
- **來源語言**: 自動偵測或手動選擇
- **目標語言**:
- 支援多選 (如: English, Vietnamese, Traditional Chinese 等)
- 記憶使用者偏好設定
- **翻譯格式**: 原文下接譯文(交錯排列)
### 2.3 任務排隊與處理
#### 2.3.1 排隊機制
- **排隊規則**:
- 按上傳時間順序 (FIFO)
- 每個任務獲得唯一 UUID
- 顯示當前排隊位置
- **處理方式**: 單檔依序處理,無並發
#### 2.3.2 任務狀態
- **PENDING**: 等待處理
- **PROCESSING**: 處理中
- **COMPLETED**: 完成
- **FAILED**: 失敗
- **RETRY**: 重試中
#### 2.3.3 錯誤處理與救援機制
- **重試策略**:
- 最多重試 3 次
- 重試間隔: 30秒、60秒、120秒
- **錯誤類型處理**:
- 網路錯誤: 自動重試
- API 配額超出: 暫停並通知管理員
- 檔案損壞: 標記失敗並通知使用者
- Dify 服務中斷: 等待並重試
### 2.4 翻譯處理
#### 2.4.1 翻譯引擎
- **API 服務**: Dify API (配置從 api.txt 讀取)
- **翻譯模式**: 句子級別翻譯並快取
- **快取機制**:
- 相同文本不重複翻譯
- 使用 MySQL 儲存快取
#### 2.4.2 成本追蹤
- **自動記錄**: 從 Dify API response metadata 取得實際使用量
- **成本欄位**:
- prompt_tokens: 使用的 token 數量
- prompt_unit_price: 單價
- prompt_price_unit: 價格單位
- 總成本自動計算
### 2.5 通知系統
#### 2.5.1 郵件通知
- **SMTP 設定**:
- 伺服器: mail.panjit.com.tw
- 埠號: 25
- 無需認證
- **通知時機**:
- 翻譯完成
- 翻譯失敗
- 重試超過次數
- **郵件內容**:
- 檔案名稱
- 翻譯狀態
- 下載連結(完成時)
- 錯誤訊息(失敗時)
### 2.6 檔案下載與清理
#### 2.6.1 檔案下載
- **驗證**: 確認使用者身份
- **格式**: 保持原檔案格式 (.docx, .pptx 等)
- **檔名**: {原檔名}_translated.{副檔名}
#### 2.6.2 自動清理
- **保留期限**: 7 天
- **清理規則**:
- 每日凌晨執行清理任務
- 刪除超過 7 天的原檔與譯文
- 記錄清理日誌
### 2.7 管理功能
#### 2.7.1 統計報表
- **使用量統計**:
- 每日/週/月 API 呼叫次數
- 各使用者使用量排行
- 文件類型分佈
- **成本分析**:
- Dify API 實際成本(從 metadata 取得)
- 按使用者的成本分配
- 成本趨勢圖表
#### 2.7.2 系統監控
- **隊列狀態**: 當前排隊任務數量
- **處理狀態**: 正在處理的任務
- **錯誤監控**: 錯誤率統計
- **API 健康度**: Dify API 連線狀態
#### 2.7.3 管理操作
- **手動重試**: 重試失敗的任務
- **任務管理**: 查看所有任務詳情
- **日誌查看**: 系統操作日誌
- **報表匯出**: Excel 格式匯出
## 3. 非功能需求
### 3.1 效能需求
- **檔案上傳**: 25MB 檔案應在 30 秒內完成上傳
- **API 回應**: 一般 API 請求應在 2 秒內回應
- **翻譯處理**: 依 Dify API 速度,通常每頁 10-30 秒
### 3.2 可用性需求
- **系統可用性**: 99% (排除計畫性維護)
- **錯誤恢復**: 系統異常後應能自動恢復
- **資料持久性**: 任務資料須持久化儲存
### 3.3 安全需求
- **身份驗證**: 必須透過 AD 驗證
- **工作隔離**: 使用者只能存取自己的檔案
- **傳輸安全**: 敏感資料需加密傳輸
- **檔案隔離**: 使用 UUID 建立獨立目錄
### 3.4 相容性需求
- **瀏覽器支援**: Chrome, Edge, Firefox 最新版本
- **作業系統**: Windows 環境優先
- **檔案格式**: 完整支援 Office 2016+ 格式
## 4. 技術規格
### 4.1 後端技術
- **框架**: Flask 3.0+
- **資料庫**: MySQL (使用現有環境)
- **任務隊列**: Celery + Redis
- **認證**: LDAP3
- **檔案處理**: python-docx, python-pptx, openpyxl, PyPDF2
### 4.2 前端技術
- **框架**: Vue 3 + Vite
- **UI 元件**: Element Plus
- **HTTP 客戶端**: Axios
- **路由**: Vue Router
### 4.3 資料庫設計
所有資料表使用 `dt_` 前綴:
- dt_users: 使用者資訊
- dt_translation_jobs: 翻譯任務
- dt_job_files: 檔案記錄
- dt_api_usage_stats: API 使用統計
- dt_system_logs: 系統日誌
- dt_translation_cache: 翻譯快取
### 4.4 API 設計
- **RESTful API**: 遵循 REST 原則
- **認證**: Session-based 或 JWT
- **回應格式**: JSON
- **錯誤處理**: 統一錯誤格式
## 5. 使用者介面
### 5.1 頁面結構
1. **登入頁**: AD 帳號登入表單
2. **首頁/上傳頁**: 檔案上傳與翻譯設定
3. **任務列表**: 個人任務狀態與管理
4. **歷史記錄**: 過去的翻譯記錄
5. **管理後台**: 統計報表(僅管理員)
### 5.2 互動設計
- **即時更新**: 任務狀態即時更新WebSocket 或輪詢)
- **進度顯示**: 顯示處理進度百分比
- **錯誤提示**: 友善的錯誤訊息
- **操作確認**: 重要操作需二次確認
## 6. 測試需求
### 6.1 單元測試
- API 端點測試
- 服務層邏輯測試
- 工具函數測試
### 6.2 整合測試
- LDAP 認證流程
- 檔案上傳下載流程
- 翻譯任務完整流程
- 郵件通知流程
### 6.3 系統測試
- 壓力測試:多使用者同時上傳
- 錯誤恢復測試
- 自動清理測試
## 7. 部署需求
### 7.1 開發環境
- Python 3.8+
- Node.js 16+
- MySQL 5.7+
- Redis 6+
### 7.2 部署方式
- 開發階段python app.py + npm run dev
- 生產環境Gunicorn + Nginx
### 7.3 環境變數
從 .env 檔案讀取:
- 資料庫連線資訊
- LDAP 設定
- SMTP 設定
- API 金鑰(從 api.txt
## 8. 專案時程
### 第一階段:基礎建設(第 1-2 週)
- 專案架構設計
- 資料庫建立
- 基礎 API 框架
- LDAP 認證實作
### 第二階段:核心功能(第 3-4 週)
- 檔案上傳功能
- 翻譯任務處理
- Celery 整合
- 錯誤處理機制
### 第三階段:前端開發(第 5-6 週)
- Vue.js 前端建立
- 使用者介面實作
- API 整合
### 第四階段:進階功能(第 7-8 週)
- 管理員功能
- 統計報表
- 自動清理機制
- 郵件通知
### 第五階段:測試與優化(第 9-10 週)
- 完整測試
- 效能優化
- 文件撰寫
- 部署準備
## 9. 風險評估
### 9.1 技術風險
- **Dify API 不穩定**: 實作完善的重試機制
- **大檔案處理**: 設定合理的檔案大小限制
- **LDAP 連線問題**: 實作連線池與重試
### 9.2 業務風險
- **成本超支**: 實時監控 API 使用量
- **資料外洩**: 嚴格的權限控制
- **系統當機**: 完善的錯誤恢復機制
## 10. 成功指標
### 10.1 功能指標
- 所有規劃功能 100% 實作
- 單元測試覆蓋率 > 80%
- 零重大安全漏洞
### 10.2 效能指標
- 系統可用性 > 99%
- API 回應時間 < 2
- 翻譯成功率 > 95%
### 10.3 使用者指標
- 使用者滿意度 > 90%
- 平均每日活躍使用者 > 20
- 問題回報數 < 5 /
## 11. 相關文件
- 原始程式碼document_translator_gui_with_backend.py
- API 配置api.txt
- 參考專案C:\Users\EGG\WORK\data\user_scrip\TOOL\TODOLIST
## 12. 修訂記錄
| 版本 | 日期 | 修改內容 | 作者 |
|------|------|---------|------|
| 1.0 | 2024-01-28 | 初始版本 | System |
---
**文件狀態**: 待審核
**下一步**: 提交給系統架構師進行技術設計文件(TDD)撰寫