Supervisor 组件全面文档 #
本文档中引用的文件
- prebuilt/supervisor.go
- examples/supervisor/main.go
- showcases/open_deep_research/supervisor.go
- showcases/open_deep_research/state.go
- showcases/open_deep_research/prompts.go
- showcases/open_deep_research/config.go
- showcases/open_deep_research/utils.go
- examples/supervisor/README.md
- showcases/open_deep_research/README.md
- prebuilt/supervisor_test.go
目录 #
简介 #
prebuilt.CreateSupervisor 是一个强大的多代理协调组件,用于构建复杂的多智能体协作系统。该组件实现了经典的 Supervisor 模式,其中中央的 Supervisor 代理负责接收任务、将任务路由给专门的 Worker 代理、收集结果并决定下一步操作或结束工作流。
Supervisor 模式的核心思想是通过中央协调器来管理多个专业化的代理,每个代理专注于特定的任务领域,从而实现高效、可扩展的多智能体系统。
项目结构 #
该项目采用模块化设计,主要包含以下关键目录:
graph TD
A[langgraphgo] --> B[prebuilt]
A --> C[examples]
A --> D[showcases]
A --> E[graph]
B --> F[supervisor.go]
B --> G[supervisor_test.go]
C --> H[supervisor/]
C --> I[其他示例]
D --> J[open_deep_research/]
D --> K[deepagents/]
J --> L[supervisor.go]
J --> M[state.go]
J --> N[prompts.go]
J --> O[config.go]
J --> P[utils.go]
E --> Q[graph.go]
E --> R[message_graph.go]
E --> S[state_graph.go]
图表来源
- [prebuilt/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/prebuilt/supervisor.go#L1-L153)
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L1-L331)
章节来源
- [examples/supervisor/README.md](https://github.com/smallnest/langgraphgo/blob/main/examples/supervisor/README.md#L1-L16)
- [showcases/open_deep_research/README.md](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/README.md#L1-L190)
核心组件 #
Supervisor 组件的核心功能 #
- 任务分发: 将用户请求分解为可执行的研究任务
- 代理协调: 管理多个研究代理的并发执行
- 进度监控: 跟踪研究进度并做出决策
- 结果聚合: 收集所有代理的研究成果
- 迭代控制: 实现最大迭代次数限制
主要数据结构 #
classDiagram
class SupervisorState {
+[]MessageContent SupervisorMessages
+string ResearchBrief
+[]string Notes
+int ResearchIterations
+[]string RawNotes
}
class AgentState {
+[]MessageContent Messages
+[]MessageContent SupervisorMessages
+string ResearchBrief
+[]string RawNotes
+[]string Notes
+string FinalReport
}
class Configuration {
+string SummarizationModel
+int SummarizationModelMaxTokens
+string ResearchModel
+int ResearchModelMaxTokens
+int MaxResearcherIterations
+int MaxConcurrentResearchUnits
+int MaxToolCallIterations
}
SupervisorState --> AgentState : "coordinates"
Configuration --> SupervisorState : "configures"
图表来源
- [showcases/open_deep_research/state.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/state.go#L44-L77)
- [showcases/open_deep_research/config.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/config.go#L8-L29)
章节来源
- [showcases/open_deep_research/state.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/state.go#L1-L77)
- [showcases/open_deep_research/config.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/config.go#L1-L72)
架构概览 #
Supervisor 模式架构 #
graph TB
subgraph "用户层"
U[用户查询]
end
subgraph "Supervisor 层"
S[Supervisor Agent]
SP[系统提示词]
ST[思考工具]
RT[研究委托工具]
CT[完成工具]
end
subgraph "Worker 层"
R1[研究员 1]
R2[研究员 2]
R3[研究员 N]
end
subgraph "工具层"
TS[Tavily 搜索]
TT[思考工具]
end
U --> S
S --> SP
S --> ST
S --> RT
S --> CT
RT --> R1
RT --> R2
RT --> R3
R1 --> TS
R1 --> TT
R2 --> TS
R2 --> TT
R3 --> TS
R3 --> TT
R1 --> S
R2 --> S
R3 --> S
图表来源
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L14-L331)
- [showcases/open_deep_research/prompts.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/prompts.go#L8-L168)
工作流程 #
sequenceDiagram
participant U as 用户
participant S as Supervisor
participant R1 as 研究员 1
participant R2 as 研究员 2
participant R3 as 研究员 N
U->>S : 提交研究请求
S->>S : 分析研究需求
S->>S : 使用 think_tool 规划策略
S->>R1 : 委托研究任务 1
S->>R2 : 委托研究任务 2
S->>R3 : 委托研究任务 N
par 并行执行
R1->>R1 : 执行搜索和分析
R2->>R2 : 执行搜索和分析
R3->>R3 : 执行搜索和分析
end
R1->>S : 返回研究成果
R2->>S : 返回研究成果
R3->>S : 返回研究成果
S->>S : 聚合所有结果
S->>S : 使用 think_tool 评估
S->>U : 完成最终报告
图表来源
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L159-L300)
- [showcases/open_deep_research/utils.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/utils.go#L100-L116)
详细组件分析 #
CreateSupervisor 函数 #
CreateSupervisor 是核心的工厂函数,负责创建和配置 Supervisor 图形。
主要功能特性 #
- 状态管理: 使用 MapSchema 和 AppendReducer 来管理消息历史
- 动态路由: 基于 LLM 决策的动态任务分配
- 条件边: 实现基于返回值的流程控制
- 循环检测: 防止无限循环的机制
核心实现逻辑 #
flowchart TD
Start([开始]) --> InitState[初始化状态 Schema]
InitState --> GetMembers[获取成员列表]
GetMembers --> AddSupervisor[添加 Supervisor 节点]
AddSupervisor --> AddAgents[添加代理节点]
AddAgents --> SetEdges[设置边连接]
SetEdges --> Compile[编译图形]
Compile --> End([返回 Supervisor])
AddSupervisor --> CreatePrompt[创建系统提示词]
CreatePrompt --> DefineTools[定义工具]
DefineTools --> CallLLM[调用 LLM]
CallLLM --> ParseResponse[解析响应]
ParseResponse --> ReturnDecision[返回决策]
AddAgents --> WrapAgent[包装代理]
WrapAgent --> InvokeAgent[调用代理]
InvokeAgent --> MergeResults[合并结果]
图表来源
- [prebuilt/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/prebuilt/supervisor.go#L14-L152)
章节来源
- [prebuilt/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/prebuilt/supervisor.go#L1-L153)
开放深度研究示例 #
Supervisor 图形实现 #
开放深度研究示例展示了更复杂和功能完整的 Supervisor 实现:
- 多状态支持: 区分 supervisor_messages、notes、raw_notes 等不同状态
- 迭代控制: 实现最大迭代次数限制
- 并行执行: 支持多个研究任务同时进行
- 错误处理: 完善的错误处理和超时控制
关键特性 #
| 特性 | 描述 | 实现方式 |
|---|---|---|
| 最大迭代限制 | 防止无限循环 | 检查 research_iterations 计数 |
| 并发控制 | 限制同时运行的研究任务 | 使用 MaxConcurrentResearchUnits |
| 错误恢复 | 处理单个研究任务失败 | 返回错误消息而非中断整个流程 |
| 结果压缩 | 将原始笔记压缩为摘要 | 使用专门的压缩模型 |
章节来源
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L1-L331)
系统提示词设计 #
Supervisor 提示词模板 #
系统提示词是 Supervisor 智能决策的基础:
graph LR
A[研究需求] --> B[任务分解]
B --> C[代理选择]
C --> D[进度评估]
D --> E[最终决策]
F[思考工具] --> B
F --> D
G[研究委托] --> C
H[完成确认] --> E
图表来源
- [showcases/open_deep_research/prompts.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/prompts.go#L8-L70)
研究员提示词设计 #
研究员使用专门的提示词来指导他们的搜索行为:
- 搜索策略: 从宽泛到具体的搜索方法
- 反思机制: 使用 think_tool 进行过程反思
- 质量优先: 强调高质量而非数量的原则
- 预算控制: 限制工具调用次数防止过度搜索
章节来源
- [showcases/open_deep_research/prompts.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/prompts.go#L72-L168)
配置管理系统 #
可配置参数 #
| 参数类别 | 参数名 | 默认值 | 描述 |
|---|---|---|---|
| 模型配置 | ResearchModel | deepseek-v3 | 研究任务使用的模型 |
| 模型配置 | CompressionModel | deepseek-v3 | 压缩模型 |
| 模型配置 | FinalReportModel | deepseek-v3 | 最终报告模型 |
| 研究参数 | MaxResearcherIterations | 10 | 最大研究迭代次数 |
| 研究参数 | MaxConcurrentResearchUnits | 3 | 最大并发研究单元 |
| 研究参数 | MaxToolCallIterations | 20 | 每个研究员的最大工具调用次数 |
章节来源
- [showcases/open_deep_research/config.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/config.go#L31-L72)
工具集成 #
主要工具类型 #
- 思考工具 (think_tool): 用于战略规划和进度反思
- 研究委托工具 (ConductResearch): 创建新的研究任务
- 完成工具 (ResearchComplete): 标记研究完成
工具调用模式 #
sequenceDiagram
participant S as Supervisor
participant T as Think Tool
participant R as Research Tool
participant C as Complete Tool
S->>T : 规划研究策略
T-->>S : 返回规划结果
S->>R : 委托研究任务
R-->>S : 返回初步结果
S->>T : 评估当前进展
T-->>S : 返回评估结果
alt 需要进一步研究
S->>R : 委托更多任务
R-->>S : 返回新结果
else 研究完成
S->>C : 标记完成
C-->>S : 确认完成
end
图表来源
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L159-L300)
- [showcases/open_deep_research/utils.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/utils.go#L100-L116)
章节来源
- [showcases/open_deep_research/utils.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/utils.go#L1-L250)
依赖关系分析 #
核心依赖图 #
graph TD
A[prebuilt.CreateSupervisor] --> B[graph.StateRunnable]
A --> C[llms.Model]
A --> D[graph.NewStateGraph]
A --> E[graph.NewMapSchema]
F[examples/supervisor] --> A
F --> G[prebuilt.CreateReactAgent]
H[showcases/open_deep_research] --> A
H --> I[graph.MessageGraph]
H --> J[graph.NewMessageGraph]
H --> K[Configuration]
L[graph package] --> D
L --> E
L --> I
L --> J
图表来源
- [prebuilt/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/prebuilt/supervisor.go#L1-L153)
- [examples/supervisor/main.go](https://github.com/smallnest/langgraphgo/blob/main/examples/supervisor/main.go#L1-L138)
- [showcases/open_deep_research/supervisor.go](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/supervisor.go#L1-L331)
测试覆盖 #
测试套件涵盖了 Supervisor 的核心功能:
- 基本功能测试: 验证 Supervisor 能正确路由到不同的代理
- 状态管理测试: 确保消息历史正确维护
- 边界情况测试: 处理空输入和异常情况
- 并发测试: 验证多代理并发执行的正确性
章节来源
- [prebuilt/supervisor_test.go](https://github.com/smallnest/langgraphgo/blob/main/prebuilt/supervisor_test.go#L1-L129)
性能考虑 #
并发优化 #
- 并行研究: 支持最多 MaxConcurrentResearchUnits 个研究任务同时进行
- 异步执行: 使用 goroutine 实现非阻塞的代理调用
- 资源限制: 通过配置参数控制资源消耗
内存管理 #
- 状态压缩: 定期压缩研究笔记以减少内存占用
- 迭代限制: 防止因无限迭代导致的内存泄漏
- 结果缓存: 合理缓存中间结果避免重复计算
API 调用优化 #
- 批量处理: 尽可能批量处理工具调用
- 错误重试: 实现指数退避的重试机制
- 超时控制: 设置合理的超时时间防止长时间等待
故障排除指南 #
常见问题及解决方案 #
1. API 密钥配置错误 #
症状: OPENAI_API_KEY not set 或 TAVILY_API_KEY not set
解决方案:
- 设置环境变量
OPENAI_API_KEY - 设置环境变量
TAVILY_API_KEY - 验证 API 密钥的有效性
2. 研究结果为空 #
症状: 最终报告内容不足或为空 解决方案:
- 检查 Tavily API 密钥是否有效
- 验证查询是否清晰具体
- 增加迭代限制(MAX_RESEARCHER_ITERATIONS)
3. 并发限制问题 #
症状: 研究任务被拒绝执行 解决方案:
- 减少
MAX_CONCURRENT_RESEARCH_UNITS - 降低
MAX_RESEARCHER_ITERATIONS - 使用不同模型层级
4. 超时问题 #
症状: 程序运行时间过长或卡住 解决方案:
- 设置适当的上下文超时
- 检查网络连接稳定性
- 优化查询策略减少 API 调用
调试技巧 #
- 日志记录: 启用详细的日志输出跟踪执行过程
- 状态检查: 定期检查中间状态验证流程正确性
- 逐步测试: 从简单的查询开始逐步增加复杂度
- 参数调整: 根据实际效果调整配置参数
章节来源
- [showcases/open_deep_research/README.md](https://github.com/smallnest/langgraphgo/blob/main/showcases/open_deep_research/README.md#L160-L180)
结论 #
prebuilt.CreateSupervisor 组件是一个功能强大且灵活的多代理协调系统,它成功地实现了 Supervisor 模式的精髓:
主要优势 #
- 模块化设计: 清晰的职责分离和可扩展的架构
- 智能决策: 基于 LLM 的动态任务分配和流程控制
- 并发处理: 高效的并行任务执行能力
- 容错机制: 完善的错误处理和恢复策略
- 配置灵活: 丰富的配置选项适应不同场景需求
应用场景 #
- 复杂研究任务: 多维度、跨领域的综合研究
- 数据分析: 大规模数据收集和分析
- 内容创作: 多角度、多层次的内容生成
- 客户服务: 复杂问题的分层解决
发展方向 #
- 智能优化: 基于历史数据的自动参数优化
- 知识图谱: 集成知识图谱提升决策质量
- 实时协作: 支持多人实时协作研究
- 领域专业化: 针对特定领域的定制化优化
通过深入理解和合理应用 prebuilt.CreateSupervisor 组件,开发者可以构建出高效、智能的多智能体协作系统,为复杂的业务场景提供创新的解决方案。