新增任務記憶功能,實現自動備份已完成任務至 memory 目錄,並在清除任務時提供歷史記錄參考。更新相關文檔以說明任務記憶的使用場景及智能提示指導,提升系統的智能化程度與工作效率。

This commit is contained in:
siage 2025-04-13 21:58:57 +08:00
parent f9409fd48e
commit 57e56137b0
4 changed files with 122 additions and 10 deletions

View File

@ -15,6 +15,7 @@
- **任務完整性驗證**:確保任務成果符合預期要求 - **任務完整性驗證**:確保任務成果符合預期要求
- **任務複雜度評估**:自動評估任務複雜度並提供最佳處理建議 - **任務複雜度評估**:自動評估任務複雜度並提供最佳處理建議
- **任務摘要自動更新**:完成任務時自動產生摘要,優化記憶效能 - **任務摘要自動更新**:完成任務時自動產生摘要,優化記憶效能
- **任務記憶功能**:自動備份任務歷史記錄,提供長期記憶和參考能力
## 🔄 任務管理工作流程 ## 🔄 任務管理工作流程
@ -30,6 +31,25 @@
8. **任務完成** `complete_task`:標記任務完成並生成報告,自動更新摘要 8. **任務完成** `complete_task`:標記任務完成並生成報告,自動更新摘要
9. **任務管理** `delete_task`:管理未完成的任務(已完成任務將保留在系統中) 9. **任務管理** `delete_task`:管理未完成的任務(已完成任務將保留在系統中)
## 🧠 任務記憶功能
蝦米任務管理器具備長期記憶功能,可以自動保存任務執行的歷史記錄,並在規劃新任務時提供參考經驗。
### 功能特點
- 系統會自動將任務備份到 memory 目錄中
- 備份文件按照時間順序命名,格式為 tasks_backup_YYYY-MM-DDThh-mm-ss.json
- 任務規劃 Agent 會自動獲得關於如何利用記憶功能的指導
### 優勢與效益
- **避免重複工作**:參考過去任務,不必從零開始解決類似問題
- **借鑒成功經驗**:利用已驗證有效的解決方案,提高開發效率
- **學習與改進**:識別過去的錯誤或低效方案,持續優化工作流程
- **知識沉澱**:隨著系統使用時間增長,形成持續擴展的知識庫
通過有效利用任務記憶功能,系統能夠不斷積累經驗,智能化程度和工作效率將持續提升。
## 📚 文件資源 ## 📚 文件資源
- [系統架構](docs/architecture.md):詳細的系統設計與數據流說明 - [系統架構](docs/architecture.md):詳細的系統設計與數據流說明

View File

@ -194,7 +194,7 @@
### 10. clear_all_tasks ### 10. clear_all_tasks
**描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行 **描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行。同時將任務備份到 memory 子目錄,保存任務歷史記錄以供未來參考。
**參數** **參數**
@ -202,7 +202,13 @@
**返回值** **返回值**
- 返回一個包含清除操作結果的響應,包括成功或失敗的訊息 - 返回一個包含清除操作結果的響應,包括成功或失敗的訊息、備份文件名和備份位置
**重要細節**
- 在刪除任務前,會自動將當前任務列表備份到 data/memory 子目錄
- 備份文件使用時間戳命名,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json
- memory 子目錄作為長期記憶庫,用於存儲任務歷史記錄,供未來任務規劃參考
### 11. update_task ### 11. update_task
@ -270,3 +276,36 @@
- `loadTaskRelatedFiles` - 生成任務相關文件的內容摘要 - `loadTaskRelatedFiles` - 生成任務相關文件的內容摘要
- `generateFileInfo` - 生成文件基本資訊摘要 - `generateFileInfo` - 生成文件基本資訊摘要
## 任務記憶功能
任務記憶功能是蝦米任務管理器的重要特性,它使系統具備長期記憶能力,能夠保存、查詢和利用過去的任務執行經驗。
### 核心實現
1. **自動備份機制**
- 在 `clearAllTasks` 函數中實現雙重備份功能
- 將任務備份同時保存在 data 目錄和 data/memory 子目錄
- 使用時間戳命名備份文件,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json
2. **智能提示指導**
- 在 `planTask` 函數的提示詞中添加任務記憶檢索指南
- 指導 Agent 如何查找、分析和應用歷史任務記錄
- 提供智能參考建議,促進知識重用
### 使用場景
- **任務規劃時**:參考類似任務的實施方案和最佳實踐
- **問題解決時**:查閱過去遇到的類似問題及其解決方法
- **代碼重用時**:識別過去實現的可重用組件或模式
- **經驗學習時**:分析過去成功和失敗案例,持續優化工作方式
### 技術要點
- 使用相對路徑引用 memory 目錄,保持代碼的一致性和可維護性
- 確保 memory 目錄存在,如不存在則自動創建
- 保持原有的錯誤處理模式,確保系統穩定性
- 備份過程透明無感,不影響用戶正常操作流程
此功能無需額外工具或配置,系統會自動在任務清除時保存歷史記錄,並在任務規劃時提供智能指導,使 Agent 能夠充分利用過去的經驗和知識。

View File

@ -694,31 +694,49 @@ export async function clearAllTasks(): Promise<{
// 確保數據目錄存在 // 確保數據目錄存在
await ensureDataDir(); await ensureDataDir();
// 讀取現有任務,用於創建備份 // 讀取現有任務
const tasks = await readTasks(); const allTasks = await readTasks();
// 如果沒有任務,直接返回 // 如果沒有任務,直接返回
if (tasks.length === 0) { if (allTasks.length === 0) {
return { success: true, message: "沒有任務需要清除" }; return { success: true, message: "沒有任務需要清除" };
} }
// 篩選出已完成的任務
const completedTasks = allTasks.filter(
(task) => task.status === TaskStatus.COMPLETED
);
// 創建備份文件名 // 創建備份文件名
const timestamp = new Date() const timestamp = new Date()
.toISOString() .toISOString()
.replace(/:/g, "-") .replace(/:/g, "-")
.replace(/\..+/, ""); .replace(/\..+/, "");
const backupFileName = `tasks_backup_${timestamp}.json`; const backupFileName = `tasks_memory_${timestamp}.json`;
const backupFilePath = path.join(DATA_DIR, backupFileName);
// 創建備份 // 確保 memory 目錄存在
await fs.writeFile(backupFilePath, JSON.stringify({ tasks }, null, 2)); 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([]); await writeTasks([]);
return { return {
success: true, success: true,
message: `已成功清除所有任務,共 ${tasks.length} 個任務被刪除`, message: `已成功清除所有任務,共 ${allTasks.length} 個任務被刪除,已備份 ${completedTasks.length} 個已完成的任務至 memory 目錄`,
backupFile: backupFileName, backupFile: backupFileName,
}; };
} catch (error) { } catch (error) {

View File

@ -1,4 +1,6 @@
import { z } from "zod"; import { z } from "zod";
import path from "path";
import { fileURLToPath } from "url";
import { import {
getAllTasks, getAllTasks,
getTaskById, 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. 首先確定任務的確切目標和預期成果 prompt += `## 分析指引\n\n1. 首先確定任務的確切目標和預期成果
2. 2.
3. 3.
@ -231,6 +239,33 @@ export async function planTask({
- -
- 使 ddg_searchwebweb_search ... - 使 ddg_searchwebweb_search ...
##
**${MEMORY_DIR}**
1. ****
- **${MEMORY_DIR}**
- **tasks_memory_YYYY-MM-DDThh-mm-ss.json**
-
2. ****
-
-
-
3. ****
-
-
-
-
4. ****
-
-
-
## \n\n完成初步分析後使analyze_task\n\n1. **** ## \n\n完成初步分析後使analyze_task\n\n1. ****
- -
- -