From 9bca0c690fb85aa4282a90114dbd520fdcfa2312 Mon Sep 17 00:00:00 2001 From: ViperEkura <3081035982@qq.com> Date: Thu, 30 Apr 2026 15:32:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0plan=20=E7=AD=89?= =?UTF-8?q?=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/ARCHITECTURE.md | 87 ++++- dashboard/src/App.vue | 5 + dashboard/src/components/MessageBubble.vue | 5 +- dashboard/src/components/room/RoomSidebar.vue | 5 +- dashboard/src/utils/api.js | 8 +- dashboard/src/utils/parallelStreamManager.js | 10 +- dashboard/src/utils/useConversations.js | 8 +- dashboard/src/views/ConversationView.vue | 81 +++- luxx/routes/__init__.py | 3 +- luxx/routes/tasks.py | 351 ++++++++++++++++++ luxx/services/task.py | 317 ++++++++++++++-- luxx/services/task_executor.py | 257 +++++++++++++ 12 files changed, 1067 insertions(+), 70 deletions(-) create mode 100644 luxx/routes/tasks.py create mode 100644 luxx/services/task_executor.py diff --git a/assets/ARCHITECTURE.md b/assets/ARCHITECTURE.md index 34586f3..8889d7d 100644 --- a/assets/ARCHITECTURE.md +++ b/assets/ARCHITECTURE.md @@ -598,7 +598,7 @@ LLM API 客户端: ### 7. 任务系统 (`services/task.py`) -用于自主任务执行和依赖管理: +用于自主任务执行和计划管理: ```mermaid classDiagram @@ -608,19 +608,24 @@ classDiagram +str goal +TaskStatus status +List~Step~ steps - +List~Task~ subtasks + +str metadata + +get_step() Step? + +is_complete() bool } class Step { +str id +str name + +str goal +List~str~ depends_on +StepStatus status + +Dict tool_calls } class TaskGraph { +topological_sort() List~Step~ +get_ready_steps() List~Step~ + +get_parallel_levels() List~List~Step~~ +detect_cycles() List~List~str~~ +validate() tuple } @@ -630,20 +635,26 @@ classDiagram +get_task() Task +update_task_status() Task +add_steps() List~Step~ + +set_steps_from_plan() List~Step~ +build_graph() TaskGraph } + class Planner { + +plan() List~Dict~ + +plan_sync() List~Dict~ + } + Task "1" o-- "*" Step - Task "1" o-- "*" Task TaskService ..> TaskGraph + Planner ..> TaskService ``` -**任务状态 (TaskStatus):** -- `PENDING` - 待处理 -- `READY` - 就绪 +**任务状态 (TaskStatus) - 五状态模型:** +- `PENDING` - 待处理/就绪 - `RUNNING` - 运行中 - `BLOCK` - 阻塞 -- `TERMINATED` - 已终止 +- `TERMINATED` - 终止 +- `COMPLETED` - 完成 **步骤状态 (StepStatus):** - `PENDING` - 待执行 @@ -652,6 +663,56 @@ classDiagram - `FAILED` - 失败 - `SKIPPED` - 跳过 +**TaskGraph 功能:** +- `topological_sort()` - 拓扑排序获取执行顺序 +- `get_ready_steps()` - 获取就绪步骤(依赖已满足) +- `get_parallel_levels()` - 获取并行执行层级 +- `detect_cycles()` - 检测循环依赖 +- `validate()` - 验证图结构 + +**Planner 功能:** +- 调用 LLM 自动分解目标为步骤 +- 支持上下文(可用工具、约束条件) +- 返回结构化步骤列表 + +### 8. 任务执行服务 (`services/task_executor.py`) + +将 Task/Plan 集成到 Agent 执行流程: + +```mermaid +classDiagram + class TaskExecutorService { + +llm: LLMClient + +generate_plan() List~Dict~ + +create_task_with_plan() Task + +get_execution_plan() Dict + } + + class AgentWithPlan { + +chat_service + +execute_with_plan() AsyncGenerator + } + + TaskExecutorService --> TaskService + AgentWithPlan --> TaskExecutorService + AgentWithPlan --> ChatService +``` + +**执行流程:** +1. 用户输入目标 → AgentWithPlan 接收 +2. TaskExecutorService.generate_plan() 调用 LLM 分解目标 +3. 创建 Task 并设置步骤 +4. 按 TaskGraph 拓扑顺序执行每个步骤 +5. 每个步骤作为独立 Agent 对话执行 +6. 步骤完成后更新状态,继续下一个 + +**SSE 事件:** +- `planning` - 计划生成中 +- `plan_created` - 计划已创建 +- `step_start` - 步骤开始 +- `step_complete` - 步骤完成 +- `task_complete` - 任务完成 + ### 7. 认证系统 (`routes/auth.py`) - JWT Bearer Token - Bcrypt 密码哈希 @@ -814,6 +875,18 @@ room_started → round_start → (message_start → message_chunk* → message_e | `/tools` | GET | 可用工具列表 | | `/tools/{name}` | GET | 工具详情 | | `/tools/{name}/execute` | POST | 执行工具 | +| `/tasks` | GET | 任务列表 | +| `/tasks` | POST | 创建任务 | +| `/tasks/{id}` | GET | 任务详情 | +| `/tasks/{id}` | PUT | 更新任务 | +| `/tasks/{id}` | DELETE | 删除任务 | +| `/tasks/{id}/steps` | POST | 添加步骤 | +| `/tasks/{id}/steps/{step_id}` | PUT | 更新步骤 | +| `/tasks/{id}/graph` | GET | 获取任务图 | +| `/tasks/{id}/ready-steps` | GET | 获取就绪步骤 | +| `/tasks/{id}/execute` | POST | 执行任务 | +| `/tasks/{id}/export` | GET | 导出任务 | +| `/tasks/import` | POST | 导入任务 | | `/health` | GET | 健康检查 | | `/` | GET | 服务信息 | diff --git a/dashboard/src/App.vue b/dashboard/src/App.vue index 07033b6..5256da6 100644 --- a/dashboard/src/App.vue +++ b/dashboard/src/App.vue @@ -1,8 +1,13 @@