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

Spring AI Alibaba 51|工作流编排 · Agent作为Node:多 Agent 协作工作流示例

以下示例展示了一个完整的多 Agent 协作场景:

import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.CompileConfig;
import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.NodeOutput;
import com.alibaba.cloud.ai.graph.streaming.StreamingOutput;
import com.alibaba.cloud.ai.graph.KeyStrategyFactory;
import com.alibaba.cloud.ai.graph.state.strategy.ReplaceStrategy;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.function.FunctionToolCallback;

import java.util.HashMap;
import java.util.Map;

public class MultiAgentWorkflow {

  public void buildResearchWorkflow(
          ChatModel chatModel,
          ToolCallback searchTool,
          ToolCallback analysisTool,
          ToolCallback summaryTool) throws Exception {

      // 1. 创建信息收集 Agent
      ReactAgent researchAgent = ReactAgent.builder()
          .name("researcher")
          .model(chatModel)
          .instruction("你是一个研究专家,负责收集和整理相关信息,请研究主题: {input}")
          .tools(searchTool)
          .outputKey("research_data")
          .enableLogging(true)
          .build();

      // 2. 创建数据分析 Agent
      ReactAgent analysisAgent = ReactAgent.builder()
          .name("analyst")
          .model(chatModel)
          .instruction("你是一个分析专家,负责深入分析关于主题 "{input}" 的研究数据。数据如下: 

 {research_data}")
          .tools(analysisTool)
          .outputKey("analysis_result")
          .enableLogging(true)
          .build();

      // 3. 创建总结 Agent
      ReactAgent summaryAgent = ReactAgent.builder()
          .name("summarizer")
          .model(chatModel)
          .instruction("你是一个总结专家,负责将分析结果提炼为简洁的结论,结果:

 {analysis_result}")
          .tools(summaryTool)
          .outputKey("final_summary")
          .enableLogging(true)
          .build();

      // 定义状态管理策略
      KeyStrategyFactory keyStrategyFactory = () -> {
          HashMap<String, KeyStrategy> strategies = new HashMap<>();
          strategies.put("input", new ReplaceStrategy());
          return strategies;
      };

      // 4. 构建工作流
      StateGraph workflow = new StateGraph(keyStrategyFactory);

      // 添加 Agent 节点
      workflow.addNode(researchAgent.name(), researchAgent.asNode(
          true,    // 包含历史消息
          false    // 不返回推理过程
      ));

      workflow.addNode(analysisAgent.name(), analysisAgent.asNode(
          true,
          false
      ));

      workflow.addNode(summaryAgent.name(), summaryAgent.asNode(
          true,
          true     // 返回完整推理过程
      ));

      // 定义顺序执行流程
      workflow.addEdge(StateGraph.START, researchAgent.name());
      workflow.addEdge(researchAgent.name(), analysisAgent.name());
      workflow.addEdge(analysisAgent.name(), summaryAgent.name());
      workflow.addEdge(summaryAgent.name(), StateGraph.END);

      // 编译并执行工作流
      CompiledGraph compiledGraph = workflow.compile(CompileConfig.builder().build());
      NodeOutput finalOutput = compiledGraph.stream(Map.of("input", "帮我做一份关于AI Agent的研究报告"))
          .doOnNext(output -> {
              if (output instanceof StreamingOutput<?> streamingOutput) {
                  System.out.println("Output from node " + streamingOutput.node() + ": " + streamingOutput.message().getText());
              }
          })
          .blockLast();

      System.out.println("多Agent研究工作流构建完成");
      System.out.println("最终输出: " + finalOutput.state().value("final_summary").orElse("无"));
  }
}

本文整理自 Spring AI Alibaba 官方文档《工作流编排》:https://java2ai.com/docs/frameworks/agent-framework/advanced/workflow

赞(0)
未经允许不得转载:AI项目博客 » Spring AI Alibaba 51|工作流编排 · Agent作为Node:多 Agent 协作工作流示例

评论 抢沙发

AI项目博客

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

关于本站文章归档

登录

找回密码

注册