AI项目博客
记录 AI 工程实践与大模型应用

Spring AI Alibaba 40|多智能体编排 · 交接(Handoffs):并行执行(Parallel Agent)

在并行执行模式中,多个Agent同时处理相同的输入。它们的结果被收集并合并。

流程:

  1. 输入同时发送给所有Agent
  2. 所有Agent并行处理
  3. 结果被合并成单一输出

Spring AI Alibaba ParallelAgent

实现

import com.alibaba.cloud.ai.graph.agent.flow.agent.ParallelAgent;

// 创建多个专业化Agent
ReactAgent proseWriterAgent = ReactAgent.builder()
  .name("prose_writer_agent")
  .model(chatModel)
  .description("专门写散文的AI助手")
  .instruction("你是一个知名的散文作家,擅长写优美的散文。" +
               "用户会给你一个主题:{input},你只需要创作一篇100字左右的散文。") 
  .outputKey("prose_result") 
  .build();

ReactAgent poemWriterAgent = ReactAgent.builder()
  .name("poem_writer_agent")
  .model(chatModel)
  .description("专门写现代诗的AI助手")
  .instruction("你是一个知名的现代诗人,擅长写现代诗。" +
               "用户会给你的主题是:{input},你只需要创作一首现代诗。") 
  .outputKey("poem_result") 
  .build();

ReactAgent summaryAgent = ReactAgent.builder()
  .name("summary_agent")
  .model(chatModel)
  .description("专门做内容总结的AI助手")
  .instruction("你是一个专业的内容分析师,擅长对主题进行总结和提炼。" +
               "用户会给你一个主题:{input},你只需要对这个主题进行简要总结。") 
  .outputKey("summary_result") 
  .build();

// 创建并行Agent
ParallelAgent parallelAgent = ParallelAgent.builder() 
  .name("parallel_creative_agent")
  .description("并行执行多个创作任务,包括写散文、写诗和做总结")
  .mergeOutputKey("merged_results") 
  .subAgents(List.of(proseWriterAgent, poemWriterAgent, summaryAgent)) 
  .mergeStrategy(new ParallelAgent.DefaultMergeStrategy()) 
  .build();

// 使用
Optional<OverAllState> result = parallelAgent.invoke("以'西湖'为主题");

if (result.isPresent()) {
  OverAllState state = result.get();

  // 访问各个Agent的输出
  state.value("prose_result").ifPresent(r -> 
          System.out.println("散文: " + r));
  state.value("poem_result").ifPresent(r -> 
          System.out.println("诗歌: " + r));
  state.value("summary_result").ifPresent(r -> 
          System.out.println("总结: " + r));

  // 访问合并后的结果
  state.value("merged_results").ifPresent(r -> 
          System.out.println("合并结果: " + r));
}

自定义合并策略

你可以实现自定义的合并策略来控制如何组合多个Agent的输出:

public class CustomMergeStrategy implements ParallelAgent.MergeStrategy {

  @Override
  public Map<String, Object> merge(Map<String, Object> mergedState, OverAllState state) { 
      // 从每个Agent的状态中提取输出
      state.data().forEach((key, value) -> {
          if (key.endsWith("_result")) {
              Message message = (Message) value;
              Object existing = mergedState.get("all_results");
              if (existing == null) {
                  mergedState.put("all_results", message.getText());
              }
              else {
                  mergedState.put("all_results", existing + "

---

" + message.getText());
              }
          }
      });
      return mergedState;
  }
}

// 使用自定义合并策略
ParallelAgent parallelAgent = ParallelAgent.builder()
  .name("parallel_agent")
  .subAgents(List.of(agent1, agent2, agent3))
  .mergeStrategy(new CustomMergeStrategy()) 
  .mergeOutputKey("final_merged_result") 
  .build();

本文整理自 Spring AI Alibaba 官方文档《多智能体编排》:https://java2ai.com/docs/frameworks/agent-framework/advanced/multi-agent

赞(0)
未经允许不得转载:AI项目博客 » Spring AI Alibaba 40|多智能体编排 · 交接(Handoffs):并行执行(Parallel Agent)

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册