# 🎯 個人化高價值詞彙判定系統 - 更新版實施計劃

**專案**: DramaLing 英語學習平台
**功能**: 個人化高價值詞彙智能判定
**計劃版本**: v2.0 (根據當前代碼狀況更新)
**更新日期**: 2025-01-18
**預計開發時程**: 1.5週 (優化後的架構加速開發)

---

## 📋 **當前代碼狀況分析**

### **✅ 已完成的優化 (有利於個人化實施)**
- ✅ **移除快取機制**: 簡化了邏輯，每次都是新 AI 分析
- ✅ **移除 explanation**: 簡化了回應格式
- ✅ **代碼大幅精簡**: AIController 減少 200+ 行
- ✅ **架構清晰**: Service 層職責明確

### **🔧 當前架構分析**

#### **User 實體**
**位置**: `/backend/DramaLing.Api/Models/Entities/User.cs:30`
**狀態**: ✅ 完美適合擴充，Preferences 後正好可新增 EnglishLevel

#### **AnalyzeSentenceRequest**
**位置**: `/backend/DramaLing.Api/Controllers/AIController.cs:1313`
**當前結構**:
```csharp
public class AnalyzeSentenceRequest
{
    public string InputText { get; set; } = string.Empty;
    public bool ForceRefresh { get; set; } = false;
    public string AnalysisMode { get; set; } = "full";
}
```
**狀態**: ✅ 簡潔易擴充

#### **GeminiService.AnalyzeSentenceAsync**
**位置**: `/backend/DramaLing.Api/Services/GeminiService.cs:55`
**當前簽名**: `AnalyzeSentenceAsync(string inputText)`
**當前 Prompt** (第64-96行): 已簡化，無 explanation 欄位
**狀態**: ✅ 適合個人化擴充

---

## 🛠️ **更新版實施計劃**

## **📋 Phase 1: 資料模型擴充 (第1天)**

### **1.1 User 實體擴充** ✅ 無變動
**檔案**: `/backend/DramaLing.Api/Models/Entities/User.cs`
**位置**: 第30行 `public Dictionary<string, object> Preferences` 後

```csharp
[MaxLength(10)]
public string EnglishLevel { get; set; } = "A2"; // A1, A2, B1, B2, C1, C2

public DateTime LevelUpdatedAt { get; set; } = DateTime.UtcNow;

public bool IsLevelVerified { get; set; } = false; // 是否通過測試驗證

[MaxLength(500)]
public string? LevelNotes { get; set; } // 程度設定備註
```

### **1.2 API 請求模型更新** ✅ 無變動
**檔案**: `/backend/DramaLing.Api/Controllers/AIController.cs:1313`

```csharp
public class AnalyzeSentenceRequest
{
    public string InputText { get; set; } = string.Empty;
    public string UserLevel { get; set; } = "A2"; // 🆕 新增
    public bool ForceRefresh { get; set; } = false;
    public string AnalysisMode { get; set; } = "full";
}
```

### **1.3 資料庫遷移** ✅ 無變動
```bash
cd /backend/DramaLing.Api/
dotnet ef migrations add AddUserEnglishLevel
dotnet ef database update
```

---

## **📋 Phase 2: Service 層個人化 (第2-3天)**

### **2.1 建立 CEFR 等級服務** ✅ 無變動
**新檔案**: `/backend/DramaLing.Api/Services/CEFRLevelService.cs`
(代碼與原計劃相同)

### **2.2 更新 GeminiService** 🔄 根據當前狀況調整

**檔案**: `/backend/DramaLing.Api/Services/GeminiService.cs`
**修改位置**: 第55行的 `AnalyzeSentenceAsync` 方法

**當前方法簽名**:
```csharp
public async Task<SentenceAnalysisResponse> AnalyzeSentenceAsync(string inputText)
```

**修改後簽名**:
```csharp
public async Task<SentenceAnalysisResponse> AnalyzeSentenceAsync(
    string inputText,
    string userLevel = "A2")
```

**🔄 更新版 Prompt (第64-96行) - 已適配移除 explanation**:
```csharp
var prompt = $@"
請分析以下英文句子，提供翻譯和個人化詞彙分析：

句子：{inputText}
學習者程度：{userLevel}

請按照以下JSON格式回應，不要包含任何其他文字：

{{
  ""translation"": ""自然流暢的繁體中文翻譯"",
  ""grammarCorrection"": {{
    ""hasErrors"": false,
    ""originalText"": ""{inputText}"",
    ""correctedText"": null,
    ""corrections"": []
  }},
  ""highValueWords"": [""重要詞彙1"", ""重要詞彙2""],
  ""wordAnalysis"": {{
    ""單字"": {{
      ""translation"": ""中文翻譯"",
      ""definition"": ""英文定義"",
      ""partOfSpeech"": ""詞性"",
      ""pronunciation"": ""音標"",
      ""isHighValue"": true,
      ""difficultyLevel"": ""CEFR等級""
    }}
  }}
}}

要求：
1. 翻譯要自然流暢，符合中文語法
2. **基於學習者程度({userLevel})，標記 {CEFRLevelService.GetTargetLevelRange(userLevel)} 等級的詞彙為高價值**
3. 如有語法錯誤請指出並修正
4. 確保JSON格式正確

高價值判定邏輯：
- 學習者程度: {userLevel}
- 高價值範圍: {CEFRLevelService.GetTargetLevelRange(userLevel)}
- 太簡單的詞彙(≤{userLevel})不要標記為高價值
- 太難的詞彙謹慎標記
- 重點關注適合學習者程度的詞彙
";
```

---

## **📋 Phase 3: Controller 層整合 (第4天) - 🔄 簡化版**

### **3.1 更新 AnalyzeSentence API**
**檔案**: `/backend/DramaLing.Api/Controllers/AIController.cs`
**位置**: 第501行的 `AnalyzeSentence` 方法

**🔄 簡化版用戶程度取得邏輯** (在第538行 AI 調用前新增):
```csharp
// 取得用戶英語程度
string userLevel = request.UserLevel ?? "A2";

// 🔄 簡化版：暫不從資料庫讀取，先使用 API 參數或預設值
if (string.IsNullOrEmpty(userLevel))
{
    userLevel = "A2"; // 預設程度
}

_logger.LogInformation("Using user level for analysis: {UserLevel}", userLevel);
```

**🔄 更新 AI 調用** (當前約第540行):
```csharp
// 原本：
// var aiAnalysis = await _geminiService.AnalyzeSentenceAsync(request.InputText);

// 修改為：
var aiAnalysis = await _geminiService.AnalyzeSentenceAsync(request.InputText, userLevel);
```

### **3.2 回應資料增強** 🔄 適配無快取版本
**位置**: 約第550行的 baseResponseData 物件

```csharp
var baseResponseData = new
{
    AnalysisId = Guid.NewGuid(),
    InputText = request.InputText,
    UserLevel = userLevel, // 🆕 新增：顯示使用的程度
    HighValueCriteria = CEFRLevelService.GetTargetLevelRange(userLevel), // 🆕 新增
    GrammarCorrection = aiAnalysis.GrammarCorrection,
    SentenceMeaning = new
    {
        Translation = aiAnalysis.Translation  // 🔄 已移除 Explanation
    },
    FinalAnalysisText = finalText ?? request.InputText,
    WordAnalysis = aiAnalysis.WordAnalysis,
    HighValueWords = aiAnalysis.HighValueWords,
    PhrasesDetected = new object[0]
};
```

---

## **📋 Phase 4: 前端個人化體驗 (第5-7天) - ✅ 基本無變動**

### **4.1 建立用戶程度設定頁面** ✅ 原計劃可直接使用
**新檔案**: `/frontend/app/settings/page.tsx`
(完整代碼與原計劃相同，已針對無 explanation 優化)

### **4.2 更新導航選單** ✅ 無變動
**檔案**: `/frontend/components/Navigation.tsx`

### **4.3 修改句子分析頁面** 🔄 微調
**檔案**: `/frontend/app/generate/page.tsx`
**修改位置**: 第28行的 `handleAnalyzeSentence` 函數 (行數已更新)

### **4.4 個人化詞彙標記顯示** ✅ 基本無變動
(原計劃的 WordAnalysisCard 組件可直接使用)

---

## **🔄 主要調整說明**

### **1. 移除過時的快取相關邏輯**
```diff
- 原計劃: 修改快取檢查和存入邏輯
+ 更新版: 已無快取機制，直接修改 AI 調用
```

### **2. 適配簡化的回應格式**
```diff
- 原計劃: SentenceMeaning { Translation, Explanation }
+ 更新版: SentenceMeaning { Translation } // 已移除 explanation
```

### **3. 簡化錯誤處理**
```diff
- 原計劃: 複雜的快取錯誤處理
+ 更新版: 簡化的 AI 錯誤處理
```

### **4. 更新行數引用**
```diff
- 原計劃: 基於舊版本的行數
+ 更新版: 基於當前優化後的行數
```

---

## **⏰ 更新版開發時程**

| 天數 | 階段 | 主要任務 | 預計工時 | 變化 |
|------|------|----------|----------|------|
| Day 1 | **資料模型** | User 實體擴充、API 擴充、資料庫遷移 | 8h | -4h (簡化) |
| Day 2-3 | **Service 層** | CEFRLevelService、GeminiService 個人化 | 12h | -4h (無快取) |
| Day 4 | **Controller 整合** | 簡化版 API 邏輯整合 | 6h | -4h (已優化) |
| Day 5-6 | **前端設定頁** | 程度設定介面、導航整合 | 12h | 無變動 |
| Day 7 | **前端分析整合** | generate 頁面修改、個人化顯示 | 6h | -2h (簡化) |
| Day 8-9 | **測試開發** | 單元測試、整合測試 | 8h | -4h (簡化) |
| Day 10 | **優化除錯** | 性能調整、UI 優化 | 4h | -2h |

**總計**: 56 工時 (約1.5週) - **節省 26 工時！**

---

## **🎯 實施優勢分析**

### **🚀 當前架構的優勢**
1. **代碼更乾淨**: 移除冗餘後更容易擴充
2. **邏輯更清晰**: 無快取干擾，邏輯線性化
3. **Service 層完整**: GeminiService 架構良好
4. **API 簡潔**: 統一的錯誤處理

### **💡 實施建議**

#### **立即可開始的項目**
1. **User 實體擴充** - 完全 ready
2. **CEFRLevelService 建立** - 獨立功能
3. **前端設定頁面** - 無依賴

#### **需要小幅調整的項目**
1. **GeminiService Prompt** - 適配無 explanation
2. **Controller 行數** - 更新引用位置

---

## **📋 風險評估更新**

### **🟢 降低的風險**
- ✅ **複雜度降低**: 無快取邏輯干擾
- ✅ **測試簡化**: 線性邏輯更易測試
- ✅ **維護容易**: 代碼結構清晰

### **🟡 保持的風險**
- ⚠️ **AI Prompt 複雜化**: 仍需謹慎測試
- ⚠️ **用戶理解度**: CEFR 概念對用戶的理解

### **🔴 新增風險**
- ⚠️ **AI 成本**: 無快取後每次都調用 AI (但您已選擇此方向)

---

## **🎯 執行建議**

### **🚀 立即開始**
建議從 **Phase 1** 開始，因為：
- ✅ 完全獨立，無依賴
- ✅ 為後續階段打基礎
- ✅ 可以快速看到成果

### **🔄 調整重點**
1. **更新所有行數引用**
2. **移除 explanation 相關邏輯**
3. **簡化快取相關的修改步驟**

### **📊 成功機率**
**95%** - 當前架構非常適合個人化功能實施

---

## **💡 額外建議**

### **漸進式實施**
可以考慮分階段發佈：
1. **MVP版**: 僅前端本地存儲用戶程度
2. **完整版**: 後端資料庫 + 完整個人化

### **測試策略**
由於代碼已大幅簡化，測試工作量也相應減少

---

**結論: 這個計劃不僅可行，而且由於當前代碼優化，實施會比原計劃更簡單快速！** 🎉

**© 2025 DramaLing Development Team**
**更新基於**: 當前代碼狀況 (commit 1b937f8)
**主要改善**: 適配優化後的簡潔架構