feat: 新增 task_archive 工具 + 步骤6强制归档,解决工作记忆无限膨胀

This commit is contained in:
root
2026-04-28 20:23:29 +08:00
parent 7543fcae72
commit 1fa548da3c
4 changed files with 87 additions and 11 deletions

View File

@ -110,6 +110,11 @@ def execute_tool(graph: Any, tool_name: str, arguments: dict) -> str:
result = execute_task_link_info(graph, arguments)
return json.dumps(result, ensure_ascii=False, default=str)
elif tool_name == "task_archive":
recorder.record("update", tool_name, arguments.get("task_id", ""))
result = execute_task_archive(graph, arguments)
return json.dumps(result, ensure_ascii=False, default=str)
elif tool_name == "task_query":
recorder.record("query", tool_name, "")
result = execute_task_query(graph, arguments)
@ -397,6 +402,42 @@ def execute_task_link_info(graph: Any, arguments: dict) -> dict:
"details": result
}
def execute_task_archive(graph: Any, arguments: dict) -> dict:
"""归档任务"""
task_id = arguments.get("task_id")
summary = arguments.get("summary", "")
if not task_id:
return {"status": "error", "message": "请指定要归档的任务ID"}
# 1. 设置任务状态为 archived
triplets_state = [
{"subject": task_id, "relation": "HAS_STATE", "object": "State_归档"}
]
graph.commit(triplets=triplets_state)
# 2. 如果有摘要,写入完成记录
if summary:
summary_triplets = [
{"subject": task_id, "relation": "归档摘要", "object": summary}
]
graph.commit(triplets=summary_triplets)
# 3. 尝试更新 description 标记为已归档
archive_triplet = [
{"subject": task_id, "relation": "has_description", "object": f"[已归档] {summary or '任务已完成'}"}
]
graph.commit(triplets=archive_triplet)
return {
"status": "success",
"task_id": task_id,
"archived": True,
"summary": summary or "无摘要",
"message": f"任务「{task_id}」已归档" + (f",摘要:{summary}" if summary else "")
}
def execute_task_query(graph: Any, arguments: dict) -> dict:
"""查询最近的任务列表"""
limit = arguments.get("limit", 10)