ParallelAgent并行调用agent
2026年4月14日 · 426 字 · 2 分钟
这里讲了Eino创建一个agent并行调用多个agent的方法 ParallelAgent 是一种能够并行调用多个子 Agent 的代理模式。它的执行遵循以下设定: 并行执行:多个 SubAgents 同时执行,而不是按顺序执行 结果汇聚:所有子 Agent 的执行结果会被收集和汇总 高效处理:适用于需要从多个角度同时分析同一问题的场景 这里演示一个产品方案分析的场景,创建多个专业化的 Agent 并行分析一个产品方案,包括技术架构分析、功能需求分析、风险评估等维度。 注意在parallelAgent中: 我们需要创建多个专业化的子 Agent,每个 Agent 负责从不同维度分析产品方案: 创建 ParallelAgent,将多个子 Agent 组合在一起: 创建运行函数,执行 ParallelAgent 并收集结果: ParallelAgent 的优势: 适用场景:ParallelAgent并行调用agent
创建子 Agent
// 技术架构分析 Agent
func NewTechArchAnalyzerAgent() adk.Agent {
a, err := adk.NewChatModelAgent(context.Background(), &adk.ChatModelAgentConfig{
Name: "TechArchAnalyzer",
Description: "分析技术架构的合理性和可行性",
Instruction: `你是一个技术架构专家。请从以下维度分析产品方案的技术架构:
1. 技术选型是否合理
2. 架构设计是否清晰
3. 技术栈的优缺点
4. 可能的技术风险
5. 改进建议
请给出详细的技术架构分析报告。`,
Model: llm.CreateDeepseekModel(),
})
if err != nil {
log.Fatal(err)
}
return a
}
// 功能需求分析 Agent
func NewFeatureAnalyzerAgent() adk.Agent {
a, err := adk.NewChatModelAgent(context.Background(), &adk.ChatModelAgentConfig{
Name: "FeatureAnalyzer",
Description: "分析功能需求的完整性和可行性",
Instruction: `你是一个产品功能专家。请从以下维度分析产品方案的功能需求:
1. 功能列表是否完整
2. 功能优先级是否合理
3. 功能之间的依赖关系
4. 实现复杂度评估
5. 用户价值分析
请给出详细的功能需求分析报告。`,
Model: llm.CreateDeepseekModel(),
})
if err != nil {
log.Fatal(err)
}
return a
}
// 风险评估 Agent
func NewRiskAnalyzerAgent() adk.Agent {
a, err := adk.NewChatModelAgent(context.Background(), &adk.ChatModelAgentConfig{
Name: "RiskAnalyzer",
Description: "评估项目的潜在风险",
Instruction: `你是一个项目风险评估专家。请从以下维度分析产品方案的潜在风险:
1. 技术风险
2. 业务风险
3. 资源风险
4. 时间风险
5. 外部依赖风险
请给出详细的风险评估报告,并为每个风险提供缓解建议。`,
Model: llm.CreateDeepseekModel(),
})
if err != nil {
log.Fatal(err)
}
return a
}
// 成本估算 Agent
func NewCostAnalyzerAgent() adk.Agent {
a, err := adk.NewChatModelAgent(context.Background(), &adk.ChatModelAgentConfig{
Name: "CostAnalyzer",
Description: "估算项目的开发成本",
Instruction: `你是一个项目成本估算专家。请从以下维度分析产品方案的开发成本:
1. 人力成本估算
2. 基础设施成本
3. 第三方服务成本
4. 维护运营成本
5. 总成本估算
请给出详细的成本分析报告。`,
Model: llm.CreateDeepseekModel(),
})
if err != nil {
log.Fatal(err)
}
return a
}
创建 ParallelAgent
func NewParalletAgent(ctx context.Context) (adk.Agent, error) {
return adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{
Name: "product_analyzer",
Description: "产品方案综合分析器,并行从多个维度分析产品方案",
SubAgents: []adk.Agent{
NewTechArchAnalyzerAgent(),
NewFeatureAnalyzerAgent(),
NewRiskAnalyzerAgent(),
NewCostAnalyzerAgent(),
},
})
}
运行 ParallelAgent
func PARunner(ctx context.Context, agent adk.Agent, messages []adk.Message) (map[string]string, error) {
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: agent,
})
iter := runner.Run(ctx, messages)
results := make(map[string]string)
for {
event, ok := iter.Next()
if !ok {
break
}
if event.Err != nil {
return nil, event.Err
}
if event.Output != nil && event.Output.MessageOutput != nil {
msg, err := event.Output.MessageOutput.GetMessage()
if err != nil {
return nil, err
}
if msg.Role == schema.Assistant && len(msg.Content) > 0 {
results[event.AgentName] = msg.Content
}
}
}
return results, nil
}
测试示例
func TestParallelAgent(t *testing.T) {
ctx := context.Background()
parallelAgent, err := NewParalletAgent(ctx)
if err != nil {
t.Fatal(err)
}
res, err := PARunner(ctx, parallelAgent, []adk.Message{
schema.UserMessage("请分析以下产品方案:\n" + `
产品方案:智能客服系统
概述:开发一个基于大语言模型的智能客服系统,能够自动回答用户问题,处理常见业务咨询,并在必要时转接人工客服。
主要功能:
1. 自然语言理解和回复
2. 多轮对话管理
3. 知识库集成
4. 情感分析
5. 人工客服转接
6. 对话历史记录
7. 多渠道接入(网页、微信、APP)
技术架构:
- 前端:React + TypeScript
- 后端:Go + Gin 框架
- 数据库:PostgreSQL + Redis
- AI模型:GPT-4 API
- 部署:Docker + Kubernetes
`),
})
if err != nil {
t.Fatal(err)
}
for k, v := range res {
fmt.Println(k, v)
}
}
总结