dramaling-vocab-learning/note/UPDATED_PERSONALIZED_WORDS_...

10 KiB
Raw Blame History

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

專案: 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 當前結構:

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

[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

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 資料庫遷移 無變動

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 方法

當前方法簽名:

public async Task<SentenceAnalysisResponse> AnalyzeSentenceAsync(string inputText)

修改後簽名:

public async Task<SentenceAnalysisResponse> AnalyzeSentenceAsync(
    string inputText,
    string userLevel = "A2")

🔄 更新版 Prompt (第64-96行) - 已適配移除 explanation:

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 調用前新增):

// 取得用戶英語程度
string userLevel = request.UserLevel ?? "A2";

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

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

🔄 更新 AI 調用 (當前約第540行):

// 原本:
// var aiAnalysis = await _geminiService.AnalyzeSentenceAsync(request.InputText);

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

3.2 回應資料增強 🔄 適配無快取版本

位置: 約第550行的 baseResponseData 物件

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. 移除過時的快取相關邏輯

- 原計劃: 修改快取檢查和存入邏輯
+ 更新版: 已無快取機制,直接修改 AI 調用

2. 適配簡化的回應格式

- 原計劃: SentenceMeaning { Translation, Explanation }
+ 更新版: SentenceMeaning { Translation } // 已移除 explanation

3. 簡化錯誤處理

- 原計劃: 複雜的快取錯誤處理
+ 更新版: 簡化的 AI 錯誤處理

4. 更新行數引用

- 原計劃: 基於舊版本的行數
+ 更新版: 基於當前優化後的行數

更新版開發時程

天數 階段 主要任務 預計工時 變化
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) 主要改善: 適配優化後的簡潔架構