97 lines
4.9 KiB
Markdown
97 lines
4.9 KiB
Markdown
---
|
||
name: Agent Team 协同经验教训
|
||
description: 基于 2026-04-13 文档团队实战总结的 Agent Team 协同问题、解决方案和关键经验
|
||
type: feedback
|
||
originSessionId: 4fd99c0b-ce4a-4ce4-8356-91880b65a867
|
||
---
|
||
# Agent Team 协同经验教训
|
||
|
||
> 来源: 2026-04-13 文档团队实战(4 Agent 并行:req-writer, ui-designer, ux-writer, claude-md-updater)
|
||
|
||
---
|
||
|
||
## ⚠️ 关键经验(必须遵循)
|
||
|
||
### 1. Agent 完成工作后必须立即关闭
|
||
|
||
**规则**: Agent 完成任务并发送 idle 通知后,主 Agent 必须立即发送 shutdown_request。不要等待用户提醒。
|
||
|
||
**Why**: 空闲 Agent 持续占用 API 配额和系统资源(每个 Agent 约 1-2GB 内存)。本次任务中,3 个 Agent 完成后空闲了约 15 分钟,直到用户提醒才关闭。
|
||
|
||
**How to apply**: 收到 idle_notification 且任务已标记 completed 时,立即发送 shutdown_request。不要等「更好的时机」。
|
||
|
||
### 2. Agent 可能静默完成但不标记任务
|
||
|
||
**规则**: 不能仅依赖 TaskUpdate 状态判断 Agent 工作完成。必须同时验证产出物是否存在。
|
||
|
||
**Why**: ui-designer 创建了 2084 行的 docs/05-设计-UI.md 文件,但没有通过 TaskUpdate 将 Task#3 标记为 completed。进度追踪显示 "pending" 但实际已完成。发送进度查询消息后 ui-designer 也未回复。
|
||
|
||
**How to apply**: 当 Agent 进入 idle 且长时间未更新任务状态时,主动检查文件系统(`ls -la` / `wc -l`)确认产出物。不要仅依赖 TaskList。
|
||
|
||
### 3. SendMessage 参数格式必须包含 summary
|
||
|
||
**规则**: SendMessage 的 message 参数为字符串时,必须同时提供 summary 参数。
|
||
|
||
**Why**: 第一次尝试向 3 个 Agent 发送 shutdown_request 时全部失败,错误信息为 "summary is required when message is a string"。
|
||
|
||
**How to apply**: 所有 SendMessage 调用都必须包含 summary 字段,无论 message 是字符串还是 JSON 对象。
|
||
|
||
---
|
||
|
||
## 一般经验
|
||
|
||
### Agent 间通信
|
||
|
||
4. **消息不保证回复**: 向 Agent 发送消息后,Agent 可能进入 idle 而不回复。这不是错误,是 Agent 生命周期行为。需要通过其他手段(文件检查、任务状态)判断进展。
|
||
|
||
5. **shutdown 协议**: 发送 `{"type": "shutdown_request"}` 后,Agent 会回复 `{"type": "shutdown_response", "approve": true}` 并进入 idle。这是正常的确认流程。
|
||
|
||
### 文件编辑
|
||
|
||
6. **Edit 工具对空白敏感**: old_string 必须与文件内容完全匹配,包括制表符和空格。本次任务中 Mermaid 图表编辑失败,原因是 old_string 中的缩进(tab vs spaces)与文件实际内容不匹配。遇到编辑失败时,重新 Read 文件获取精确内容。
|
||
|
||
7. **大文件分段编辑**: 850 行的 req-review-report.md 不适合一次性替换。策略是按节分段编辑(§1.3 → §4.1 → §4.2 → §5.1 → ...),每次编辑一个小节。这样做的好处是:失败影响范围小、可以逐步验证。
|
||
|
||
### 团队管理
|
||
|
||
8. **TaskUpdate 由 Agent 自行完成**: 创建任务时在 prompt 中明确要求「完成后使用 TaskUpdate 标记为 completed」。但不要依赖 Agent 一定会执行。主 Agent 应该在 Agent 报告完成后再次确认。
|
||
|
||
9. **团队清理顺序**: TeamDelete 之前,确保所有 Agent 已 shutdown。本次任务中先发送 shutdown → 收到确认 → 再执行 TeamDelete,流程正确。
|
||
|
||
### 任务规划
|
||
|
||
10. **依赖任务串行执行**: Task#5(更新 req-review-report.md)依赖 Task#1-#4 的结果。通过 TaskUpdate 的 addBlockedBy 设置依赖关系是正确的做法。但阻塞解除后需要主 Agent 手动开始执行,不会自动触发。
|
||
|
||
11. **并行任务数量控制**: 本次 4 个 Agent 并行工作在 10GB 内存环境下是可行的,但接近上限。建议同时并行不超过 3 个 Agent 执行重 IO/长上下文任务。
|
||
|
||
---
|
||
|
||
## 问题清单
|
||
|
||
| # | 问题 | 影响 | 解决方案 | 严重度 |
|
||
|---|------|------|---------|--------|
|
||
| 1 | Agent 空闲未主动关闭 | 资源浪费 15min | 收到 idle+completed 立即 shutdown | 高 |
|
||
| 2 | ui-designer 未标记任务完成 | 进度追踪不准 | 主 Agent 主动检查文件系统 | 高 |
|
||
| 3 | SendMessage 缺 summary 参数 | 关闭请求失败 | 所有 SendMessage 必须带 summary | 中 |
|
||
| 4 | Edit 空白不匹配 | 编辑失败需重试 | 失败后重新 Read 获取精确内容 | 低 |
|
||
| 5 | Agent 不回复进度查询 | 无法了解进展 | 改用文件系统检查替代 | 中 |
|
||
|
||
---
|
||
|
||
## 推荐的 Agent Team 工作流程
|
||
|
||
```
|
||
1. 创建团队 (TeamCreate)
|
||
2. 创建任务 (TaskCreate) + 设置依赖 (TaskUpdate addBlockedBy)
|
||
3. 启动并行 Agent (Agent tool with team_name)
|
||
4. 监控进展:
|
||
- 收到 teammate message → 确认产出物
|
||
- 收到 idle notification → 检查任务状态 → 完成则立即 shutdown
|
||
5. 所有并行任务完成 → 启动依赖任务
|
||
6. 所有任务完成 → 发送 shutdown_request → TeamDelete
|
||
```
|
||
|
||
---
|
||
|
||
*最后更新: 2026-04-13*
|