調整任務提示內容,簡化描述並更新任務分析與執行指引,提升可讀性與使用者體驗。新增任務記憶檢索指南,強調有效利用歷史任務以提高效率。更新任務驗證標準與質量要求,確保任務執行的完整性與一致性。

This commit is contained in:
siage 2025-04-13 23:56:38 +08:00
parent 57e56137b0
commit 12d4f84325

View File

@ -81,10 +81,10 @@ export async function planTask({
requirements,
existingTasksReference = false,
}: z.infer<typeof planTaskSchema>) {
let prompt = `## 任務分析請求\n\n請仔細分析以下任務問題,理解其核心要求、範圍和約束條件:\n\n\`\`\`\n${description}\n\`\`\`\n\n`;
let prompt = `## 任務分析\n\n${description}\n\n`;
if (requirements) {
prompt += `## 附加要求與限制條件\n\n請確保方案完全符合以下要求:\n\n\`\`\`\n${requirements}\n\`\`\`\n\n`;
prompt += `## 要求與限制\n\n${requirements}\n\n`;
}
// 當 existingTasksReference 為 true 時,從數據庫中載入所有任務作為參考
@ -102,12 +102,11 @@ export async function planTask({
// 如果存在任務,則添加到提示詞中
if (allTasks.length > 0) {
prompt += `## 現有任務參考\n\n您正在對現有任務進行調整或延續規劃。以下任務資訊將作為您分析和規劃的基礎:\n\n`;
prompt += `## 現有任務參考\n\n`;
// 添加已完成任務的參考
if (completedTasks.length > 0) {
prompt += `### 已完成的任務(僅供參考,不可修改)\n\n`;
prompt += `以下任務已標記為完成,作為系統穩定功能的基石和固定參考點:\n\n`;
prompt += `### 已完成任務\n\n`;
// 最多顯示10個已完成任務避免提示詞過長
const tasksToShow =
@ -133,14 +132,13 @@ export async function planTask({
});
if (completedTasks.length > 10) {
prompt += `\n*僅顯示前10個已完成任務實際 ${completedTasks.length}已完成任務*\n`;
prompt += `\n*僅顯示前10個,共 ${completedTasks.length}*\n`;
}
}
// 添加未完成任務的參考
if (pendingTasks.length > 0) {
prompt += `\n### 未完成的任務(可根據需要調整)\n\n`;
prompt += `以下任務尚未完成,您可以根據新需求對其進行調整或重新規劃:\n\n`;
prompt += `\n### 未完成任務\n\n`;
pendingTasks.forEach((task, index) => {
// 使用摘要提取工具處理較長的描述
@ -165,48 +163,27 @@ export async function planTask({
});
}
prompt += `\n## 任務調整指南\n\n`;
prompt += `規劃新任務或調整現有任務時,請嚴格遵循以下五項原則:\n\n`;
prompt += `1. **已完成任務保護原則** - 已完成的任務是系統穩定功能的基石,絕對不可修改或刪除。\n`;
prompt += `2. **未完成任務可調整原則** - 未完成的任務可以根據新需求進行調整,包括修改描述、依賴關係等,或建議移除。\n`;
prompt += `3. **任務ID一致性原則** - 引用現有任務時必須使用其原始ID以確保系統跟踪的準確性。\n`;
prompt += `4. **依賴關係完整性原則** - 調整任務計劃時必須維護依賴關係的完整性:\n`;
prompt += ` - 不創建循環依賴\n`;
prompt += ` - 不依賴已標記為移除的任務\n`;
prompt += ` - 確保新增依賴關係合理且必要\n`;
prompt += `5. **任務延續性原則** - 新任務應與現有任務構成連貫整體,維持整體計劃的邏輯性和可行性。\n\n`;
prompt += `**重要提醒:** 系統強制執行已完成任務保護機制,無法修改已完成的任務。請在規劃階段充分考慮這一限制。\n\n`;
prompt += `\n## 任務調整原則\n\n`;
prompt += `1. **已完成任務保護** - 已完成任務不可修改或刪除\n`;
prompt += `2. **未完成任務可調整** - 可根據新需求修改未完成任務\n`;
prompt += `3. **任務ID一致性** - 引用現有任務必須使用原始ID\n`;
prompt += `4. **依賴關係完整性** - 避免循環依賴,不依賴已標記移除的任務\n`;
prompt += `5. **任務延續性** - 新任務應與現有任務構成連貫整體\n\n`;
// 添加選擇性任務更新模式指導
prompt += `## 選擇性任務更新指南\n\n`;
prompt += `任務更新時,您可以選擇以下三種更新模式,每種模式適用於不同的場景:\n\n`;
prompt += `## 任務更新模式\n\n`;
prompt += `### 1. **追加模式(append)**\n`;
prompt += `- **說明**:保留所有現有任務,僅添加新任務\n`;
prompt += `- **適用場景**:逐步擴展功能,添加獨立的新特性,現有任務計劃仍然有效\n`;
prompt += `- **使用方式**split_tasks 工具中設置 \`updateMode="append"\`\n`;
prompt += `- **潛在問題**:長期使用可能導致積累過多已不再相關但未完成的任務\n\n`;
prompt += `- 保留所有現有任務,僅添加新任務\n`;
prompt += `- 適用:逐步擴展功能,現有計劃仍有效\n\n`;
prompt += `### 2. **覆蓋模式(overwrite)**\n`;
prompt += `- **說明**:清除所有現有未完成任務,完全使用新任務列表替換\n`;
prompt += `- **適用場景**:徹底變更方向,現有未完成任務已完全不相關\n`;
prompt += `- **使用方式**split_tasks 工具中設置 \`updateMode="overwrite"\`\n`;
prompt += `- **潛在問題**:可能會丟失有價值的未完成任務,需要確保所有重要任務都在新列表中\n\n`;
prompt += `- 清除所有現有未完成任務,完全使用新任務列表\n`;
prompt += `- 適用:徹底變更方向,現有未完成任務已不相關\n\n`;
prompt += `### 3. **選擇性更新模式(selective)**\n`;
prompt += `- **說明**:根據任務名稱匹配選擇性地更新任務,保留不在列表中的現有任務\n`;
prompt += `- **適用場景**:部分調整任務計劃,保留部分未完成任務,更新或添加其他任務\n`;
prompt += `- **使用方式**split_tasks 工具中設置 \`updateMode="selective"\`\n`;
prompt += `- **工作原理**\n`;
prompt += ` 1. 對於名稱相同的任務更新其內容描述、注釋等保留原ID和創建時間\n`;
prompt += ` 2. 新任務名稱的條目將被創建為新任務\n`;
prompt += ` 3. 不在提交列表中的現有任務將被保留不變\n`;
prompt += `- **最佳實踐**:在需要微調部分任務時優先選擇此模式,既避免重建所有任務,又能保持計劃的連續性\n\n`;
prompt += `### 實際應用建議\n`;
prompt += `- 對於小範圍調整,優先使用 **selective** 模式,精確更新目標任務\n`;
prompt += `- 需要添加新功能時,可使用 **append** 模式保留現有工作\n`;
prompt += `- 僅在徹底重構計劃時使用 **overwrite** 模式,謹慎權衡是否真正需要刪除所有未完成任務\n`;
prompt += `- 無論使用哪種模式,始終需要**維護依賴關係的完整性和正確性**\n\n`;
prompt += `- 根據任務名稱匹配選擇性更新任務,保留其他現有任務\n`;
prompt += `- 適用:部分調整任務計劃,保留部分未完成任務\n`;
prompt += `- 工作原理:更新同名任務,創建新任務,保留其他任務\n\n`;
}
} catch (error) {
console.error("載入現有任務時發生錯誤:", error);
@ -219,66 +196,26 @@ export async function planTask({
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.
4.
5.
6.
prompt += `## 分析指引\n\n1. 確定任務的目標和預期成果
2.
3.
4.
5.
6. \n\n`;
prompt += `## 任務記憶檢索指南\n\n過去任務備份在 **${MEMORY_DIR}** 目錄:\n\n`;
prompt += `1. **查找** - 按時間或相關性選擇特定備份\n`;
prompt += `2. **分析** - 了解相似任務的經驗和解決方案\n`;
prompt += `3. **應用** - 借鑒成功經驗,避免重複錯誤\n\n`;
prompt += `有效利用任務記憶可提高效率和解決方案的一致性。\n\n`;
## \n\n-
-
-
-
prompt += `## 資訊收集指南\n\n`;
prompt += `1. **詢問用戶** - 當你對任務要求有疑問時,直接詢問用戶\n`;
prompt += `3. **網路搜索** - 當出現你不理解的名詞或概念時,使用網路搜尋工具找尋答案\n\n`;
##
-
-
-
- 使 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. ****
-
-
-
-
2. ****
-
-
-
-
`;
prompt += `## 下一步行動\n\n完成初步分析後使用「analyze_task」工具提交分析結果包含\n\n`;
prompt += `1. **任務摘要** - 目標、範圍、挑戰和限制條件\n`;
prompt += `2. **初步解答構想** - 可行的技術方案和實施計劃\n`;
return {
content: [
@ -317,51 +254,42 @@ export async function analyzeTask({
initialConcept,
previousAnalysis,
}: z.infer<typeof analyzeTaskSchema>) {
let prompt = `## 代碼庫分析任務\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n已收到您的初步解答構想:\n\n\`\`\`\n${initialConcept}\n\`\`\`\n\n`;
let prompt = `## 代碼庫分析\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n已收到初步解答構想:\n\n\`\`\`\n${initialConcept}\n\`\`\`\n\n`;
prompt += `## 技術審核指引\n\n請執行以下詳細的技術分析步驟\n\n### 1. 代碼庫分析
-
-
-
-
prompt += `## 技術審核要點\n\n### 1. 代碼庫分析
-
-
-
### 2.
-
-
-
-
-
-
-
### 3.
-
-
-
-
-
-
### 4.
-
-
-
-
-
-
`;
`;
if (previousAnalysis) {
prompt += `\n\n## 迭代分析\n\n請對照先前的分析結果進行比較和改進\n\n\`\`\`\n${previousAnalysis}\n\`\`\`\n\n請明確識別\n1. 哪些問題已經解決,以及解決方案的有效性
2.
3.
4. `;
prompt += `\n\n## 迭代分析\n\n請對照先前分析結果\n\n\`\`\`\n${previousAnalysis}\n\`\`\`\n\n請識別
1.
2.
3.
4. `;
}
prompt += `\n\n## 下一步行動\n\n完成深入分析後請使用「reflect_task」工具提交您的最終分析必須包含\n\n1. **原始任務摘要**
-
-
prompt += `\n\n## 下一步行動\n\n完成分析後使用「reflect_task」工具提交最終分析包含\n\n1. **原始任務摘要** - 保持與第一階段一致
2. **** -
2. ****
-
-
-
-
-
`;
`;
return {
content: [
@ -402,58 +330,44 @@ export async function reflectTask({
summary,
analysis,
}: z.infer<typeof reflectTaskSchema>) {
const prompt = `## 解決方案反思與評估\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n### 詳細分析結果\n\`\`\`\n${analysis}\n\`\`\`\n\n## 批判性評估指引\n\n請從以下多個維度對您的解決方案進行全面且批判性的審查\n\n### 1. 技術完整性評估
-
-
-
-
-
const prompt = `## 方案評估\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n### 分析結果\n\`\`\`\n${analysis}\n\`\`\`\n\n## 評估要點\n\n### 1. 技術完整性
-
-
-
-
### 2.
- 使
-
-
-
### 2.
- 使
-
-
-
### 3.
-
-
-
- 使
-
### 3.
-
-
-
-
## \n\n基於您的反思\n\n- ****
- 使analyze_task
-
-
## \n\n根據評估結果選擇後續行動\n\n- ****使analyze_task
- **調**
- ****使split_tasks使使split_tasks
- **調**
-
- 調
## split_tasks
- **append** -
- **overwrite** -
- **selective** -
- **clearAllTasks** -
- ****
- 使split_tasks
- 使split_tasks
-
-
##
1. **** -
2. **** -
3. **** -
## split_tasks updateMode
- ****使 updateMode="append"
- ****使 updateMode="overwrite"
- ****使 updateMode="selective"
- ****使 updateMode="clearAllTasks"
## split_tasks split_tasks
- 使使split_tasks
-
##
1. **** -
2. **** - pseudocode
3. **** -
`;
`;
return {
content: [
@ -621,50 +535,26 @@ export async function splitTasks({
// 獲取所有任務,用於顯示完整的依賴關係
const allTasks = await getAllTasks();
let prompt = `## 任務拆分結果 - ${updateMode} 模式\n\n### 系統確認\n任務已成功${
let prompt = `## 任務拆分 - ${updateMode} 模式\n\n`;
prompt += `任務已${
updateMode === "overwrite"
? "覆蓋未完成的任務清單(已完成任務已保留)"
? "覆蓋未完成任務(已完成任務已保留)"
: updateMode === "selective"
? "選擇性更新任務清單"
? "選擇性更新"
: "新增至現有任務清單"
}\n\n`;
prompt += `## 任務拆分指南\n\n### 有效的任務拆分策略\n\n1. **按功能分解** - 將大功能拆分為獨立可測試的子功能
-
-
-
prompt += `## 拆分策略\n\n1. **按功能分解** - 獨立可測試的子功能,明確輸入輸出
2. **** - 沿
3. **** -
4. **** - \n\n`;
2. **** - 沿
-
- 便
-
prompt += `## 任務質量審核\n\n1. **任務原子性** - 每個任務足夠小且具體,可獨立完成
2. **** -
3. **** - \n\n`;
3. **** -
-
-
-
4. **** -
-
-
-
## \n\n請根據以下標準對任務拆分進行嚴格的質量審核\n\n### 1. \n-
-
-
-
### 2. \n-
-
-
-
### 3. \n-
-
-
-
## \n\n${createdTasks
prompt += `## 任務清單\n\n${createdTasks
.map((task, index) => {
let taskInfo = `### 任務 ${index + 1}${task.name}\n**ID:** \`${
task.id
@ -711,27 +601,17 @@ export async function splitTasks({
return taskInfo;
})
.join(
"\n"
)}\n\n## \n\n### \n在建立新任務時\n\n1. **使**使 \`"建立用戶界面"\`\n2. **使用任務ID**:使用任務的唯一標識符,如 \`"${
createdTasks.length > 0
? createdTasks[0].id
: "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
}"\`\n
###
- **** -
- **** -
- **** -
- **** -
.join("\n")}\n\n`;
##
prompt += `## 依賴關係管理\n\n`;
prompt += `- 設置依賴可使用任務名稱或任務ID\n`;
prompt += `- 最小化依賴數量,只設置直接前置任務\n`;
prompt += `- 避免循環依賴,確保任務圖有向無環\n`;
prompt += `- 平衡關鍵路徑,優化並行執行可能性\n\n`;
###
-
-
-
## \n\n請選擇下一步行動\n\n- split_tasks調\n\n- `;
prompt += `## 決策點\n\n`;
prompt += `- 發現任務拆分不合理重新呼叫「split_tasks」調整\n`;
prompt += `- 確認任務拆分完善:生成執行計劃,確定優先順序\n`;
return {
content: [
@ -873,10 +753,10 @@ export async function executeTask({
await updateTaskStatus(taskId, TaskStatus.IN_PROGRESS);
// 構建任務執行提示
let prompt = `## 任務執行指示\n\n### 任務詳情\n\n- **名稱:** ${
task.name
}\n- **ID:** \`${task.id}\`\n- **描述:** ${task.description}\n${
task.notes ? `- **注意事項:** ${task.notes}\n` : ""
let prompt = `## 任務執行\n\n**名稱:** ${task.name}\n**ID:** \`${
task.id
}\`\n**描述:** ${task.description}\n${
task.notes ? `**注意事項:** ${task.notes}\n` : ""
}\n`;
// ===== 增強:顯示實現指南(如果有) =====
@ -1035,74 +915,18 @@ export async function executeTask({
prompt += contextInfo;
}
prompt += `\n## 執行指引\n\n### 理解與規劃階段
1. **** -
-
-
-
prompt += `\n## 執行步驟\n\n`;
prompt += `1. **分析需求** - 理解任務需求和約束條件\n`;
prompt += `2. **設計方案** - 制定實施計劃和測試策略\n`;
prompt += `3. **實施方案** - 按計劃執行,處理邊緣情況\n`;
prompt += `4. **測試驗證** - 確保功能正確性和穩健性\n\n`;
2. **** -
-
-
-
prompt += `## 質量要求\n\n`;
prompt += `- **範圍管理** - 僅修改相關代碼,避免功能蔓延\n`;
prompt += `- **代碼質量** - 符合編碼標準,處理異常情況\n`;
prompt += `- **效能考量** - 注意算法效率和資源使用\n\n`;
###
3. **** -
-
-
-
-
4. **** -
-
-
- 使
-
###
5. **** -
-
-
-
-
6. **** -
- 使 update_task_files
- 便
-
## \n\n###
- **** -
-
-
-
- **** -
-
- 使
-
###
- **** -
-
-
-
-
- **** - 使
-
-
-
-
## \n\n完成實施後使verify_task
- -
- -
- -
- - 滿
使complete_task`;
prompt += `完成後使用「verify_task」工具進行驗證。`;
return {
content: [
@ -1150,18 +974,18 @@ export async function verifyTask({ taskId }: z.infer<typeof verifyTaskSchema>) {
}
// 構建基本的任務詳情
let prompt = `## 任務驗證評估\n\n### 任務資料\n\n- **名稱:** ${
task.name
}\n- **ID:** \`${task.id}\`\n- **描述:** ${task.description}\n${
task.notes ? `- **注意事項:** ${task.notes}\n` : ""
let prompt = `## 任務驗證\n\n**名稱:** ${task.name}\n**ID:** \`${
task.id
}\`\n**描述:** ${task.description}\n${
task.notes ? `**注意事項:** ${task.notes}\n` : ""
}\n`;
// 新增:顯示任務特定的驗證標準(如果有)
// 顯示任務特定的驗證標準(如果有)
if (task.verificationCriteria) {
prompt += `\n## 任務特定驗證標準\n\n${task.verificationCriteria}\n\n`;
prompt += `\n## 驗證標準\n\n${task.verificationCriteria}\n\n`;
}
// 新增:顯示實現指南的主要內容(如果有)
// 顯示實現指南摘要(如果有)
if (task.implementationGuide) {
prompt += `\n## 實現指南摘要\n\n${
task.implementationGuide.length > 200
@ -1170,142 +994,19 @@ export async function verifyTask({ taskId }: z.infer<typeof verifyTaskSchema>) {
}\n\n`;
}
// 新增:顯示分析結果摘要(如果有)
// 顯示分析結果摘要(如果有)
if (task.analysisResult) {
prompt += `\n## 分析要點摘要\n\n在驗證時應考慮原始分析中強調的以下關鍵點\n\n${extractSummary(
prompt += `\n## 分析要點\n\n${extractSummary(
task.analysisResult,
300
)}\n\n`;
}
prompt += `## 完整性驗證標準\n\n請根據以下關鍵標準進行嚴格的質量檢查為每個評估項目提供詳細的證據和具體範例
### 1. (30%)
####
- **** -
-
-
-
- **** -
-
-
-
- **** -
-
-
-
####
- **(90-100%)**:
- **(75-89%)**:
- **(60-74%)**:
- **(<60%)**: 關鍵功能缺失或實現不正確需要重大修改
### 2. (30%)
####
- **** -
-
-
-
- **** -
-
-
-
- **** -
-
-
-
####
- **(90-100%)**:
- **(75-89%)**:
- **(60-74%)**:
- **(<60%)**: 代碼質量較差存在明顯的架構問題或錯誤處理不足
### 3. (20%)
####
- **** -
-
-
- 使
- **** -
-
-
-
- **** -
- API或界面的變更是否維持兼容性
-
-
####
- **(90-100%)**:
- **(75-89%)**:
- **(60-74%)**:
- **(<60%)**: 集成存在明顯問題對現有系統造成破壞性影響
### 4. (20%)
####
- **** -
- 使
-
-
- **** -
-
- 使
-
- **** -
-
- 使
- IO操作的效率
####
- **(90-100%)**:
- **(75-89%)**: 滿
- **(60-74%)**:
- **(<60%)**: 存在明顯的性能問題或資源使用不當
## \n\n請提供詳細的驗證結果報告
1. ****
-
-
2. ****
-
-
-
3. ****
-
-
-
4. ****
-
-
## \n\n根據您的全面驗證評估
- ****
-
-
-
- plan_task
- ****
-
- 使complete_task
-
`;
prompt += `## 驗證標準\n\n1. **需求符合性(30%)** - 功能完整性、約束條件遵循、邊緣情況處理\n2. **技術質量(30%)** - 架構一致性、程式健壯性、實現優雅性\n3. **集成兼容性(20%)** - 系統整合、互操作性、兼容性維護\n4. **性能可擴展性(20%)** - 效能優化、負載適應性、資源管理\n\n## 報告要求\n\n提供整體評分和評級各項標準評估問題與建議及最終結論。\n\n`;
prompt += `## 決策點\n\n根據驗證結果選擇\n`;
prompt += `- **嚴重錯誤**使用「plan_task」工具重新規劃任務\n`;
prompt += `- **輕微錯誤**:直接修復問題\n`;
prompt += `- **無錯誤**使用「complete_task」工具標記完成\n`;
return {
content: [
@ -1417,7 +1118,7 @@ export async function deleteTask({ taskId }: z.infer<typeof deleteTaskSchema>) {
content: [
{
type: "text" as const,
text: `## 操作被拒絕\n\n任務 "${task.name}" (ID: \`${task.id}\`) 已完成,不允許刪除已完成的任務。\n\n如需清理任務請聯絡系統管理員。`,
text: `## 操作被拒絕\n\n任務 "${task.name}" (ID: \`${task.id}\`) 已完成,不允許刪除已完成的任務。`,
},
],
isError: true,
@ -1432,10 +1133,6 @@ export async function deleteTask({ taskId }: z.infer<typeof deleteTaskSchema>) {
type: "text" as const,
text: `## ${result.success ? "操作成功" : "操作失敗"}\n\n${
result.message
}\n\n${
result.success
? `任務 "${task.name}" (ID: \`${task.id}\`) 已成功從系統中刪除。`
: ""
}`,
},
],
@ -1463,7 +1160,7 @@ export async function clearAllTasks({
content: [
{
type: "text" as const,
text: `## 操作取消\n\n未確認清除操作。如要清除所有任務請將 confirm 參數設為 true。\n\n⚠ 警告:此操作將刪除所有未完成的任務且無法恢復。請謹慎操作`,
text: `## 操作取消\n\n未確認清除操作。如要清除所有任務請將 confirm 參數設為 true。\n\n⚠ 此操作將刪除所有未完成的任務且無法恢復。`,
},
],
};
@ -1493,7 +1190,7 @@ export async function clearAllTasks({
result.message
}${
result.backupFile
? `\n\n系統已自動創建備份文件: \`${result.backupFile}\``
? `\n\n已自動創建備份: \`${result.backupFile}\``
: ""
}`,
},