From 57e56137b03a9e9aeecff681075592d174dc1087 Mon Sep 17 00:00:00 2001 From: siage Date: Sun, 13 Apr 2025 21:58:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8B=99=E8=A8=98?= =?UTF-8?q?=E6=86=B6=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=AF=A6=E7=8F=BE=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E5=82=99=E4=BB=BD=E5=B7=B2=E5=AE=8C=E6=88=90=E4=BB=BB?= =?UTF-8?q?=E5=8B=99=E8=87=B3=20memory=20=E7=9B=AE=E9=8C=84=EF=BC=8C?= =?UTF-8?q?=E4=B8=A6=E5=9C=A8=E6=B8=85=E9=99=A4=E4=BB=BB=E5=8B=99=E6=99=82?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E6=AD=B7=E5=8F=B2=E8=A8=98=E9=8C=84=E5=8F=83?= =?UTF-8?q?=E8=80=83=E3=80=82=E6=9B=B4=E6=96=B0=E7=9B=B8=E9=97=9C=E6=96=87?= =?UTF-8?q?=E6=AA=94=E4=BB=A5=E8=AA=AA=E6=98=8E=E4=BB=BB=E5=8B=99=E8=A8=98?= =?UTF-8?q?=E6=86=B6=E7=9A=84=E4=BD=BF=E7=94=A8=E5=A0=B4=E6=99=AF=E5=8F=8A?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=8F=90=E7=A4=BA=E6=8C=87=E5=B0=8E=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E7=B3=BB=E7=B5=B1=E7=9A=84=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E5=8C=96=E7=A8=8B=E5=BA=A6=E8=88=87=E5=B7=A5=E4=BD=9C=E6=95=88?= =?UTF-8?q?=E7=8E=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 +++++++++++++++ docs/functionality-checklist.md | 43 +++++++++++++++++++++++++++++++-- src/models/taskModel.ts | 34 ++++++++++++++++++++------ src/tools/taskTools.ts | 35 +++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e93fa55..1f91873 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - **任務完整性驗證**:確保任務成果符合預期要求 - **任務複雜度評估**:自動評估任務複雜度並提供最佳處理建議 - **任務摘要自動更新**:完成任務時自動產生摘要,優化記憶效能 +- **任務記憶功能**:自動備份任務歷史記錄,提供長期記憶和參考能力 ## 🔄 任務管理工作流程 @@ -30,6 +31,25 @@ 8. **任務完成** `complete_task`:標記任務完成並生成報告,自動更新摘要 9. **任務管理** `delete_task`:管理未完成的任務(已完成任務將保留在系統中) +## 🧠 任務記憶功能 + +蝦米任務管理器具備長期記憶功能,可以自動保存任務執行的歷史記錄,並在規劃新任務時提供參考經驗。 + +### 功能特點 + +- 系統會自動將任務備份到 memory 目錄中 +- 備份文件按照時間順序命名,格式為 tasks_backup_YYYY-MM-DDThh-mm-ss.json +- 任務規劃 Agent 會自動獲得關於如何利用記憶功能的指導 + +### 優勢與效益 + +- **避免重複工作**:參考過去任務,不必從零開始解決類似問題 +- **借鑒成功經驗**:利用已驗證有效的解決方案,提高開發效率 +- **學習與改進**:識別過去的錯誤或低效方案,持續優化工作流程 +- **知識沉澱**:隨著系統使用時間增長,形成持續擴展的知識庫 + +通過有效利用任務記憶功能,系統能夠不斷積累經驗,智能化程度和工作效率將持續提升。 + ## 📚 文件資源 - [系統架構](docs/architecture.md):詳細的系統設計與數據流說明 diff --git a/docs/functionality-checklist.md b/docs/functionality-checklist.md index fa5e562..d18cdc8 100644 --- a/docs/functionality-checklist.md +++ b/docs/functionality-checklist.md @@ -194,7 +194,7 @@ ### 10. clear_all_tasks -**描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行 +**描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行。同時將任務備份到 memory 子目錄,保存任務歷史記錄以供未來參考。 **參數**: @@ -202,7 +202,13 @@ **返回值**: -- 返回一個包含清除操作結果的響應,包括成功或失敗的訊息 +- 返回一個包含清除操作結果的響應,包括成功或失敗的訊息、備份文件名和備份位置 + +**重要細節**: + +- 在刪除任務前,會自動將當前任務列表備份到 data/memory 子目錄 +- 備份文件使用時間戳命名,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json +- memory 子目錄作為長期記憶庫,用於存儲任務歷史記錄,供未來任務規劃參考 ### 11. update_task @@ -270,3 +276,36 @@ - `loadTaskRelatedFiles` - 生成任務相關文件的內容摘要 - `generateFileInfo` - 生成文件基本資訊摘要 + +## 任務記憶功能 + +任務記憶功能是蝦米任務管理器的重要特性,它使系統具備長期記憶能力,能夠保存、查詢和利用過去的任務執行經驗。 + +### 核心實現 + +1. **自動備份機制**: + + - 在 `clearAllTasks` 函數中實現雙重備份功能 + - 將任務備份同時保存在 data 目錄和 data/memory 子目錄 + - 使用時間戳命名備份文件,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json + +2. **智能提示指導**: + - 在 `planTask` 函數的提示詞中添加任務記憶檢索指南 + - 指導 Agent 如何查找、分析和應用歷史任務記錄 + - 提供智能參考建議,促進知識重用 + +### 使用場景 + +- **任務規劃時**:參考類似任務的實施方案和最佳實踐 +- **問題解決時**:查閱過去遇到的類似問題及其解決方法 +- **代碼重用時**:識別過去實現的可重用組件或模式 +- **經驗學習時**:分析過去成功和失敗案例,持續優化工作方式 + +### 技術要點 + +- 使用相對路徑引用 memory 目錄,保持代碼的一致性和可維護性 +- 確保 memory 目錄存在,如不存在則自動創建 +- 保持原有的錯誤處理模式,確保系統穩定性 +- 備份過程透明無感,不影響用戶正常操作流程 + +此功能無需額外工具或配置,系統會自動在任務清除時保存歷史記錄,並在任務規劃時提供智能指導,使 Agent 能夠充分利用過去的經驗和知識。 diff --git a/src/models/taskModel.ts b/src/models/taskModel.ts index be61fcf..e7ba368 100644 --- a/src/models/taskModel.ts +++ b/src/models/taskModel.ts @@ -694,31 +694,49 @@ export async function clearAllTasks(): Promise<{ // 確保數據目錄存在 await ensureDataDir(); - // 讀取現有任務,用於創建備份 - const tasks = await readTasks(); + // 讀取現有任務 + const allTasks = await readTasks(); // 如果沒有任務,直接返回 - if (tasks.length === 0) { + if (allTasks.length === 0) { return { success: true, message: "沒有任務需要清除" }; } + // 篩選出已完成的任務 + const completedTasks = allTasks.filter( + (task) => task.status === TaskStatus.COMPLETED + ); + // 創建備份文件名 const timestamp = new Date() .toISOString() .replace(/:/g, "-") .replace(/\..+/, ""); - const backupFileName = `tasks_backup_${timestamp}.json`; - const backupFilePath = path.join(DATA_DIR, backupFileName); + const backupFileName = `tasks_memory_${timestamp}.json`; - // 創建備份 - await fs.writeFile(backupFilePath, JSON.stringify({ tasks }, null, 2)); + // 確保 memory 目錄存在 + const MEMORY_DIR = path.join(DATA_DIR, "memory"); + try { + await fs.access(MEMORY_DIR); + } catch (error) { + await fs.mkdir(MEMORY_DIR, { recursive: true }); + } + + // 創建 memory 目錄下的備份路徑 + const memoryFilePath = path.join(MEMORY_DIR, backupFileName); + + // 同時寫入到 memory 目錄 (只包含已完成的任務) + await fs.writeFile( + memoryFilePath, + JSON.stringify({ tasks: completedTasks }, null, 2) + ); // 清空任務文件 await writeTasks([]); return { success: true, - message: `已成功清除所有任務,共 ${tasks.length} 個任務被刪除`, + message: `已成功清除所有任務,共 ${allTasks.length} 個任務被刪除,已備份 ${completedTasks.length} 個已完成的任務至 memory 目錄`, backupFile: backupFileName, }; } catch (error) { diff --git a/src/tools/taskTools.ts b/src/tools/taskTools.ts index 2b1433c..e9605de 100644 --- a/src/tools/taskTools.ts +++ b/src/tools/taskTools.ts @@ -1,4 +1,6 @@ import { z } from "zod"; +import path from "path"; +import { fileURLToPath } from "url"; import { getAllTasks, getTaskById, @@ -211,6 +213,12 @@ export async function planTask({ } } + const __filename = fileURLToPath(import.meta.url); + const __dirname = path.dirname(__filename); + const PROJECT_ROOT = path.resolve(__dirname, "../.."); + const DATA_DIR = process.env.DATA_DIR || path.join(PROJECT_ROOT, "data"); + const MEMORY_DIR = path.join(DATA_DIR, "memory"); + prompt += `## 分析指引\n\n1. 首先確定任務的確切目標和預期成果 2. 識別任務中可能的技術挑戰和關鍵決策點 3. 考慮潛在的解決方案和替代方案 @@ -231,6 +239,33 @@ export async function planTask({ - 你可以適當的時候網路搜尋工具,查詢相關的內容 - 當你遇到需要查詢的內容時,請使用網路搜尋工具,例如包括但不限於 ddg_search、web、web_search 等等... +## 任務記憶檢索指南 + +過去執行過的任務都會被備份到 **${MEMORY_DIR}** 目錄中。當規劃新任務或解決類似問題時,請務必先參考歷史記錄以提高效率: + +1. **查找相關歷史任務**: + - 所有歷史任務備份都保存在 **${MEMORY_DIR}** 子目錄下 + - 備份文件命名格式為 **tasks_memory_YYYY-MM-DDThh-mm-ss.json** + - 您可以按時間順序查看,或根據任務相關性選擇特定備份 + +2. **分析歷史任務內容**: + - 查閱歷史任務的描述、實施方法和執行結果 + - 識別與當前任務相似的模式或解決方案 + - 評估過去任務的成功經驗和需要改進的地方 + +3. **應用歷史經驗**: + - 借鑒成功的實施策略和方法 + - 避免重複過去的錯誤或低效方案 + - 識別可重用的代碼、模式或工具 + - 考慮如何改進或擴展過去的解決方案 + +4. **智能參考建議**: + - 在規劃新任務時,主動查找和引用相關的歷史任務 + - 在任務描述或實施指南中引用相關歷史記錄的位置 + - 明確說明哪些部分可以重用或需要修改 + +通過有效利用任務記憶功能,您可以避免重複工作、借鑒成功經驗,並確保解決方案的一致性和可靠性。 + ## 下一步行動\n\n完成初步分析後,請使用「analyze_task」工具提交您的分析結果,必須包含以下兩個關鍵部分:\n\n1. **結構化的任務摘要**: - 明確的任務目標和期望成果 - 明確的範圍界定(包括明確標注哪些不在範圍內)