Spring Ai工具回调配置导致流式对话失效问题求助
Spring AI流式对话异常排查请求
系统环境与版本
win 11 jdk 21 Spring Ai 1.0.0-SNAPSHOT
问题现象
使用流式对话功能,配置returnRedirect=false让工具调用结果返回给模型生成最终响应时,模型未按流式返回内容,而是一次性返回完整的assistantMessage。监控显示模型运行期间CPU、GPU处于高负载状态,但全程仅返回单条包含完整响应内容的消息,而非逐字/逐段的流式输出。后续测试发现,即使不触发工具调用,只要ChatClient配置了defaultToolCallbacks就会出现该问题,移除该配置后流式响应恢复正常。
相关代码
异常场景下的ChatClient配置
public ChatClient ollamaChatClient(OllamaChatModel model, ToolCallbackProvider toolCallbackProvider) { ChatClient chatClient = ChatClient.builder(model) .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()) // set the default tool .defaultToolCallbacks(toolCallbackProvider) .build(); log.info("Init Ollama ChatClient"); return chatClient; }
对话实现代码
Flux<ChatResponse> chatResponseFlux = chatClient .prompt() .user(dto.getContent()) .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, dto.getConversationId())) .stream() .chatResponse();
修复后的ChatClient配置
public ChatClient ollamaChatClient(OllamaChatModel model, ToolCallbackProvider toolCallbackProvider) { ChatClient chatClient = ChatClient.builder(model) .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()) .build(); log.info("Init Ollama ChatClient"); return chatClient; }
需求
希望工具调用执行完成后,模型能以流式响应返回结果,避免用户长时间等待。
内容的提问来源于stack exchange,提问作者JasonLong




