第 11 章
多 Agent 协作
让多个 Agent 像团队一样合作
🎯
像一个项目团队
想象一个软件项目,项目经理负责协调,前端开发写界面,后端开发写 API,测试工程师做测试。每个人各有专长,项目经理把任务分配给合适的人。多 Agent 协作也是这样 —— 一个主 Agent 协调全局,根据需要启动专门的子 Agent 来处理不同的子任务。
为什么需要多 Agent?
单个 Agent 在处理复杂任务时会遇到几个问题:
• 上下文窗口有限 —— 一个 Agent 能记住的信息量是有限的
• 任务太复杂 —— 需要同时关注多个方面(代码、测试、文档)
• 并行处理 —— 多个独立子任务可以同时进行
• 专业化 —— 不同子任务可能需要不同的提示词和工具配置
多 Agent 协作让你能把大任务分解为小任务,分配给专门的 Agent 处理。
OpenHarness 的多 Agent 架构
OpenHarness 通过以下组件实现多 Agent 协作:
🤖 Agent 工具
主 Agent 通过 Agent 工具启动子 Agent。每个子 Agent 有自己独立的对话上下文和工具集。
📨 SendMessage 工具
向已启动的子 Agent 发送消息,继续之前的对话。
👥 TeamRegistry
团队注册表,管理所有活跃的子 Agent 及其状态。
📋 TaskManager
任务管理器,协调子 Agent 的任务分配和生命周期。
启动子 Agent 的方式
系统提示词中的 Agent 工具描述
1# Agent 工具的使用方式23# 启动一个专门做代码搜索的子 Agent4Agent(5 description="搜索认证相关代码",6 prompt="在项目中找到所有与用户认证相关的文件和函数",7 subagent_type="Explore" # 探索型 Agent8)910# 启动一个做规划的子 Agent11Agent(12 description="设计重构方案",13 prompt="分析当前认证模块的架构,设计重构方案",14 subagent_type="Plan" # 规划型 Agent15)1617# 在后台启动(不阻塞主 Agent)18Agent(19 description="运行测试套件",20 prompt="运行所有测试并报告结果",21 run_in_background=True22)
主 Agent 可以这样启动子 Agent:
子 Agent 的类型
OpenHarness 预定义了几种子 Agent 类型:
🔍 Explore Agent
专门用于代码搜索和探索。拥有搜索相关的工具,但没有编辑权限。速度快、安全。
📐 Plan Agent
专门用于设计方案。可以搜索和阅读代码,但不能修改。适合在实施前做规划。
🔧 General Purpose Agent
通用 Agent,拥有完整工具集。适合需要执行操作的子任务。
每种类型的 Agent 有不同的工具集和权限,确保子 Agent 只做它应该做的事。
并行 vs 串行
多 Agent 的一个核心优势是并行处理。比如:
串行(慢):
搜索前端代码 → 搜索后端代码 → 搜索测试代码
并行(快):
同时启动 3 个 Explore Agent,分别搜索前端、后端、测试代码
主 Agent 可以通过 run_in_background=True 让子 Agent 在后台运行,自己继续做其他事情。子 Agent 完成后会自动通知主 Agent。
📌 关键要点
分而治之,各司其职
多 Agent 协作的核心理念是「分而治之」。主 Agent 负责理解任务和协调,子 Agent 负责执行具体工作。每个子 Agent 有独立的上下文和工具集,互不干扰。这种模式让 Agent 系统能处理远超单个 Agent 能力范围的复杂任务。
🧠 检验理解
为什么不让一个 Agent 独自完成所有任务?