多 Agent 系统 (Multi-Agent Systems)
单体 Agent 往往难以处理过于复杂的任务。通过将任务分解,让多个专注于特定领域的 Agent 协作,我们可以构建出更强大、更稳定的系统。LangGraphGo 的图结构天然适合编排多 Agent 系统。
1. Supervisor 模式 (监督者模式)
背景与功能
这是最经典的多 Agent 组织形式。一个中央的 "Supervisor" Agent 充当项目经理,它接收用户请求,将任务分解并分配给下属的 "Worker" Agent(如研究员、程序员、测试员)。Worker 完成任务后向 Supervisor 汇报,Supervisor 汇总结果或要求重做。
实现原理
在 LangGraphGo 中,Supervisor 是一个特殊的节点(通常是一个 LLM),它的输出决定了下一个被激活的节点(Worker)。这通过条件边实现。所有 Worker 节点的输出边都指回 Supervisor,形成一个星形拓扑结构。
代码展示
// 1. 定义 Worker 节点
g.AddNode("Researcher", researcherAgent)
g.AddNode("Coder", coderAgent)
// 2. 定义 Supervisor 节点
// 使用预构建的 CreateSupervisor 简化创建
supervisor := prebuilt.CreateSupervisor(
model,
[]string{"Researcher", "Coder"},
prebuilt.WithSupervisorSystemMessage("你是一个技术主管,负责协调研究和编码..."),
)
g.AddNode("Supervisor", supervisor)
// 3. 定义路由逻辑
// Supervisor 的输出是一个指令,告诉图下一步去哪个 Worker
g.AddConditionalEdge("Supervisor", func(ctx context.Context, state interface{}) string {
return state.(AgentState).Next // 例如返回 "Researcher"
})
// 4. 定义回路
// Worker 完成后总是回到 Supervisor
g.AddEdge("Researcher", "Supervisor")
g.AddEdge("Coder", "Supervisor")
2. Hierarchical Teams (分层团队)
背景与功能
当团队规模变大时,扁平的 Supervisor 模式会遇到瓶颈。分层团队模式引入了层级结构:Supervisor 管理的是子图(Subgraphs),而每个子图本身可能也是一个由 Supervisor 管理的小组。
例如,一个 "Dev Team" 子图可能包含 "Backend" 和 "Frontend" Agent。顶层 Supervisor 只需与 "Dev Team" 交互,而不需要关心具体的后端或前端细节。
实现原理
利用 LangGraphGo 的子图特性。我们将每个团队封装为一个 `CompiledGraph`,然后将其作为节点添加到上层图中。对于上层图来说,子图就是一个普通的节点。
代码展示
// 1. 构建 Research Team 子图
researchGraph := graph.NewStateGraph(...)
// ... 添加 researcher agents ...
researchTeam := researchGraph.Compile()
// 2. 构建 Coding Team 子图
codingGraph := graph.NewStateGraph(...)
// ... 添加 coder agents ...
codingTeam := codingGraph.Compile()
// 3. 构建顶层图
topGraph := graph.NewStateGraph(...)
topGraph.AddNode("ResearchTeam", researchTeam)
topGraph.AddNode("CodingTeam", codingTeam)
topGraph.AddNode("TopSupervisor", topSupervisor)
// ... 定义顶层路由 ...
3. Network / Swarm (网络/蜂群模式)
背景与功能
在去中心化的网络模式中,没有单一的管理者。每个 Agent 都可以根据需要将任务移交给其他 Agent。这类似于微服务架构或人类的社交网络。
实现原理
每个 Agent 节点都配备了路由逻辑(条件边)。当 Agent A 认为任务超出了自己的能力范围,或者需要 Agent B 的协助时,它会输出一个特殊的信号,触发条件边跳转到 Agent B。