GPU_GUARD_MONOREPO/docs/code-wiki/entities/crew-orchestration.md
2026-05-20 21:39:12 +08:00

109 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Multi-Agent Crew 编排系统
created: 2026-04-14
updated: 2026-04-14
type: entity
tags: [agent, architecture, websocket, runtime]
sources: [packages/backend/src/modules/netaclaw/service/crew_orchestrator.ts, packages/backend/src/modules/netaclaw/entity/crew.ts, packages/frontend/src/modules/agent/views/crew-editor.vue]
---
# Multi-Agent Crew 编排系统
多智能体协作框架,支持主 Agent 通过委派、并行执行、升级等机制协调多个子 Agent 完成复杂任务。分为后端编排引擎和前端可视化画布编辑器两部分。
## 核心概念
- **Crew集群**:一组 Agent 的编排单元,包含一个主 Agent 和多个成员 Agent
- **主 Agent**:负责任务分解和委派决策,拥有 delegate_task / delegate_parallel / escalate 三个编排工具
- **子 Agent**:接收委派任务并独立执行,拥有内置工具和 Skill 工具(不含委派工具)
- **升级Escalate**:主 Agent 遇到无法自主解决的问题时暂停执行,请求人工介入
## 数据模型4个表
| 表名 | Entity | 用途 |
|------|--------|------|
| `netaclaw_crew` | `entity/crew.ts` | 集群定义(画布、触发配置、委派提示) |
| `netaclaw_crew_agent` | `entity/crew_agent.ts` | 集群-Agent 关联(角色、画布位置、分组) |
| `netaclaw_crew_run` | `entity/crew_run.ts` | 运行记录状态、token、暂停状态 |
| `netaclaw_crew_task` | `entity/crew_task.ts` | 子任务记录(支持嵌套 parentTaskId |
### 关键字段
**netaclaw_crew**: `name`(唯一) | `label` | `masterAgentId` | `canvasData`(JSON) | `triggerConfig`(JSON) | `delegateHints`(文本) | `status`(0草稿/1发布) | `maxConcurrent`(默认3) | `taskTimeout`(默认300秒) | `retryPolicy`(JSON)
**netaclaw_crew_run**: `crewId` | `triggerType`(manual/cron/webhook/api) | `status`(pending/running/paused/completed/failed/stopped) | `masterSessionId` | `pausedState`(JSON,升级暂停时的对话) | `tokenUsage`(JSON)
## 后端关键文件
| 文件 | 职责 |
|------|------|
| `service/crew_orchestrator.ts` | 核心编排器:启动、运行、暂停、恢复 |
| `service/crew_delegate.ts` | 委派执行器:串行和并行子 Agent 执行 |
| `service/crew_scheduler.ts` | Cron 定时调度Singleton启动时恢复 |
| `service/crew.ts` | 集群 CRUD、画布保存、成员同步、发布校验 |
| `service/crew_types.ts` | 类型定义DelegateResult, CrewCallbacks, CrewRunContext |
| `gateway/crew_server.ts` | WebSocket `/crew` 命名空间 |
| `controller/admin/crew.ts` | 集群 APICRUD + saveCanvas/publish |
| `controller/admin/crew_trigger.ts` | 触发 APIstart/stop/resume |
| `controller/admin/crew_run.ts` | 运行记录查询 API |
## 编排执行流程
```
触发运行(手动/定时/Webhook/API
→ CrewOrchestratorService.start()
├─ 加载集群、主Agent、成员Agent
├─ 创建 crew_run 记录
└─ 异步执行(立即返回 runId
→ runOrchestration()
├─ 构建增强系统提示词(原始 + 团队成员 + 委派提示 + 工具说明)
├─ 构建工具集(内置 + 委派 + Skill
└─ 执行主Agent的 ReAct 循环
├─ delegate_task → executeSubAgent()(串行)
├─ delegate_parallel → executeParallel()(按 maxConcurrent 分批)
└─ escalate → 暂停,等待人工介入
→ 运行完成,更新状态和 token 统计
```
## 升级恢复机制
```
主Agent 调用 escalate → 持久化 pausedState → 推送 escalation 事件
→ 前端显示升级提示 → 用户输入处理意见
→ POST /crew_trigger/resume → resolver(userMessage)
→ Promise resolve → 主Agent 继续 ReAct 循环
```
关键实现:`escalateResolvers` Map 存储 resolve 回调escalate 工具返回不 resolve 的 Promise。
## 前端画布编辑器
| 文件 | 职责 |
|------|------|
| `views/crew-editor.vue` | 编辑器主页面VueFlow 画布 + 侧栏 + 属性面板) |
| `views/crew-monitor.vue` | 运行监控页面(运行列表 + 详情 + 日志) |
| `hooks/crew-canvas.ts` | 画布操作节点增删、主Agent设置、序列化 |
| `hooks/crew-monitor.ts` | WebSocket 监控(连接 `/crew` 命名空间) |
| `hooks/crew-orchestration.ts` | 连线转委派提示词(串行/并行建议) |
| `store/crew.ts` | Pinia Store集群列表、详情、成员 |
| `components/crew/*.vue` | 10个子组件节点、侧栏、属性面板、日志等 |
## WebSocket 协议(`/crew` 命名空间)
| 事件 | 方向 | 说明 |
|------|------|------|
| `crew:trigger` | 客户端→服务端 | 触发集群运行 |
| `crew:control` | 客户端→服务端 | 控制运行stop/resume/pause/retry |
| `crew:run:status` | 服务端→客户端 | 运行状态变化 |
| `crew:task:status` | 服务端→客户端 | 任务状态变化 |
| `crew:log` | 服务端→客户端 | 日志消息 |
| `crew:escalation` | 服务端→客户端 | 升级事件 |
## 相关页面
- [[netaclaw-module]] — 所属模块
- [[agent-runtime]] — 子 Agent 执行复用 runAgent()
- [[tool-system]] — delegate_task / delegate_parallel / escalate 工具
- [[websocket-gateway]] — `/crew` 命名空间
- [[skill-system]] — 主/子 Agent 均可加载 Skill