Files
sanguo_moziplus_v3/docs/sub-agent-orchestration.md
T
claude_dev 449eec9df7 docs: 添加 v0.5 动态编排设计
- 创建 Main + Sub Agent 动态编排方案
- Main Agent 作为编排者,根据任务需要动态安排 Sub Agents
- Sub Agents 分为 Execute、Review、Test 专业角色
- 不是固化工作流,而是 Main 根据需求灵活调整
- 添加上下文隔离原则
- 创建工作流脚本模板

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 08:23:58 +08:00

272 lines
6.1 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.
# Sub Agent Orchestration 方案
## 概述
使用 Main + Sub Agent 架构替代 CCBClaude Code Blackboard)方案。
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ Main Agent (Planner) │
│ - 需求分析、任务拆分、指派 Sub Agent │
│ - 收集结果、最终审查、整合 │
└─────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Sub Agent 1 │ │ Sub Agent 2 │
│ (Executor) │ │ (Reviewer) │
│ - 执行编码任务 │ │ - 代码审查 │
│ - 编写测试 │ │ - 质量检查 │
└──────────────────┘ └──────────────────┘
```
## 关键特性
### 1. 默认隔离
- **会话历史隔离**Sub Agent 看不到 Main Agent 的对话
- **文件访问共享**:Sub Agent 可以读写项目文件
- **工作目录相同**:所有 Agent 在同一项目目录
### 2. 通信机制
**Main → Sub**: 通过 `Agent` 工具指派任务
```javascript
Agent({
subagent_type: "executor",
prompt: "实现用户认证 API: ..."
})
```
**Sub → Main**: 通过返回结果
```javascript
// Sub Agent 完成后返回结构化结果
return {
files: ["src/auth.ts", "src/auth.test.ts"],
tests: "12/12 通过",
status: "完成"
}
```
### 3. 并行执行
```javascript
// 并行启动多个 Sub Agent
Agent({ subagent_type: "executor", prompt: "..." })
Agent({ subagent_type: "reviewer", prompt: "..." })
```
## 工作流示例
### 完整开发流程
#### 1. Main Agent 接收需求
```javascript
// 用户: "实现用户认证功能"
// Main Agent 分析需求
```
#### 2. Main Agent 拆分任务
```javascript
const task = {
feature: "用户认证",
subtasks: [
{ role: "executor", task: "实现 JWT 认证 API" },
{ role: "executor", task: "编写单元测试" },
{ role: "reviewer", task: "代码审查" }
]
}
```
#### 3. Main Agent 指派 Sub Agent
```javascript
// 指派 Executor
const executorResult = await Agent({
subagent_type: "claude",
prompt: `
作为后端开发专家,实现用户认证 API:
1. POST /auth/login - 用户登录
2. POST /auth/register - 用户注册
3. 使用 bcrypt 和 JWT
4. 编写测试
返回结构化结果: { files, tests, status }
`
})
```
#### 4. Main Agent 收集结果
```javascript
// 指派 Reviewer
const reviewResult = await Agent({
subagent_type: "claude",
prompt: `
作为代码审查专家,审查以下文件:
${executorResult.files.join(', ')}
检查: 代码质量、测试覆盖、安全性
返回: { findings, approval }
`
})
```
#### 5. Main Agent 整合
```javascript
if (reviewResult.approval) {
// 整合代码,提交 Git
await整合提交()
}
```
## Sub Agent 类型
### 1. Executor(执行者)
**职责**
- 编写代码
- 编写测试
- 实现功能
**技能**backend-dev, frontend-dev
### 2. Reviewer(审查者)
**职责**
- 代码审查
- 质量检查
- 安全性验证
**技能**CODE-REVIEW, test-automation-skills
### 3. Planner(规划者 - Main
**职责**
- 需求分析
- 任务拆分
- 资源协调
- 最终验收
## 优势对比 CCB
| 特性 | Main+Sub | CCB |
|------|----------|-----|
| 会话隔离 | ✅ 默认 | ⚠️ 需手动管理 |
| 通信机制 | Agent 工具 | Blackboard |
| 并行执行 | ✅ 支持 | ⚠️ 复杂 |
| 上下文共享 | 通过文件 | 通过 Blackboard |
| 学习成本 | 🟢 低 | 🟡 中 |
## 实施步骤
### 步骤 1: 定义 Sub Agent 类型
在项目 `.claude/` 目录创建配置:
```json
{
"subAgents": {
"executor": {
"description": "执行编码任务",
"skills": ["backend-dev", "frontend-dev"]
},
"reviewer": {
"description": "代码审查",
"skills": ["CODE-REVIEW", "qa-test-planner"]
}
}
}
```
### 步骤 2: Main Agent 加载协调技能
```bash
# Main Agent 启动时加载
/skill architect-role
```
### 步骤 3: 工作流脚本
创建 `.claude/workflows/` 目录:
```javascript
// workflows/feature-development.js
export default {
name: "feature-development",
run: async (feature) => {
// 1. 分析
const plan = await分析需求(feature)
// 2. 指派执行
const result = await Agent({
subagent_type: "executor",
prompt: plan.executorTask
})
// 3. 审查
const review = await Agent({
subagent_type: "reviewer",
prompt: `审查: ${result.files}`
})
// 4. 整合
return 整合结果(result, review)
}
}
```
## 命名规范
- Main Agent: `main``planner`
- Sub Agent: `executor`, `reviewer`, 或具体任务名
- Agent ID: 自动生成,格式 `a_<random>`
## 调试和监控
### 查看 Sub Agent 状态
```bash
# 列出当前运行的所有 Agent
/agents
# 查看 Sub Agent 输出
Agent({ subagent_type: "executor", prompt: "..." })
// 返回 agentId,可以用 TaskOutput 查看输出
```
### Sub Agent 输出结构
```javascript
{
"agentId": "a_123abc",
"status": "completed",
"result": {
"files": ["src/auth.ts"],
"tests": "12/12 通过"
}
}
```
## 局限性
1. **Sub Agent 无法主动通信**:只能通过返回值
2. **无持久化 Blackboard**:需要用文件共享状态
3. **Agent 数量限制**:系统限制最大并发数
## 最佳实践
1. **明确任务边界**:每个 Sub Agent 职责单一
2. **结构化返回**:使用 JSON 格式返回结果
3. **文件作为状态**:用文件存储中间状态
4. **Main 协调一切**Sub Agent 只执行任务
## 相关文档
- [Agent 工具文档](https://docs.anthropic.com/claude-code/agent)
- [设计文档](./design/04-design-v0.4.md)
- [示例工作流](./05-example-workflows.md)