跳到主要内容

Spring AI Alibaba Graph 中的 LLM 流式输出

使用流式 ChatClient

Spring AI Alibaba 支持通过 ChatClient 进行流式输出。

使用流式 ChatClient查看完整代码
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatResponse;
import reactor.core.publisher.Flux;

// 使用流式输出
Flux<ChatResponse> flux = chatClient.prompt()
.user("tell me a joke")
.stream()
.chatResponse();

// 订阅流式响应
flux.subscribe(
response -> {
String content = response.getResult().getOutput().getText();
System.out.print(content);
},
error -> System.err.println("Error: " + error.getMessage()),
() -> System.out.println("
Stream completed")
);

使用 Reactor 的阻塞式处理

使用 Reactor 的阻塞式处理查看完整代码
Flux<ChatResponse> flux = chatClient.prompt()
.user("tell me a joke")
.stream()
.chatResponse();

// 使用 Reactor 的阻塞式处理
flux.collectList().block().forEach(response -> {
System.out.println("Received: " + response.getResult().getOutput().getText());
});

输出示例:

Sure, here's a joke for you:

Why don't scientists trust atoms?

Because they make up everything!
Stream completed

在 Graph 节点中使用流式输出

创建带流式输出的 Graph 节点

参考 节点流式输出文档 获取完整示例。

创建带流式输出的 Graph 节点查看完整代码
import com.alibaba.cloud.ai.graph.OverAllState;
import com.alibaba.cloud.ai.graph.action.NodeAction;
import org.springframework.ai.chat.client.ChatClient;
import reactor.core.publisher.Flux;

import java.util.Map;

public class StreamingAgentNode implements NodeAction {

private final ChatClient chatClient;

public StreamingAgentNode(ChatClient.Builder builder) {
this.chatClient = builder.build();
}

@Override
public Map<String, Object> apply(OverAllState state) {
String userMessage = (String) state.value("query").orElse("Hello");

// 使用流式输出
Flux<String> contentFlux = chatClient.prompt()
.user(userMessage)
.stream()
.content();

return Map.of("answer", contentFlux);
}
}

配置和运行

配置和运行流式 Graph查看完整代码
import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.OverAllState;
import com.alibaba.cloud.ai.graph.CompiledGraph;
import org.springframework.ai.chat.client.ChatClient;

// 配置 Graph
StateGraph graph = new StateGraph(keyStrategyFactory)
.addNode("agent", new StreamingAgentNode(chatClientBuilder))
.addEdge(StateGraph.START, "agent")
.addEdge("agent", StateGraph.END);

CompiledGraph compiledGraph = graph.compile();

// 执行
Map<String, Object> input = Map.of("query", "Hello");
OverAllState result = compiledGraph.invoke(input);

System.out.println("Final result: " + result.value("answer").orElse(""));

相关文档

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。