dramaling-vocab-learning/note/interactive-word-query-syst...

795 lines
26 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 互動式單字查詢系統 - 完整功能規格
**項目**: DramaLing 英語學習平台
**功能模組**: 智能句子分析與互動式單字查詢
**版本**: v1.0
**文檔日期**: 2025-01-18
## 🎯 功能概述
AI 互動式單字查詢系統是一個智能英語學習工具,允許用戶輸入英文句子,獲得 AI 驅動的完整分析,並通過點擊單字的方式進行深度學習。系統具備語法修正、高價值詞彙標記、成本優化和快取機制。
## 📋 核心功能特性
### 🔍 主要功能
1. **智能句子分析**: Gemini AI 驅動的句子翻譯和解釋
2. **語法自動修正**: 檢測並建議語法錯誤修正
3. **互動式單字查詢**: 點擊任何單字即時查看詳細信息
4. **高價值詞彙標記**: AI 識別重要學習詞彙(免費查詢)
5. **成本優化設計**: 低價值詞彙收費查詢,防止濫用
6. **24小時快取機制**: 避免重複 AI 調用,提升響應速度
7. **使用額度管理**: 免費用戶 3 小時內限制 5 次分析
### 🎨 用戶體驗特色
- **即時回饋**: 新句子 3-5 秒,快取結果 <200ms
- **視覺化快取狀態**: 清楚顯示結果來源AI/快取
- **智能語法提示**: 主動發現和修正語法錯誤
- **分層收費模式**: 高價值詞彙免費低價值詞彙收費
## 🔄 用戶流程圖 (User Flow)
```
[1. 用戶登入]
[2. 進入分析頁面 (/generate)]
[3. 選擇輸入模式]
├── ✍️ 手動輸入 (最多300字)
└── 📷 影劇截圖 (Phase 2, 付費功能)
[4. 輸入英文文字]
├── 即時字數統計
├── 顏色警告 (280字+黃色, 300字+紅色)
└── 輸入驗證
[5. 點擊「🔍 分析句子」]
├── 檢查使用額度 (免費用戶 5次/3小時)
├── 顯示載入狀態 "正在分析句子... (AI 分析約需 3-5 秒)"
└── 調用後端 API
[6. 後端處理邏輯]
├── 檢查快取 (24小時TTL)
│ ├── Cache Hit → 立即返回 (💾 快取結果)
│ └── Cache Miss → 調用 Gemini AI (🤖 AI 分析)
├── 語法檢查和修正
├── 高價值詞彙標記
└── 存入快取
[7. 分析結果顯示]
├── 快取狀態標籤 (💾 快取結果 / 🤖 AI 分析)
├── 語法修正面板 (如有錯誤)
│ ├── 顯示原始 vs 修正版本
│ ├── [✅ 採用修正] [❌ 保持原版]
│ └── 說明修正原因
├── 句子翻譯和解釋
└── 互動式文字區域
[8. 互動式單字查詢]
├── 點擊單字觸發分析
├── 高價值詞彙 (🟢⭐ / 🟡⭐) → 免費彈窗
├── 低價值詞彙 (🔵) → 收費確認對話框
│ ├── 顯示剩餘額度
│ ├── [✅ 確認查詢] [❌ 取消]
│ └── 扣除使用額度
└── 顯示詳細詞彙信息彈窗
[9. 詞卡生成 (可選)]
├── 點擊「📖 生成詞卡」
├── AI 自動提取重要詞彙
├── 預覽生成的詞卡
└── 保存到個人詞庫
[10. 導航選項]
├── 🔄 分析新句子 → 返回步驟 2
├── ← 返回分析 → 返回步驟 7
└── ← 返回輸入 → 返回步驟 4
```
## 📐 詳細功能規格
### 🔧 技術規格
#### 前端技術棧
- **框架**: Next.js 15.5.3 + TypeScript
- **UI 組件**: React Hooks + Tailwind CSS
- **狀態管理**: useState (本地狀態)
- **API 調用**: Fetch API
- **路由**: Next.js App Router
#### 後端技術棧
- **框架**: ASP.NET Core 8.0
- **AI 整合**: Google Gemini API
- **資料庫**: SQLite + Entity Framework Core
- **快取**: 資料庫快取 (24小時TTL)
- **認證**: JWT Token
### 📊 資料模型
#### 1. API 請求/回應格式
**句子分析請求**:
```typescript
interface AnalyzeSentenceRequest {
inputText: string // 用戶輸入的英文句子 (≤300字)
forceRefresh?: boolean // 強制刷新快取 (預設: false)
analysisMode?: string // 分析模式 (預設: 'full')
}
```
**句子分析回應**:
```typescript
interface AnalyzeSentenceResponse {
success: boolean
message: string
cached: boolean // 是否來自快取
cacheHit: boolean // 快取命中狀態
usingAI: boolean // 是否使用 AI 分析
data: {
analysisId: string
inputText: string
grammarCorrection: GrammarCorrectionResult
sentenceMeaning: {
Translation: string // 注意: 首字母大寫
Explanation: string // 注意: 首字母大寫
}
finalAnalysisText: string
wordAnalysis: Record<string, WordAnalysis>
highValueWords: string[]
phrasesDetected: PhraseInfo[]
}
}
```
#### 2. 單字分析資料結構
```typescript
interface WordAnalysis {
word: string
translation: string
definition: string
partOfSpeech: string
pronunciation: string
synonyms: string[]
antonyms?: string[]
isPhrase: boolean
isHighValue: boolean // 高學習價值標記
learningPriority: 'high' | 'medium' | 'low'
phraseInfo?: {
phrase: string
meaning: string
warning: string
colorCode: string
}
difficultyLevel: string // CEFR 等級 (A1, A2, B1, B2, C1, C2)
costIncurred?: number // 查詢成本
}
```
#### 3. 語法修正結構
```typescript
interface GrammarCorrectionResult {
hasErrors: boolean
originalText: string
correctedText?: string
corrections: GrammarCorrection[]
confidenceScore: number
}
interface GrammarCorrection {
position: { start: number, end: number }
errorType: string
original: string
corrected: string
reason: string
severity: 'high' | 'medium' | 'low'
}
```
### 🎨 UI/UX 規格
#### 1. 主介面佈局 (`/generate`)
```
┌─────────────────────────────────────────┐
│ Navigation Bar │
├─────────────────────────────────────────┤
│ 📝 AI 智能生成詞卡 │
│ │
│ ┌─── 原始例句類型 ──────────────────────┐ │
│ │ [✍️ 手動輸入] [📷 影劇截圖 🔒] │ │
│ └───────────────────────────────────────┘ │
│ │
│ ┌─── 輸入英文文本 ──────────────────────┐ │
│ │ ┌─────────────────────────────────┐ │ │
│ │ │ [Textarea: 最多300字元] │ │ │
│ │ │ "輸入英文句子最多300字..." │ │ │
│ │ └─────────────────────────────────┘ │ │
│ │ 最多 300 字元 • 目前0 字元 │ │
│ └───────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ [🔍 分析句子] (全寬按鈕) │ │
│ └─────────────────────────────────────┘ │
│ │
│ 免費用戶:已使用 0/5 次 (3小時內) │
└─────────────────────────────────────────┘
```
#### 2. 分析結果介面
```
┌─────────────────────────────────────────┐
│ 📝 句子分析結果 💾 快取結果 │
│ [← 返回] │
├─────────────────────────────────────────┤
│ ⚠️ 語法修正建議 (如有錯誤) │
│ ┌─ 原文I go to school yesterday ──┐ │
│ │ 修正I went to school yesterday │ │
│ │ [✅ 採用修正] [❌ 保持原版] │ │
│ └───────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ 📝 句子分析 │
│ ┌─ 用戶輸入 ────────────────────────┐ │
│ │ I go to school yesterday │ │
│ └───────────────────────────────────┘ │
│ ┌─ 整句意思 ────────────────────────┐ │
│ │ 我昨天去學校。這句話表達了過去... │ │
│ └───────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ 💡 點擊查詢單字意思 │
│ 🟡⭐高價值片語 🟢⭐高價值單字 🔵普通單字 │
│ ┌─────────────────────────────────────┐ │
│ │ I [went] to [school] [yesterday] │ │
│ │ 🟢⭐ 🔵 🟡⭐ │ │
│ └─────────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ [🔄 分析新句子] [📖 生成詞卡] │
└─────────────────────────────────────────┘
```
#### 3. 單字查詢彈窗
```
┌─── went ─────────────── ✕ ─┐
│ ⭐ 高價值詞彙(免費查詢) │
│ ⭐⭐⭐⭐⭐ 學習價值 │
│ │
│ [verb] /went/ 🔊 │
│ │
│ 翻譯: 去 (go的過去式) │
│ 定義: Past tense of go │
│ │
│ 同義詞: [traveled] [moved] │
│ 反義詞: [came] [stayed] │
│ │
│ 難度等級: [CEFR A1] (基礎) │
└────────────────────────────┘
```
#### 4. 收費確認對話框
```
┌─── school ─────────── ✕ ─┐
│ 💰 低價值詞彙(需消耗額度) │
│ 此查詢將消耗 1 次 使用額度 │
│ 剩餘額度4 次 │
│ │
│ [✅ 確認查詢] [❌ 取消] │
└────────────────────────────┘
```
### 🔧 技術實現規格
#### 1. 前端組件架構
```
GeneratePage (主頁面)
├── Navigation (導航欄)
├── InputModeSelection (輸入模式選擇)
├── TextInputArea (文字輸入區域)
├── AnalysisButton (分析按鈕)
├── UsageCounter (使用次數顯示)
├── AnalysisView (分析結果檢視)
│ ├── CacheStatusBadge (快取狀態標籤)
│ ├── GrammarCorrectionPanel (語法修正面板)
│ ├── SentenceAnalysisPanel (句子分析面板)
│ └── ClickableTextV2 (互動式文字組件)
│ ├── WordClickHandler (單字點擊處理)
│ ├── CostConfirmDialog (收費確認對話框)
│ └── WordInfoPopup (單字資訊彈窗)
└── CardPreview (詞卡預覽, 可選)
```
#### 2. 後端API架構
```
AIController
├── AnalyzeSentence (句子分析主API)
│ ├── 使用限制檢查
│ ├── 快取查詢邏輯
│ ├── Gemini AI 調用
│ ├── 語法修正處理
│ ├── 高價值詞彙標記
│ └── 快取寫入
├── QueryWord (單字查詢API)
│ ├── 高/低價值判斷
│ ├── 收費邏輯處理
│ └── 即時詞彙分析
└── CacheManagement (快取管理API)
├── GetCacheStats (快取統計)
├── CleanupCache (清理過期快取)
└── InvalidateCache (手動清除快取)
```
#### 3. 快取系統規格
```
SentenceAnalysisCache (資料表)
├── InputTextHash (SHA-256, 索引)
├── AnalysisResult (JSON格式)
├── ExpiresAt (過期時間, 索引)
├── AccessCount (存取次數)
├── CreatedAt / LastAccessedAt
└── 複合索引 (Hash + ExpiresAt)
快取策略:
├── TTL: 24小時
├── 清理: 自動背景任務
├── 命中率: >80% (預期)
└── 儲存格式: JSON序列化
```
## 🎮 詳細互動規格
### 📝 輸入階段
#### 輸入模式
- **手動輸入**: 300字元限制即時字數統計
- **影劇截圖**: Phase 2 功能付費用戶限定
#### 輸入驗證
```typescript
// 字數限制邏輯
if (mode === 'manual' && value.length > 300) {
return // 阻止輸入
}
// 視覺回饋
const borderColor =
textLength >= 300 ? 'border-red-400' :
textLength >= 280 ? 'border-yellow-400' :
'border-gray-300'
```
#### 按鈕狀態
```typescript
// 分析按鈕啟用條件
disabled = isAnalyzing ||
(mode === 'manual' && (!textInput || textInput.length > 300)) ||
(mode === 'screenshot')
```
### 🔍 分析階段
#### 載入狀態
- **初始**: "🔍 分析句子"
- **載入中**: "正在分析句子... (AI 分析約需 3-5 )" + 旋轉動畫
- **完成**: 自動跳轉到分析結果頁面
#### 快取邏輯
```csharp
// 後端快取檢查流程
1. 計算輸入文字的 SHA-256 hash
2. 查詢資料庫是否有未過期的快取
3. Cache Hit: 立即返回 + 更新統計
4. Cache Miss: 調用 Gemini AI + 存入快取
```
#### 錯誤處理
- **API 錯誤**: 顯示錯誤訊息
- **網路錯誤**: 重試機制
- **使用額度超限**: 提示升級或等待
### 🖱️ 互動查詢階段
#### 單字分類和視覺設計
```css
/* 高價值片語 */
.high-value-phrase {
background: bg-yellow-100
border: 2px solid border-yellow-400
icon:
hover: bg-yellow-200 + shadow + transform
}
/* 高價值單字 */
.high-value-word {
background: bg-green-100
border: 2px solid border-green-400
icon:
hover: bg-green-200 + shadow + transform
}
/* 普通單字 */
.normal-word {
border-bottom: border-blue-300
hover: bg-blue-100 + border-blue-400
}
```
#### 點擊行為邏輯
```typescript
// 單字點擊處理流程
onClick(word) => {
const wordAnalysis = analysis[cleanWord]
if (wordAnalysis.isHighValue) {
// 高價值詞彙 - 立即顯示彈窗
showWordPopup(word, analysis)
// 不扣除使用額度
} else {
// 低價值詞彙 - 顯示收費確認
showCostConfirmDialog(word, cost: 1)
// 確認後扣除額度並調用API
}
}
```
#### 彈窗內容結構
```
WordInfoPopup
├── Header (單字 + 關閉按鈕)
├── ValueBadge (高價值標記 + 學習價值星級)
├── PhraseWarning (片語警告,如適用)
├── BasicInfo (詞性 + 發音 + 發音按鈕)
├── Translation (翻譯)
├── Definition (英文定義)
├── Synonyms (同義詞標籤)
├── Antonyms (反義詞標籤)
└── DifficultyLevel (CEFR難度等級)
```
### 💰 收費模式規格
#### 免費用戶限制
```typescript
const FREE_USER_LIMITS = {
sentenceAnalysis: 5, // 3小時內最多5次句子分析
timeWindow: 3 * 60 * 60, // 3小時窗口 (秒)
wordQueryCost: 1, // 每次低價值詞彙查詢成本
highValueWordsFree: true // 高價值詞彙永遠免費
}
```
#### 高價值詞彙判定邏輯
```typescript
// 高價值詞彙標準
const isHighValue =
cefrLevel >= 'B1' || // B1+ 等級詞彙
isIdiomOrPhrase || // 慣用語和片語
isAcademicVocabulary || // 學術詞彙
learningFrequency === 'high' // 高學習頻率詞彙
```
### 🗄️ 資料持久化規格
#### 快取資料表結構
```sql
CREATE TABLE SentenceAnalysisCache (
Id UNIQUEIDENTIFIER PRIMARY KEY,
InputTextHash NVARCHAR(64) NOT NULL, -- SHA-256 hash
InputText NVARCHAR(1000) NOT NULL, -- 原始輸入
AnalysisResult NVARCHAR(MAX) NOT NULL, -- JSON格式分析結果
HasGrammarErrors BIT NOT NULL, -- 是否有語法錯誤
CorrectedText NVARCHAR(1000) NULL, -- 修正後文字
GrammarCorrections NVARCHAR(MAX) NULL, -- 語法修正JSON
HighValueWords NVARCHAR(MAX) NULL, -- 高價值詞彙JSON
PhrasesDetected NVARCHAR(MAX) NULL, -- 檢測到的片語JSON
CreatedAt DATETIME2 NOT NULL, -- 建立時間
ExpiresAt DATETIME2 NOT NULL, -- 過期時間
LastAccessedAt DATETIME2 NULL, -- 最後存取時間
AccessCount INT NOT NULL DEFAULT 0 -- 存取次數
);
-- 索引
CREATE INDEX IX_SentenceAnalysisCache_Hash ON SentenceAnalysisCache(InputTextHash);
CREATE INDEX IX_SentenceAnalysisCache_Expires ON SentenceAnalysisCache(ExpiresAt);
CREATE INDEX IX_SentenceAnalysisCache_Hash_Expires ON SentenceAnalysisCache(InputTextHash, ExpiresAt);
```
## 🧪 測試規格
### 🔬 功能測試案例
#### 1. 句子分析功能測試
**測試案例 1.1: 新句子分析**
```
輸入: "I went to school yesterday"
預期結果:
- 載入時間: 3-5 秒
- 快取狀態: 🤖 AI 分析
- 翻譯: "我昨天去學校。"
- 解釋: 包含語法結構說明
- 高價值詞彙: went, school, yesterday 標記為 ⭐
```
**測試案例 1.2: 快取命中測試**
```
前置條件: 已分析過 "I went to school yesterday"
輸入: "I went to school yesterday" (相同句子)
預期結果:
- 載入時間: <200ms
- 快取狀態: 💾 快取結果
- 內容: 與首次分析完全相同
- 使用額度: 不增加
```
**測試案例 1.3: 語法錯誤修正**
```
輸入: "I go to school yesterday"
預期結果:
- 語法修正面板出現
- 原文: "I go to school yesterday"
- 修正: "I went to school yesterday"
- 修正原因: "過去式時態修正:句子中有 'yesterday',應使用過去式"
- 用戶可選擇採用或拒絕修正
```
#### 2. 互動式單字查詢測試
**測試案例 2.1: 高價值詞彙查詢**
```
前置條件: 已完成句子分析
操作: 點擊標記為 ⭐ 的單字 "went"
預期結果:
- 立即顯示詞彙資訊彈窗
- 顯示 "⭐ 高價值詞彙(免費查詢)"
- 不扣除使用額度
- 包含完整詞彙信息
```
**測試案例 2.2: 低價值詞彙查詢**
```
前置條件: 已完成句子分析,剩餘額度 > 0
操作: 點擊普通單字 (藍色下劃線)
預期結果:
1. 顯示收費確認對話框
2. 顯示消耗額度和剩餘額度
3. 用戶確認後扣除 1 次額度
4. 調用 query-word API
5. 顯示詞彙資訊彈窗
```
**測試案例 2.3: 額度不足測試**
```
前置條件: 剩餘額度 = 0
操作: 點擊低價值詞彙
預期結果:
- 顯示 "❌ 使用額度不足,無法查詢低價值詞彙"
- 不調用 API
- 不顯示詞彙彈窗
```
#### 3. 使用限制測試
**測試案例 3.1: 免費用戶限制**
```
前置條件: 免費用戶3小時內已分析 5 次
操作: 嘗試分析新句子
預期結果:
- 顯示 "❌ 免費用戶 3 小時內只能分析 5 次句子,請稍後再試或升級到付費版本"
- 不調用分析 API
- 使用計數不增加
```
**測試案例 3.2: 付費用戶無限制**
```
前置條件: isPremium = true
操作: 多次分析句子
預期結果:
- 顯示 "🌟 付費用戶:無限制使用"
- 所有分析正常執行
- 無使用次數限制
```
### 🚀 效能測試規格
#### 1. 回應時間測試
| 測試情境 | 預期時間 | 測試方法 |
|---------|----------|----------|
| 新句子 AI 分析 | 3-5 | 測量從點擊到結果顯示的時間 |
| 快取命中查詢 | <200ms | 重複查詢相同句子 |
| 高價值詞彙點擊 | <100ms | 點擊已標記的高價值詞彙 |
| 低價值詞彙查詢 | 1-2 | 確認後的API調用時間 |
#### 2. 快取效能測試
| 測試指標 | 目標值 | 測試方法 |
|---------|-------|----------|
| 快取命中率 | >80% | 重複查詢統計 |
| 快取寫入成功率 | >99% | 監控快取失敗日誌 |
| 快取過期清理 | 24小時 | 測試過期資料自動清理 |
### 🔧 整合測試規格
#### 1. 端到端測試流程
**完整用戶旅程測試**:
```
1. 登入系統
2. 導航到 /generate 頁面
3. 輸入測試句子 "She felt ashamed of her mistake and apologized"
4. 點擊 "🔍 分析句子"
5. 驗證分析結果正確顯示
6. 點擊高價值詞彙 "ashamed" (免費)
7. 驗證詞彙彈窗內容
8. 點擊低價值詞彙 "her" (收費)
9. 確認收費對話框
10. 驗證額度扣除
11. 點擊 "🔄 分析新句子"
12. 輸入相同句子
13. 驗證快取命中 (💾 快取結果)
14. 點擊 "📖 生成詞卡"
15. 驗證詞卡生成功能
```
#### 2. API 整合測試
**測試案例: API 連接性**
```bash
# 1. 句子分析 API 測試
curl -X POST http://localhost:5000/api/ai/analyze-sentence \
-H "Content-Type: application/json" \
-d '{"inputText": "Hello world", "analysisMode": "full"}'
# 2. 單字查詢 API 測試
curl -X POST http://localhost:5000/api/ai/query-word \
-H "Content-Type: application/json" \
-d '{"word": "hello", "sentence": "Hello world"}'
# 3. 快取統計 API 測試
curl -X GET http://localhost:5000/api/ai/cache-stats
```
#### 3. 邊界條件測試
**輸入驗證測試**:
```
測試案例 3.1: 空白輸入
輸入: ""
預期: 按鈕禁用,無法提交
測試案例 3.2: 超長輸入
輸入: 301字元的文字
預期: 無法輸入,紅色邊框警告
測試案例 3.3: 特殊字元
輸入: "Hello @#$%^&*() world!"
預期: 正常分析,特殊字元適當處理
測試案例 3.4: 純中文輸入
輸入: "你好世界"
預期: 系統應適當處理或給出提示
```
### 🐛 錯誤處理測試
#### 1. 網路錯誤測試
```
測試案例 1: 後端服務停止
操作: 停止後端服務後嘗試分析
預期: 顯示連接錯誤訊息,不崩潰
測試案例 2: Gemini API 失敗
模擬: API key 無效或 API 服務不可用
預期: 回退到本地分析,不中斷用戶體驗
```
#### 2. 資料錯誤測試
```
測試案例 1: 損壞的快取資料
模擬: 資料庫中有格式錯誤的 JSON
預期: 忽略損壞快取,重新調用 AI 分析
測試案例 2: 不完整的API回應
模擬: 後端回傳缺少某些欄位的資料
預期: 使用預設值,顯示部分資訊而非崩潰
```
## 🎯 驗收標準
### ✅ 功能驗收標準
1. **基本功能完整性**
- [ ] 用戶可成功輸入並分析英文句子
- [ ] 所有UI組件正確顯示和互動
- [ ] API調用成功且資料正確處理
2. **AI功能正確性**
- [ ] Gemini AI 整合正常運作
- [ ] 翻譯和解釋內容品質符合要求
- [ ] 語法修正建議合理且準確
3. **互動查詢功能**
- [ ] 高價值詞彙免費查詢正常
- [ ] 低價值詞彙收費機制正確
- [ ] 詞彙彈窗內容完整準確
4. **快取系統功能**
- [ ] 新句子使用 AI 分析
- [ ] 重複句子使用快取結果
- [ ] 快取狀態正確顯示
5. **使用限制功能**
- [ ] 免費用戶額度限制生效
- [ ] 付費用戶無限制使用
- [ ] 額度計算準確無誤
### 📊 效能驗收標準
1. **回應時間要求**
- [ ] 快取命中 < 200ms
- [ ] AI分析 < 10秒 (95%的情況下 < 5秒)
- [ ] 頁面導航 < 100ms
2. **系統穩定性**
- [ ] 24小時連續運行無崩潰
- [ ] 記憶體使用穩定
- [ ] 資料庫連接池正常
3. **用戶體驗標準**
- [ ] 用戶操作回饋及時 (<100ms)
- [ ] 載入狀態清晰可見
- [ ] 錯誤訊息用戶友善
## 🔧 開發和部署規格
### 📁 檔案結構
```
frontend/
├── app/generate/page.tsx (主要分析頁面)
├── components/ClickableTextV2.tsx (互動式文字組件)
├── components/GrammarCorrectionPanel.tsx (語法修正面板)
└── contexts/AuthContext.tsx (認證上下文)
backend/
├── Controllers/AIController.cs (AI API 控制器)
├── Services/GeminiService.cs (Gemini AI 服務)
├── Services/AnalysisCacheService.cs (快取服務)
├── Services/UsageTrackingService.cs (使用追蹤服務)
└── Models/Entities/ (資料模型)
```
### 🚀 部署需求
#### 環境變數
```env
# Gemini AI
GEMINI_API_KEY=your_gemini_api_key
# 資料庫
CONNECTION_STRING=Data Source=dramaling.db
# CORS
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3002
# 快取設定
CACHE_TTL_HOURS=24
CACHE_CLEANUP_INTERVAL_HOURS=6
```
#### 系統需求
- **前端**: Node.js 18+, Next.js 15+
- **後端**: .NET 8.0+, ASP.NET Core
- **資料庫**: SQLite 3.x (開發), SQL Server (生產)
- **外部API**: Google Gemini API access
---
**文檔版本**: v1.0
**最後更新**: 2025-01-18
**負責人**: Claude Code
**審核狀態**: 完成