Skip to content

[BUG] 官网示例multi-agent下的SupervisorAgent配置问题 #4514

@c89757

Description

@c89757

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

  • 照着官网示例配置,启动报错:Caused by: java.lang.IllegalArgumentException: mainAgent (ReactAgent) must be provided for supervisor agent
  • 框架版本:
<dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-agent-framework</artifactId>
        <version>1.1.2.0</version>
</dependency>

Expected Behavior

保持文档与代码行为一致

Steps To Reproduce

No response

Environment

Spring AI Alibaba version(s):1.1.2.0

Debug logs

No response

Anything else?

  1. 报错日志:
Caused by: java.lang.IllegalArgumentException: mainAgent (ReactAgent) must be provided for supervisor agent
	at com.alibaba.cloud.ai.graph.agent.flow.agent.SupervisorAgent$SupervisorAgentBuilder.validate(SupervisorAgent.java:125) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.agent.SupervisorAgent$SupervisorAgentBuilder.doBuild(SupervisorAgent.java:131) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.agent.SupervisorAgent$SupervisorAgentBuilder.doBuild(SupervisorAgent.java:74) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.builder.FlowAgentBuilder.build(FlowAgentBuilder.java:197) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
  1. 尝试配置mainAgent
ReactAgent mainAgent = ReactAgent.builder()
        .name("supervisor_main_agent")
        .model(chatModel)
        .description("负责分析用户需求并决定路由到哪个子Agent")
        .hooks(messageTrimmingHook)
        .systemPrompt(SUPERVISOR_SYSTEM_PROMPT)
        .build();

// 创建监督者Agent
SupervisorAgent supervisorAgent = SupervisorAgent.builder()
        .name("content_supervisor")
        .description("内容管理监督者,负责协调写作、翻译等任务")
        .model(chatModel)
        .mainAgent(mainAgent) // 配置mainAgent
        .subAgents(List.of(writerAgent, translatorAgent))
        .build();

systemPrompt也是按照官网示例配置的,部分展示如下

final String SUPERVISOR_SYSTEM_PROMPT = """
......
## 响应格式
只返回Agent名称(writer_agent、translator_agent)或FINISH,不要包含其他解释。
"""
  1. 运行报错
Failed to parse JSON array strings from returned sub agent list of Main Agent output text: writer_agent
  • 堆栈
java.lang.IllegalStateException: Conversion from JSON to java.util.List failed
	at org.springframework.ai.util.json.JsonParser.fromJson(JsonParser.java:67) ~[spring-ai-model-1.1.2.jar:1.1.2]
	at com.alibaba.cloud.ai.graph.agent.flow.node.MainAgentNodeAction.parseJsonArrayOfStrings(MainAgentNodeAction.java:67) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.node.MainAgentNodeAction.extractRoutingFromMessages(MainAgentNodeAction.java:179) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.node.MainAgentNodeAction.processLastResponse(MainAgentNodeAction.java:147) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.flow.node.MainAgentNodeAction.lambda$getGraphResponseFlux$2(MainAgentNodeAction.java:125) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:388) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.DrainUtils.postCompleteDrain(DrainUtils.java:136) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.DrainUtils.postComplete(DrainUtils.java:187) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxBuffer$BufferOverlappingSubscriber.onComplete(FluxBuffer.java:554) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:549) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:549) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:209) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:79) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Flux.subscribe(Flux.java:8891) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:238) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:79) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Flux.subscribe(Flux.java:8891) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:238) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:79) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Flux.subscribe(Flux.java:8891) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:196) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:121) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:67) ~[reactor-core-3.7.16.jar:3.7.16]
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2372) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:144) ~[na:na]
	at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.request(MonoCompletionStage.java:145) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:649) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribe(MonoFlatMapMany.java:141) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.MonoCompletionStage.subscribe(MonoCompletionStage.java:56) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Flux.subscribe(Flux.java:8891) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:238) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:79) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Mono.subscribe(Mono.java:4576) ~[reactor-core-3.7.16.jar:3.7.16]
	at reactor.core.publisher.Mono.block(Mono.java:1778) ~[reactor-core-3.7.16.jar:3.7.16]
	at com.alibaba.cloud.ai.graph.CompiledGraph.invoke(CompiledGraph.java:640) ~[spring-ai-alibaba-graph-core-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.Agent.doInvoke(Agent.java:499) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
	at com.alibaba.cloud.ai.graph.agent.Agent.invoke(Agent.java:165) ~[spring-ai-alibaba-agent-framework-1.1.2.0.jar:1.1.2.0]
  1. debug截图:
Image

在部分模型下,选择agent时,返回的不是数组格式,导致json转换数组报错

  1. 调整系统提示词
final String SUPERVISOR_SYSTEM_PROMPT = """
......
 ## 响应格式
  你必须严格按照以下 JSON 格式返回路由决策,不要包含任何其他文本或解释:
  ["writer_agent" | "translator_agent" | "FINISH"]
"""

再次测试,运行正常

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions