Spring AI Alibaba StateGraph 多Agent协作全解:5种编排模式

前言

当业务流程涉及多个角色、多个环节时,单 Agent 的能力就不够了,需要多个 Agent 分工协作。做企业多Agent开发,最常遇到3个问题:

  1. 多Agent有哪些经典的协作编排模式?

  2. 每种模式适合什么业务场景?

  3. 如何基于 Spring AI Alibaba StateGraph 写出可直接运行的Java代码?

本文一次性讲清5种主流原生编排模式:Sequential串行流水线、Supervisor主管模式、Parallel并行扇入扇出、Router智能路由、Peer-to-Peer对等协作。

每个模式统一结构:核心特点、适用场景、完整可运行代码、优缺点。

文末补充Handoff、GroupChat、Human-in-the-loop等扩展能力,全部基于研发场景统一示例,方便对比理解。

底层核心:Spring AI Alibaba StateGraph 统一维护全局共享State,支持固定边、条件边、并行分支、循环回退、暂停人工介入,是Java生态企业级多Agent工作流的核心引擎。


一、Sequential Pipeline 串行流水线模式

核心特点

  • 执行顺序预先固定,单向流转,上一个Agent输出存入全局State,作为下一个Agent输入;
  • 底层是StateGraph语法糖,自动构建无分支直线图;
  • 无动态路由、无分支选择。

适用场景

强依赖线性流程:需求→PRD→编码→测试、文稿起草→校验→润色、数据采集→清洗→统计。

完整代码

复制代码
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.agent.flow.agent.SequentialAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;

@Service
public class DevTeamSequentialAgentDemo {

    private final ReactAgent productAgent;
    private final ReactAgent devAgent;
    private final ReactAgent testAgent;
    private final SequentialAgent pipelineAgent;

    public DevTeamSequentialAgentDemo(ChatModel chatModel) {
        productAgent = ReactAgent.builder()
                .name("ProductAgent")
                .model(chatModel)
                .description("产品经理,负责需求拆解,输出PRD文档")
                .instruction("你是资深产品经理。根据用户原始需求,输出一份规范PRD。" +
                        "包含:业务目标、功能清单、输入输出、边界约束。" +
                        "输入内容:{input}")
                .maxIterations(3)
                .outputKey("prd")
                .build();

        devAgent = ReactAgent.builder()
                .name("DevAgent")
                .model(chatModel)
                .description("后端开发工程师,阅读PRD,设计接口,输出Java伪代码")
                .instruction("你是Java后端开发,根据PRD文档{prd},输出接口定义+核心代码,标注风险点。")
                .maxIterations(3)
                .outputKey("code")
                .build();

        testAgent = ReactAgent.builder()
                .name("TestAgent")
                .model(chatModel)
                .description("测试工程师,根据PRD+代码,编写测试用例并分析潜在缺陷")
                .instruction("你是测试工程师,PRD:{prd},代码:{code}。输出:功能用例、边界用例、潜在缺陷清单。")
                .maxIterations(3)
                .outputKey("testReport")
                .build();

        pipelineAgent = SequentialAgent.builder()
                .name("DevPipeline")
                .agents(productAgent, devAgent, testAgent)
                .build();
    }

    public String runPipeline(String userRequirement) {
        var resultState = pipelineAgent.call(userRequirement);
        String prd = resultState.value("prd");
        String code = resultState.value("code");
        String testReport = resultState.value("testReport");

        System.out.println("==== PRD ====\n" + prd);
        System.out.println("\n==== 开发代码 ====\n" + code);
        System.out.println("\n==== 测试报告 ====\n" + testReport);
        return testReport;
    }
}

优缺点

✅ 优点:逻辑简单、调试方便、状态流转清晰

❌ 缺点:串行耗时叠加,前置节点失败整条链路阻塞;不支持自动返工回退


二、Supervisor 主管调度模式(主子模式)

核心特点

  • 独立主管Agent作为中央决策者,LLM动态判断路由;
  • 子Agent执行完返回结果给主管,由主管决定下一步:继续分发、回退重试、结束;
  • 基于StateGraph条件边实现循环、回退;JManus/OpenManus均采用该架构。

适用场景

复杂开放任务、需要迭代返工的流程:研发迭代流水线、多轮方案优化、任务拆解分发。

完整代码

复制代码
import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.function.Function;

@Service
public class DevTeamSupervisorStateGraphDemo {

    private final ReactAgent productAgent;
    private final ReactAgent devAgent;
    private final ReactAgent testAgent;
    private final ReactAgent supervisorAgent;
    private final CompiledGraph graph;

    public DevTeamSupervisorStateGraphDemo(ChatModel chatModel) {
        productAgent = ReactAgent.builder()
                .name("ProductAgent")
                .model(chatModel)
                .instruction("你是资深产品经理,根据需求输出PRD。输入:{input}")
                .maxIterations(2)
                .outputKey("prd")
                .build();

        devAgent = ReactAgent.builder()
                .name("DevAgent")
                .model(chatModel)
                .instruction("根据PRD{prd},输出Java接口和代码。")
                .maxIterations(2)
                .outputKey("code")
                .build();

        testAgent = ReactAgent.builder()
                .name("TestAgent")
                .model(chatModel)
                .instruction("根据PRD{prd}、代码{code}输出测试报告,标记是否存在严重bug。")
                .maxIterations(2)
                .outputKey("testReport")
                .build();

        supervisorAgent = ReactAgent.builder()
                .name("SupervisorAgent")
                .model(chatModel)
                .instruction("""
                        你是研发项目主管,读取当前state,选择下一步执行节点:
                        可选节点:product、dev、test、end。
                        规则:
                        1. 没有prd → product
                        2. 有prd无code → dev
                        3. 有prd+code,测试报告标记严重bug → dev
                        4. 有prd+code,测试无严重bug → end
                        只输出节点名称,不要多余文字。
                        """)
                .maxIterations(2)
                .outputKey("nextNode")
                .build();

        StateGraph graphBuilder = new StateGraph();
        graphBuilder.addNode("supervisor", (Function<Map<String, Object>, Map<String, Object>>) state -> {
            var res = supervisorAgent.call(state);
            return res;
        });
        graphBuilder.addNode("product", state -> productAgent.call(state));
        graphBuilder.addNode("dev", state -> devAgent.call(state));
        graphBuilder.addNode("test", state -> testAgent.call(state));

        graphBuilder.setEntryPoint("supervisor");
        graphBuilder.addConditionalEdge("supervisor", state -> {
            String next = (String) state.get("nextNode");
            return next;
        });
        graphBuilder.addEdge("product", "supervisor");
        graphBuilder.addEdge("dev", "supervisor");
        graphBuilder.addEdge("test", "supervisor");
        graphBuilder.addEndNode("end");

        this.graph = graphBuilder.compile();
    }

    public Map<String, Object> runPipeline(String userReq) {
        return graph.invoke(Map.of("input", userReq));
    }
}

优缺点

✅ 优点:灵活,支持循环、回退、动态任务分配,企业落地最多

❌ 缺点:主管节点单点压力,必须配置最大轮次,防止无限循环


三、Parallel 扇入扇出 Fan-out/Fan-in 并行模式

核心特点

  • 同一个输入同时分发给多个独立Agent并行执行;
  • 所有分支全部执行完成之后,才进入汇总节点做结果合并、冲突消歧;
  • Spring AI Alibaba 提供 ParallelAgent 开箱即用。

适用场景

多专家并行评审、多维度评估、多路信息检索、多方案并行设计。

示例:需求出来后,同时交给架构、安全、测试三个专家并行评估,最后汇总评审结论。

完整代码

复制代码
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.agent.flow.agent.ParallelAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;

@Service
public class DevTeamParallelAgentDemo {

    private final ReactAgent archAgent;
    private final ReactAgent securityAgent;
    private final ReactAgent testReviewAgent;
    private final ReactAgent summaryAgent;
    private final ParallelAgent parallelAgent;

    public DevTeamParallelAgentDemo(ChatModel chatModel) {
        // 架构评审Agent
        archAgent = ReactAgent.builder()
                .name("ArchAgent")
                .model(chatModel)
                .instruction("你是架构师,基于需求{input}做架构可行性评估,输出架构风险。")
                .maxIterations(2)
                .outputKey("archReview")
                .build();
        // 安全评审Agent
        securityAgent = ReactAgent.builder()
                .name("SecurityAgent")
                .model(chatModel)
                .instruction("你是安全工程师,基于需求{input}做安全风险评估。")
                .maxIterations(2)
                .outputKey("securityReview")
                .build();
        // 测试预评审Agent
        testReviewAgent = ReactAgent.builder()
                .name("TestReviewAgent")
                .model(chatModel)
                .instruction("你是测试专家,基于需求{input}评估测试难点。")
                .maxIterations(2)
                .outputKey("testReview")
                .build();
        // 汇总Agent
        summaryAgent = ReactAgent.builder()
                .name("SummaryAgent")
                .model(chatModel)
                .instruction("合并架构评审{archReview}、安全评审{securityReview}、测试评审{testReview},消除冲突,输出统一评审结论。")
                .maxIterations(2)
                .outputKey("finalSummary")
                .build();

        // 并行编排:三个专家同时跑,全部完成后交给汇总Agent
        parallelAgent = ParallelAgent.builder()
                .name("ReqReviewParallel")
                .forkAgents(archAgent, securityAgent, testReviewAgent)
                .joinAgent(summaryAgent)
                .build();
    }

    public String runReview(String userRequirement) {
        var state = parallelAgent.call(userRequirement);
        System.out.println("==== 架构评审 ====\n" + state.value("archReview"));
        System.out.println("==== 安全评审 ====\n" + state.value("securityReview"));
        System.out.println("==== 测试评审 ====\n" + state.value("testReview"));
        System.out.println("==== 汇总结论 ====\n" + state.value("finalSummary"));
        return state.value("finalSummary");
    }
}

优缺点

✅ 优点:充分利用并发,缩短总耗时,适合多方独立评估

❌ 缺点:分支之间不能互相依赖;汇总节点需要处理观点冲突


四、Router 智能路由模式(LLM路由)

核心特点

  • 路由Agent根据输入,只选择一个匹配的专家Agent执行,不会全部执行;
  • 框架内置 LlmRoutingAgent,自动分类、分发;
  • 一次请求只走一条分支。

适用场景

工单分流、智能客服:退款、换货、技术咨询自动分发到对应专项Agent;需求自动归类到后端/前端/数据团队。

完整代码

复制代码
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.alibaba.cloud.ai.graph.agent.flow.agent.LlmRoutingAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;

@Service
public class DevTeamRouterAgentDemo {

    private final ReactAgent backendAgent;
    private final ReactAgent frontendAgent;
    private final ReactAgent dataAgent;
    private final LlmRoutingAgent routingAgent;

    public DevTeamRouterAgentDemo(ChatModel chatModel) {
        backendAgent = ReactAgent.builder()
                .name("BackendAgent")
                .model(chatModel)
                .instruction("你是后端开发,处理后端接口、数据库相关需求:{input}")
                .maxIterations(2)
                .outputKey("backendResult")
                .build();

        frontendAgent = ReactAgent.builder()
                .name("FrontendAgent")
                .model(chatModel)
                .instruction("你是前端开发,处理页面、交互需求:{input}")
                .maxIterations(2)
                .outputKey("frontendResult")
                .build();

        dataAgent = ReactAgent.builder()
                .name("DataAgent")
                .model(chatModel)
                .instruction("你是数据开发,处理报表、统计、数据同步需求:{input}")
                .maxIterations(2)
                .outputKey("dataResult")
                .build();

        // LLM路由:根据输入自动选择其中一个Agent
        routingAgent = LlmRoutingAgent.builder()
                .name("ReqRouter")
                .model(chatModel)
                .description("根据需求内容,选择合适的开发专家处理")
                .candidateAgents(backendAgent, frontendAgent, dataAgent)
                .build();
    }

    public String routeAndRun(String userRequirement) {
        var state = routingAgent.call(userRequirement);
        // 路由只会命中其中一个key
        if (state.value("backendResult") != null) {
            return state.value("backendResult");
        } else if (state.value("frontendResult") != null) {
            return state.value("frontendResult");
        } else if (state.value("dataResult") != null) {
            return state.value("dataResult");
        }
        return "未匹配到对应专家";
    }
}

优缺点

✅ 优点:请求精准分流,减少不必要Agent调用,节省token

❌ 缺点:依赖LLM分类准确率;不适合一个需求同时需要多个专家


五、Peer-to-Peer P2P 对等协作模式

核心特点

  • 无中心主管,所有Agent地位平等;
  • State维护全局messages消息池,Agent轮流发言、追加观点;
  • 由LLM自主判断下一个发言者,循环直到达成共识或到达最大轮次。

适用场景

头脑风暴、方案辩论、圆桌评审、多方自由研讨。

完整代码

复制代码
import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;

@Service
public class DevTeamP2PAgentDemo {

    private final ReactAgent productAgent;
    private final ReactAgent devAgent;
    private final ReactAgent testAgent;
    private final CompiledGraph graph;
    private static final int MAX_ROUND = 5;

    public DevTeamP2PAgentDemo(ChatModel chatModel) {
        productAgent = ReactAgent.builder()
                .name("ProductAgent")
                .model(chatModel)
                .instruction("你是产品,基于历史对话{messages}发表你的观点,推动方案讨论。")
                .maxIterations(2)
                .outputKey("content")
                .build();

        devAgent = ReactAgent.builder()
                .name("DevAgent")
                .model(chatModel)
                .instruction("你是开发,基于历史对话{messages}评估实现难度,发表观点。")
                .maxIterations(2)
                .outputKey("content")
                .build();

        testAgent = ReactAgent.builder()
                .name("TestAgent")
                .model(chatModel)
                .instruction("你是测试,基于历史对话{messages}提出测试风险。")
                .maxIterations(2)
                .outputKey("content")
                .build();

        // 发言调度Agent:选择下一个发言角色,判断是否达成共识
        ReactAgent speakerSelector = ReactAgent.builder()
                .name("SpeakerSelector")
                .model(chatModel)
                .instruction("""
                        读取对话历史messages,选择下一个发言节点:product / dev / test / end。
                        如果各方达成共识,输出end;否则输出下一个发言者。只输出节点名。
                        """)
                .maxIterations(2)
                .outputKey("nextSpeaker")
                .build();

        StateGraph graphBuilder = new StateGraph();
        graphBuilder.addNode("selector", state -> {
            var res = speakerSelector.call(state);
            return res;
        });
        graphBuilder.addNode("product", state -> {
            var res = productAgent.call(state);
            appendMessage(state, "ProductAgent", res.value("content"));
            return state;
        });
        graphBuilder.addNode("dev", state -> {
            var res = devAgent.call(state);
            appendMessage(state, "DevAgent", res.value("content"));
            return state;
        });
        graphBuilder.addNode("test", state -> {
            var res = testAgent.call(state);
            appendMessage(state, "TestAgent", res.value("content"));
            return state;
        });

        graphBuilder.setEntryPoint("selector");
        graphBuilder.addConditionalEdge("selector", state -> {
            String next = (String) state.get("nextSpeaker");
            // 轮次超限强制结束
            int round = (Integer) state.getOrDefault("round", 0);
            if (round >= MAX_ROUND) return "end";
            return next;
        });
        graphBuilder.addEdge("product", "selector");
        graphBuilder.addEdge("dev", "selector");
        graphBuilder.addEdge("test", "selector");
        graphBuilder.addEndNode("end");

        this.graph = graphBuilder.compile();
    }

    private void appendMessage(Map<String, Object> state, String who, String content) {
        @SuppressWarnings("unchecked")
        ArrayList<String> messages = (ArrayList<String>) state.getOrDefault("messages", new ArrayList<>());
        messages.add(who + ":" + content);
        state.put("messages", messages);
        int round = (Integer) state.getOrDefault("round", 0);
        state.put("round", round + 1);
    }

    public Map<String, Object> runDiscussion(String userReq) {
        return graph.invoke(Map.of(
                "input", userReq,
                "messages", new ArrayList<String>(),
                "round", 0
        ));
    }
}

优缺点

✅ 优点:去中心化,自由辩论,适合创意研讨

❌ 缺点:流程不可控,容易发散、难以收敛,生产业务落地偏少


六、扩展能力(企业生产补充)

1. Handoff 智能交接模式

控制权直接在Agent之间移交,用户持续和当前Agent对话。

  • Supervisor:子Agent是工具,不直接对接用户
  • Handoff:对话上下文一起移交,用户直接和新Agent沟通
  • 场景:售前→售后→技术支持转接

2. GroupChat 群聊模式

P2P的增强版,增加主持人角色,管控发言顺序,避免抢话,适合正式评审会。

3. Human-in-the-loop 人工介入

StateGraph原生支持节点暂停,等待人工审批,审批通过后继续执行;支持断点续跑。

场景:金融放款、合同审核、高危操作,满足合规。


七、五大模式选型对照表

编排模式 核心架构 执行顺序 能否循环回退 首选业务场景
Sequential 串行流水线 直线DAG 固定单向 ❌ 线性固定流程:需求→编码→测试、文档流水线
Supervisor 主管调度 带条件边图 LLM动态调度 ✅ 复杂迭代任务、研发流水线、多轮优化
Parallel 并行扇入扇出 多分支并行+汇总 多分支同时执行 ❌ 多专家并行评审、多维度评估
Router 智能路由 分类分流 单选分支 ❌ 工单分流、客服自动分发
P2P对等协作 去中心化消息池 自主轮流发言 ✅ 头脑风暴、方案辩论圆桌讨论

八、总结

  1. 简单固定流程 → Sequential;

  2. 需要迭代、返工、复杂开放任务 → Supervisor(企业最常用);

  3. 多专家独立评估、并行评审 → Parallel;

  4. 工单、咨询分流 → Router;

  5. 自由研讨、辩论 brainstorm → P2P;

  6. 跨角色对话转接看Handoff,合规审批开启Human-in-the-loop。

Spring AI Alibaba StateGraph 一套引擎统一支撑5种编排,基于全局State管理状态,Java团队做企业多Agent落地非常友好。

相关推荐
Java成神之路-9 小时前
Spring AI Alibaba 多Agent避坑:别把StateGraph等同于多Agent协作模式
ai应用开发
前进的李工1 天前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
Java成神之路-4 天前
Java 构建 AI 应用:Spring AI Alibaba Workflow 与 Agent 架构抉择
ai应用开发
一枕槐安4879 天前
多模态RAG实战:PDF图文混合文档检索问答本地跑通
langchain·pdf·milvus·ai应用开发·多模态rag
Java成神之路-11 天前
Jev 和 LLM 到底有什么区别?
ai应用开发
Java成神之路-15 天前
多 Agent 协作别过度设计:A2A(Agent2Agent)协议
ai应用开发
FRing0315 天前
什么是AI、模型和token、vibecoding介绍、ClaudeCode环境搭建
人工智能·ai应用开发·智能体开发
Java成神之路-21 天前
大模型API输出莫名截断?
ai应用开发
Java成神之路-24 天前
大模型输出工程契约设计:从Prompt软约束到Schema硬约束
prompt·ai应用开发