以下示例展示了一个完整的多 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

AI项目博客






