Chapter 3:Spring AI 并行执行模式(ParallelAgent)
Chapter 3:并行执行模式(ParallelAgent)
3.1 模式原理
什么是并行执行?
ParallelAgent 允许多个 Agent 同时处理独立任务,显著提升整体处理吞吐量。与 SequentialAgent 的串行执行不同,ParallelAgent 将可并行的任务分发到多个 Agent,最终汇总结果。
┌─────────────┐ │ Aggregator │ │ 结果聚合 │ └──────▲──────┘ │ ┌────────────────────┼────────────────────┐ │ │ │ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ Agent A │ │ Agent B │ │ Agent C │ │ 独立任务 │ │ 独立任务 │ │ 独立任务 │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │ │ └────────────────────┼────────────────────┘ │ ┌──────────┴──────────┐ │ Input + Router │ │ 输入分发 │ └─────────────────────┘核心特征
| 特征 | 说明 |
|---|---|
| 并行性 | Agent 同时执行,不等待彼此 |
| 独立性 | 各 Agent 任务相互独立 |
| 汇总性 | 结果需要聚合才能形成最终输出 |
| 吞吐量提升 | 总耗时 ≈ 最慢 Agent 的耗时 |
Sequential vs Parallel 对比
Sequential 执行(总耗时 = sum of all): Agent A [2s] → Agent B [3s] → Agent C [1s] = 6s Parallel 执行(总耗时 = max of all): Agent A [2s] ─┐ Agent B [3s] ─┼─→ 聚合 = 3s Agent C [1s] ─┘3.2 结果聚合机制
Spring AI Alibaba 的聚合实现
ParallelAgent 使用ResultAggregator模式汇总结果:
publicclassParallelAgentResult{// 各 Agent 的原始输出privateMap<String,AssistantMessage>agentResults;// 聚合后的最终结果privateStringaggregatedResult;// 聚合方法publicStringaggregate(){// 策略一:拼接returnagentResults.values().stream().map(AssistantMessage::getText).collect(Collectors.joining("\n\n"));// 策略二:LLM 二次处理// return llmAggregator.combine(agentResults);}}聚合策略
| 策略 | 适用场景 | 实现方式 |
|---|---|---|
| 拼接 | 结果相互独立 | 直接 Join |
| LLM 聚合 | 需要语义整合 | 调用 LLM 总结 |
| 投票 | 多视角评估 | 选择多数意见 |
| 优先级 | 有权重差异 | 加权汇总 |
3.3 快速入门示例
基础配置
@ConfigurationpublicclassParallelAgentConfig{@BeanpublicParallelAgentparallelAnalysisAgent(ChatModelchatModel){// 并行执行的分析 AgentReactAgentfinancialAgent=ReactAgent.builder().name("financial_analysis").description("Analyze financial aspects").chatModel(chatModel).systemPrompt("You are a financial analyst...").build();ReactAgentmarketAgent=ReactAgent.builder().name("market_analysis").description("Analyze market aspects").chatModel(chatModel).systemPrompt("You are a market analyst...").build();ReactAgentriskAgent=ReactAgent.builder().name("risk_analysis").description("Analyze risk aspects").chatModel(chatModel).systemPrompt("You are a risk management expert...").build();returnParallelAgent.builder().name("comprehensive_analysis").agents(financialAgent,marketAgent,riskAgent).