Files
ai-scoring-application/README.md
2025-09-24 00:08:09 +08:00

448 lines
12 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.

# AI 智能評審系統
一個基於 Next.js 和 Google Gemini AI 的智能評審平台支援多種格式內容上傳PPT、影片、網站連結並根據自定義評分標準進行 AI 智能評分。
## 🚀 功能特色
### 核心功能
- **多格式內容支援**:支援 PPT/PPTX、影片檔案、網站連結上傳
- **自定義評分標準**:可設定評分項目、權重比例和滿分標準
- **AI 智能評分**:使用 Google Gemini AI 進行內容分析和評分
- **詳細評分報告**:提供完整的評分結果、改進建議和行動計劃
- **PDF 報告生成**:可下載專業的 PDF 評分報告
- **歷史記錄管理**:追蹤所有評審記錄和統計數據
### 技術特色
- **現代化 UI**:基於 Radix UI 和 Tailwind CSS 的響應式設計
- **TypeScript**:完整的類型安全支援
- **資料庫整合**MySQL 資料庫存儲所有評審數據
- **PDF 生成**:使用 Puppeteer 生成專業 PDF 報告
- **文件處理**:支援 PPTX 解析和內容提取
## 🏗️ 技術架構
### 前端技術棧
- **框架**Next.js 14.2.16 (App Router)
- **語言**TypeScript 5
- **樣式**Tailwind CSS 4.1.9
- **UI 組件**Radix UI + shadcn/ui
- **字體**Geist Sans/Mono + Playfair Display
- **圖表**Recharts
### 後端技術棧
- **API**Next.js API Routes
- **資料庫**MySQL 8.0
- **ORM**mysql2 (原生 SQL)
- **AI 服務**Google Generative AI (Gemini 1.5 Pro)
- **PDF 生成**Puppeteer 24.22.1
- **文件處理**adm-zip, mammoth
### 開發工具
- **包管理**pnpm
- **代碼規範**ESLint
- **類型檢查**TypeScript
- **部署**Vercel Analytics
## 📁 專案結構
```
ai-scoring-application/
├── app/ # Next.js App Router
│ ├── api/ # API 路由
│ │ ├── criteria-templates/ # 評分標準模板 API
│ │ ├── evaluate/ # 評審 API
│ │ ├── evaluation/ # 評審記錄 API
│ │ ├── history/ # 歷史記錄 API
│ │ └── upload/ # 文件上傳 API
│ ├── criteria/ # 評分標準頁面
│ ├── history/ # 歷史記錄頁面
│ ├── results/ # 評分結果頁面
│ ├── upload/ # 文件上傳頁面
│ ├── layout.tsx # 根佈局
│ ├── page.tsx # 首頁
│ └── globals.css # 全域樣式
├── components/ # React 組件
│ ├── ui/ # UI 組件庫
│ ├── sidebar.tsx # 側邊欄
│ ├── share-modal.tsx # 分享模態框
│ └── theme-provider.tsx # 主題提供者
├── lib/ # 核心庫
│ ├── services/ # 業務邏輯服務
│ │ ├── database.ts # 資料庫服務
│ │ ├── gemini.ts # Gemini AI 服務
│ │ └── evaluation-upload.ts # 評審上傳服務
│ ├── utils/ # 工具函數
│ │ ├── html-pdf-generator.ts # PDF 生成器
│ │ ├── pdf-generator.ts # 舊版 PDF 生成器
│ │ └── file-path.ts # 文件路徑工具
│ ├── models/ # 資料模型
│ ├── config.ts # 配置管理
│ └── database.ts # 資料庫連接
├── database/ # 資料庫相關
│ ├── schema.sql # 資料庫架構
│ └── README.md # 資料庫說明
├── public/ # 靜態資源
├── uploads/ # 上傳文件存儲
├── data/ # 示例數據
├── examples/ # 示例代碼
├── hooks/ # React Hooks
├── styles/ # 額外樣式
├── package.json # 專案依賴
├── tsconfig.json # TypeScript 配置
├── next.config.mjs # Next.js 配置
├── tailwind.config.js # Tailwind 配置
└── README.md # 專案說明
```
## 🗄️ 資料庫架構
### 核心資料表
#### 用戶管理
- `users` - 用戶基本資訊
- `user_sessions` - 用戶會話管理
#### 評分標準
- `criteria_templates` - 評分標準模板
- `criteria_items` - 評分項目明細
#### 專案管理
- `projects` - 評審專案
- `project_files` - 專案文件
- `project_websites` - 專案網站連結
#### 評審記錄
- `evaluations` - 評審記錄
- `evaluation_scores` - 評分結果明細
- `evaluation_feedback` - AI 評語和建議
#### 系統設定
- `system_settings` - 系統配置參數
### 預設評分標準
系統預設包含 5 個評分項目:
1. **內容品質** (25%) - 內容的準確性、完整性和專業度
2. **視覺設計** (20%) - 版面設計、色彩搭配和視覺效果
3. **邏輯結構** (20%) - 內容組織的邏輯性和條理性
4. **創新性** (15%) - 創意思維和獨特觀點的展現
5. **實用性** (20%) - 內容的實際應用價值和可操作性
## 🔧 安裝與設定
### 環境需求
- Node.js 18+
- pnpm 8+
- MySQL 8.0+
- Chrome 瀏覽器 (用於 PDF 生成)
### 1. 克隆專案
```bash
git clone <repository-url>
cd ai-scoring-application
```
### 2. 安裝依賴
```bash
pnpm install
```
### 3. 環境變數設定
複製 `env.example``.env.local` 並設定以下變數:
```env
# 應用配置
NEXT_PUBLIC_APP_URL=http://localhost:12024
NEXT_PUBLIC_APP_NAME=AI 智能評審系統
# 資料庫配置
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_AI_scoring
DB_USER=root
DB_PASSWORD=your_password
# AI 配置
GEMINI_API_KEY=your_gemini_api_key
GEMINI_MODEL=gemini-1.5-pro
GEMINI_MAX_TOKENS=8192
```
### 4. 資料庫初始化
```bash
# 初始化資料庫結構
pnpm run db:init
# 測試資料庫連接
pnpm run db:test
# 檢查配置
pnpm run config:check
```
### 5. 安裝 Puppeteer Chrome
```bash
npx puppeteer browsers install chrome
```
### 6. 啟動開發伺服器
```bash
pnpm run dev
```
應用將在 `http://localhost:12024` 啟動。
## 🚀 部署
### Vercel 部署
1. 將專案推送到 GitHub
2. 在 Vercel 中導入專案
3. 設定環境變數
4. 部署完成
### 自託管部署
```bash
# 建構專案
pnpm run build
# 啟動生產伺服器
pnpm run start
```
## 📖 API 文檔
### 評分標準模板 API
#### 獲取所有模板
```
GET /api/criteria-templates
```
#### 獲取預設模板
```
GET /api/criteria-templates/default
```
#### 獲取特定模板
```
GET /api/criteria-templates/[id]
```
### 文件上傳 API
#### 上傳文件
```
POST /api/upload
Content-Type: multipart/form-data
Body:
- files: File[] (支援多檔案上傳)
- projectTitle: string
- projectDescription: string
- templateId: number
```
### 評審 API
#### 開始評審
```
POST /api/evaluate
Content-Type: application/json
Body:
{
"projectId": number,
"templateId": number
}
```
#### 獲取評審結果
```
GET /api/evaluation/[id]
```
#### 下載 PDF 報告
```
GET /api/evaluation/[id]/download
```
#### 刪除評審記錄
```
DELETE /api/evaluation/[id]/delete
```
### 歷史記錄 API
#### 獲取歷史記錄
```
GET /api/history
Query Parameters:
- page: number (預設 1)
- limit: number (預設 20)
```
#### 獲取統計數據
```
GET /api/history/stats
```
## 🎯 使用流程
### 1. 設定評分標準
- 進入「評分標準」頁面
- 選擇或創建評分標準模板
- 設定評分項目和權重比例
### 2. 上傳內容
- 進入「上傳文件」頁面
- 填寫專案資訊(標題、描述)
- 選擇評分標準模板
- 上傳 PPT/影片文件或提供網站連結
### 3. AI 分析評分
- 系統自動提取內容
- 使用 Gemini AI 分析內容
- 根據評分標準進行評分
- 生成詳細的評分結果
### 4. 查看結果
- 進入「評分結果」頁面查看詳細評分
- 瀏覽各項評分和 AI 評語
- 查看改進建議和行動計劃
- 下載 PDF 報告
### 5. 歷史管理
- 在「歷史記錄」頁面查看所有評審記錄
- 追蹤評分統計和趨勢
- 重新查看過往評審結果
## 🔍 核心功能詳解
### AI 評分流程
1. **內容提取**:從 PPT/影片/網站中提取文字內容
2. **AI 分析**:使用 Gemini AI 分析內容質量
3. **標準對照**:根據設定的評分標準進行評分
4. **結果生成**:產生詳細的評分報告和改進建議
### PDF 報告生成
- 使用 Puppeteer 生成專業 PDF 報告
- 包含完整的評分結果、圖表和建議
- 支援中文排版和專業格式
- 可自定義報告樣式
### 文件處理能力
- **PPTX 解析**:提取幻燈片文字內容
- **影片支援**:處理影片檔案上傳
- **網站分析**:分析網站內容
- **多格式支援**:支援多種文件格式
## 🛠️ 開發指南
### 添加新的評分標準
1. 在資料庫中添加新的 `criteria_items`
2. 更新 `criteriaNameToId` 映射
3. 測試評分功能
### 自定義 AI 提示詞
修改 `lib/services/gemini.ts` 中的 `buildScoringPrompt` 方法
### 添加新的文件格式支援
1.`GeminiService.extractPPTContent` 中添加新的解析邏輯
2. 更新文件類型檢查
3. 測試內容提取功能
### 自定義 PDF 模板
修改 `lib/utils/html-pdf-generator.ts` 中的 HTML 模板
## 🐛 故障排除
### 常見問題
#### 1. Puppeteer Chrome 錯誤
```
Error: Could not find Chrome
```
**解決方案**
```bash
npx puppeteer browsers install chrome
```
#### 2. 資料庫連接失敗
檢查環境變數設定:
```bash
pnpm run db:test
```
#### 3. Gemini API 錯誤
確認 API Key 是否正確設定:
```bash
pnpm run config:check
```
#### 4. 文件上傳失敗
檢查文件大小和格式限制:
- 最大文件大小100MB
- 支援格式ppt, pptx, pdf, mp4, avi, mov, wmv, flv, webm
### 日誌調試
應用使用 `console.log` 輸出詳細的調試信息,可以在瀏覽器開發者工具和伺服器終端中查看。
## 📊 性能優化
### 資料庫優化
- 使用連接池管理資料庫連接
- 建立適當的索引提升查詢性能
- 使用事務確保數據一致性
### AI 處理優化
- 實現請求超時機制
- 添加錯誤重試邏輯
- 優化提示詞減少 Token 消耗
### 前端優化
- 使用 React.memo 減少不必要的重新渲染
- 實現虛擬滾動處理大量數據
- 使用 Next.js 圖片優化
## 🔒 安全考量
### 數據安全
- 所有用戶輸入都經過驗證和清理
- 使用參數化查詢防止 SQL 注入
- 文件上傳限制和類型檢查
### API 安全
- 實現請求頻率限制
- 添加身份驗證機制
- 敏感信息不在客戶端暴露
## 🤝 貢獻指南
1. Fork 專案
2. 創建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 開啟 Pull Request
## 📝 更新日誌
### v1.0.0 (2024-01-15)
- ✨ 初始版本發布
- 🎯 支援 PPT/影片/網站連結上傳
- 🤖 整合 Gemini AI 評分
- 📊 完整的評分報告系統
- 📄 PDF 報告生成功能
## 📄 授權條款
本專案採用 MIT 授權條款 - 查看 [LICENSE](LICENSE) 文件了解詳情。
## 📞 技術支援
如有問題或建議,請:
- 提交 [Issue](https://github.com/your-repo/issues)
- 發送郵件至your-email@example.com
- 查看 [Wiki](https://github.com/your-repo/wiki) 獲取更多文檔
---
**AI 智能評審系統** - 讓 AI 為您的內容提供專業評審 🚀