ReactAgent 可以通过 asNode() 方法转换为可以嵌入到父 Graph 中的 Node:
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.KeyStrategyFactory;
import com.alibaba.cloud.ai.graph.state.strategy.ReplaceStrategy;
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 org.springframework.ai.chat.model.ChatModel;
import java.util.HashMap;
import java.util.Map;
public class AgentWorkflowExample {
public void buildWorkflowWithAgent(ChatModel chatModel) throws Exception {
// 创建专门的数据分析 Agent
ReactAgent analysisAgent = ReactAgent.builder()
.name("data_analyzer")
.model(chatModel)
.instruction("你是一个数据分析专家,负责分析数据并提供洞察,请分析以下输入数据:
{input}")
.outputKey("analysis_result")
.build();
// 创建报告生成 Agent
ReactAgent reportAgent = ReactAgent.builder()
.name("report_generator")
.model(chatModel)
.instruction("你是一个报告生成专家,负责将分析结果 "{analysis_result}" 转化为专业报告")
.outputKey("final_report")
.build();
// 定义状态管理策略
KeyStrategyFactory keyStrategyFactory = () -> {
HashMap<String, KeyStrategy> strategies = new HashMap<>();
strategies.put("input", new ReplaceStrategy());
return strategies;
};
// 构建包含 Agent 的工作流
StateGraph workflow = new StateGraph(keyStrategyFactory);
// 将 Agent 作为 SubGraph Node 添加
workflow.addNode(analysisAgent.name(), analysisAgent.asNode(
true, // includeContents: 是否传递父图的消息历史
false // returnReasoningContents: 是否返回推理过程
));
workflow.addNode(reportAgent.name(), reportAgent.asNode(
true,
false
));
// 定义流程
workflow.addEdge(StateGraph.START, analysisAgent.name());
workflow.addEdge(analysisAgent.name(), reportAgent.name());
workflow.addEdge(reportAgent.name(), StateGraph.END);
// 编译并执行工作流
CompiledGraph compiledGraph = workflow.compile(CompileConfig.builder().build());
NodeOutput lastOutput = compiledGraph.stream(Map.of("input", "2025年全年销量100亿,毛利率 23%,净利率 13%。2024年全年销量80亿,毛利率 20%,净利率 8%。"))
.doOnNext(output -> {
if (output instanceof StreamingOutput<?> streamingOutput) {
System.out.println("Output from node " + streamingOutput.node() + ": " + streamingOutput.message().getText());
}
})
.blockLast();
System.out.println("
最终结果,包含所有节点状态:
" + lastOutput.state().data());
}
}
asNode() 方法支持以下参数配置:
| 参数 | 类型 | 说明 |
|---|---|---|
| includeContents | boolean | 是否将父图的 messages 传递给子 Agent(默认 true) |
| returnReasoningContents | boolean | 是否返回完整的推理过程,false 则只返回最终结果(默认 false) |
注意:outputKey 是在创建 ReactAgent 时通过 ReactAgent.builder().outputKey() 设置的,用于指定 Agent 输出结果在状态中的键名。
本文整理自 Spring AI Alibaba 官方文档《工作流编排》:https://java2ai.com/docs/frameworks/agent-framework/advanced/workflow

AI项目博客






