[BUG] Aggregation Error java.lang.IllegalStateException: Currently only one tool call is supported per message!
kind/bugneeds-triage
### Is there an existing issue for this?
- [x] I have searched the existing issues
### Current Behavior
使用reactAgent的streamMessages时(userMessage包含图片文件)偶发报错:Aggregation Error java.lang.IllegalStateException: Currently only one tool call is supported per message!
### Expected Behavior
期望正常输出
### Steps To Reproduce
1. 使用多模态模型(我这里使用的qwen3.6 plus)
2. userMessage包含媒体文件(我这边包含图片文件)
3. 使用reactAgent的streamMessages方法(Flux<Message> messageFlux = resumeBuildSaveAgent.streamMessages(messages, runnableConfig);)
### Environment
```markdown
Spring AI Alibaba version(s):
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>1.1.2.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.1.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-extensions-bom</artifactId>
<version>1.1.2.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
```
### Debug logs
报错信息:
[14:11:18.365] ERROR [reactor-http-nio-4raceId] org.springframework.ai.chat.model.MessageAggregator 188 lambda$aggregate$3 - Aggregation Error java.lang.IllegalStateException: Currently only one tool call is supported per message!
at com.alibaba.cloud.ai.dashscope.api.DashScopeAiStreamFunctionCallingHelper.merge(DashScopeAiStreamFunctionCallingHelper.java:137) ~[spring-ai-alibaba-dashscope-1.1.2.1.jar:1.1.2.1]
at com.alibaba.cloud.ai.dashscope.api.DashScopeAiStreamFunctionCallingHelper.merge(DashScopeAiStreamFunctionCallingHelper.java:102) ~[spring-ai-alibaba-dashscope-1.1.2.1.jar:1.1.2.1]
at com.alibaba.cloud.ai.dashscope.api.DashScopeAiStreamFunctionCallingHelper.merge(DashScopeAiStreamFunctionCallingHelper.java:87) ~[spring-ai-alibaba-dashscope-1.1.2.1.jar:1.1.2.1]
at reactor.core.publisher.MonoReduceSeed$ReduceSeedSubscriber.onNext(MonoReduceSeed.java:116) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drainRegular(FluxWindowPredicate.java:670) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drain(FluxWindowPredicate.java:748) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxWindowPredicate$WindowFlux.onNext(FluxWindowPredicate.java:790) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.onNext(FluxWindowPredicate.java:268) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:113) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxTakeUntil$TakeUntilPredicateSubscriber.onNext(FluxTakeUntil.java:95) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:251) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:259) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:865) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxConcatMap$WeakScalarSubscription.request(FluxConcatMap.java:480) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2366) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:202) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxBufferPredicate$BufferPredicateSubscriber.onNextNewBuffer(FluxBufferPredicate.java:317) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxBufferPredicate$BufferPredicateSubscriber.tryOnNext(FluxBufferPredicate.java:227) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxBufferPredicate$BufferPredicateSubscriber.onNext(FluxBufferPredicate.java:200) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:503) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:113) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:180) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:453) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:724) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onNext(FluxFlattenIterable.java:256) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[reactor-core-3.6.18.jar:3.6.18]
at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:292) ~[reactor-netty-core-1.1.31.jar:1.1.31]
at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:401) ~[reactor-netty-core-1.1.31.jar:1.1.31]
at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:435) ~[reactor-netty-core-1.1.31.jar:1.1.31]
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:837) ~[reactor-netty-http-1.1.31.jar:1.1.31]
### Anything else?
报错点是这里:
<img width="943" height="161" alt="Image" src="https://github.com/user-attachments/assets/cbffd0e1-aec4-4507-badd-d1a5376036e4" />
追查到com.alibaba.cloud.ai.dashscope.api.DashScopeApi#chatCompletionStream(com.alibaba.cloud.ai.dashscope.spec.DashScopeApiSpec.ChatCompletionRequest, org.springframework.util.MultiValueMap<java.lang.String,java.lang.String>)方法中debug:
<img width="1510" height="622" alt="Image" src="https://github.com/user-attachments/assets/0d4f8437-98c4-476c-8247-bed1090438c7" />
1 条评论