09-15 Spring AI Alibaba中的多智能体支持
✅Spring AI Alibaba中的多智能体支持
除了Python中有很多框架可以实现多智能体以外,Java中的Spring AI Alibaba框架也提供了类似的功能。
前面我们介绍的多智能体的各种模式中,Spring AI主要支持了Agent Tool和Hand off两种实现。
Agent Tool
Agent Tool的思想就是可以把其他的Agent当做工具,SpringAI Alibaba中定义了AgentTool,来表示一个智能体工具。

这个类中提供了一个getFunctionToolCallback方法,可以把一个ReactAgent转成ToolCallback
有了它, 实现多智能体就简单了。
1 | ReactAgent writerAgent = ReactAgent.builder() .name("writer_agent") .model(chatModel) .description("专门负责创作文章和内容生成") .instruction("你是一个专业作家,擅长各类文章创作。") .build(); |
分别定义三个不同的子Agent,然后再定义一个主Agent,在主Agent中,通过tools设置三个工具,分别是三个子Agent通过AgentTool.getFunctionToolCallback转换出来的工具。
实现原理
AgentTool.getFunctionToolCallback的实现也不复杂,简单看看。
关键在最后一步:

通过Spring AI中提供的MethodToolCallback构造一个ToolBack,并将agent
的名字和描述作为工具的描述,然后将AgentToolExecutor这个内部类的executeAgent作为方法的工具的实际调用方法。
executeAgent中的代码也不复杂,核心就是我框出来这句,也就是直接调用Graph底层的invoke方法做执行。(这个invoke方法,ReactAgent的call在执行的时候也会调。)

Hand off
除了上面的Agent Tool这种模式,还有Hand off,这种Spring AI Alibaba也支持。
并且官方针对这个Hand off支持了多种交接方式,包括串行、并行、路由、监督等等方式。通过FlowAgent定义的,他有多个实现类:

SequentialAgent:顺序执行模式,多个Agent按预定义的顺序依次执行。每个Agent的输出成为下一个Agent的输入。
1 | SequentialAgent blogAgent = SequentialAgent.builder() .name("blog_agent") .description("根据用户给定的主题写一篇文章,然后将文章交给评论员进行评论") .subAgents(List.of(writerAgent, reviewerAgent)) .build(); |
ParallelAgent:并行执行模式,多个Agent同时处理相同的输入。它们的结果被收集并合并。
1 | ParallelAgent parallelAgent = ParallelAgent.builder() .name("parallel_creative_agent") .description("并行执行多个创作任务,包括写散文、写诗和做总结") .mergeOutputKey("merged_results") .subAgents(List.of(proseWriterAgent, poemWriterAgent, summaryAgent)) .mergeStrategy(new ParallelAgent.DefaultMergeStrategy()) .build(); |
LlmRoutingAgent:路由模式,使用LLM动态决定将请求路由到哪个子Agent。
1 | LlmRoutingAgent routingAgent = LlmRoutingAgent.builder() .name("content_routing_agent") .description("根据用户需求智能路由到合适的专家Agent") .model(chatModel) .subAgents(List.of(writerAgent, reviewerAgent, translatorAgent)) .build(); |
SupervisorAgent:监督者模式,使_用大语言模型(LLM)作为监督者,动态决定将任务路由到哪个子Agent,并支持多步骤循环路由。与 LlmRoutingAgent 不同,SupervisorAgent 支持子Agent执行完成后返回监督者,监督者可以根据执行结果继续路_由到其他Agent或完成任务。
1 | SupervisorAgent supervisorAgent = SupervisorAgent.builder() .name("content_supervisor") .description("内容管理监督者,负责协调写作、翻译等任务") .model(chatModel) .subAgents(List.of(writerAgent, translatorAgent)) .build(); |
实现原理
Spring AI Alibaba中的agent离不开graph,底层还是基于graph实现的。不管是串行、还是并行、还是其他的,无非就是画不同的有向图。
比如串行,其实就是按照顺序把多个agent的graph画出来就行了。

代码实现:

在顺序流程中,就是按照顺序取出subAgents,然后不断地添加node和edge把他们连起来。
啰嗦几句
其实可以看到,Spring AI Alibaba因为依赖了底层自己抽象出来的Graph,那么就可以非常灵活的做各种有向图的编排,可以快速的实现各种多智能体。
虽然用graph带来了一定的学习成本,但是熟练掌握之后,会发现这个方案还是有很多可取之处的。最关键的就是扩展性极强,非常的灵活。
