Task
任务是一次需求的生命周期载体,也是计费、追踪、取证的主键。生产环境的主执行链路走
TaskExecutionService。
职责
| 负责 | 不负责 |
|---|---|
| 任务创建、查询、更新、软删除 | 定义工作流结构(workflow) |
| 任务与 Workflow / Dialog 的关联 | 需求翻译(demand-translation) |
| 节点执行与结果保存 | Agent 匹配(agent-matching) |
| 执行状态机与重试 | 结果综合的语义(reporter / 内部 Agent) |
| 需求摘要与确认 | 交付验收(fulfillment) |
数据模型
MySQL tasks
| 字段 | 说明 |
|---|---|
id | 主键 |
userId | 需求方 |
workflowId | 关联的 Mongo 工作流 |
status | pending / matching / workflow_ready / executing / completed / failed |
summary | AI 提取的需求摘要(JSON) |
title / description | 基本信息 |
createdAt / updatedAt | 时间戳 |
相关实体:
TaskExecution:一次执行的节点结果与时间线TaskSummaryHistory:摘要的历史版本
Task在 MySQL,Workflow在 MongoDB,两者是软关联。这带来双库状态同步问题,见 数据模型。
服务结构
| 服务 | 职责 |
|---|---|
TaskService | CRUD、状态流转、摘要确认 |
TaskExecutionService | 生产主链路:拓扑排序、节点执行、结果保存 |
TaskQueryService | 查询、列表、详情 |
TaskSummaryService | AI 提取需求摘要 |
TaskWorkflowMatchService | 推荐与选择工作流 |
TaskStoreService | 存储与检索封装 |
ChatExecuteService | Chat 两段式桥接(prepare / execute) |
TaskFeedbackService | 用户反馈 |
接口
任务
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/task | 创建任务 |
| POST | /api/task/marketplace | 从市场创建 |
| GET | /api/task/list | 列表 |
| GET | /api/task/agent | Agent 视角列表 |
| GET | /api/task/:id | 详情 |
| GET | /api/task/:id/with-dialog | 详情 + 对话 |
| PUT | /api/task/:id | 更新 |
| DELETE | /api/task/:id | 硬删除 |
| DELETE | /api/task/:id/soft | 软删除 |
路由顺序上
/agent必须在/:id之前声明,否则会被当作 id。
摘要与执行
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/task/:id/summary | 生成需求摘要 |
| GET | /api/task/:id/summary | 读取摘要 |
| POST | /api/chat/prepare | 翻译 + 匹配 + 建工作流 + 推任务 |
| POST | /api/chat/execute | 启动执行 |
WebSocket
task.gateway.ts 推送任务状态与节点进度。
状态机
pending
│ 确认摘要
▼
matching
│ 选择工作流
▼
workflow_ready
│ 执行
▼
executing ──▶ completed
│
└──────▶ failed(可重试)执行流程
startExecution(taskId)
├─ 读取 Task 与 Workflow
├─ topologicalSort(nodes)
└─ 对每个节点
├─ 内部 Agent(domain=platform)
│ └─ EngineChatService.directPrompt()
├─ 外部 Agent
│ ├─ A2AClientService.executeTask()
│ └─ 失败 → AgentGatewayService.pushTask()
└─ 内置节点 → 平台代码
│
├─ 保存节点结果
├─ 旁挂写状态(若声明 stateWrites)
└─ 触发下游节点边界与限制
| 限制 | 说明 |
|---|---|
| 双库状态 | Task 在 MySQL,Workflow 在 Mongo,需要显式同步 |
| 节点结果保存在 MySQL | 大对象会带来存储压力 |
| 重试粒度是节点 | 不支持从中间状态恢复整条链路 |
| 并发执行 | 无依赖节点并行,但缺少全局并发上限配置 |
| 取消 | 无完整取消语义,已推送的外部任务按 SLA 处理 |
源码位置
libs/modules/src/task/
├── task.controller.ts
├── task.gateway.ts
├── task-feedback.controller.ts
├── services/
│ ├── task.service.ts
│ ├── task-execution.service.ts
│ ├── task-query.service.ts
│ ├── task-summary.service.ts
│ ├── task-workflow-match.service.ts
│ ├── task-store.service.ts
│ └── chat-execute.service.ts
├── entities/
└── dto/