返回方式 一次性返回适合后台操作,流式返回适合页面展示(客服,聊天)
以下是关于 Spring AI Alibaba 的 ChatClient 获取大模型返回内容的方式详解,以及不同场景下的选择建议:
一、两种核心响应方式对比
| 方式 | 流式响应 (Stream) | 一次性返回 (Blocking) |
|---|---|---|
| 实现方法 | chatClient.stream() |
chatClient.call() |
| 响应类型 | Flux<ChatResponse> (响应流) |
ChatResponse (完整对象) |
| 数据传输 | 分块实时传输(逐词/逐句) | 等待完整响应后一次性返回 |
| 内存占用 | 低(逐步处理) | 高(需缓存完整结果) |
| 适用场景 | 实时展示、前端交互、长文本生成 | 后台批量处理、需完整结果的操作 |
| 延迟感知 | 用户感知延迟低 | 用户需等待全部处理完成 |
| 代码复杂度 | 较高(需处理流式响应) | 简单(直接获取结果) |
二、具体实现代码示例
1. 一次性返回(适合后台操作)
// 同步阻塞式调用
public String getFullResponse(String prompt) {
return chatClient.prompt(prompt).call().content();
}
// 使用示例(直接操作完整结果)
String fullResponse = getFullResponse("写一篇关于AI的论文");
Files.writeString(Path.of("paper.md"), fullResponse); // 直接写入文件
适用场景:
- 生成报告后直接写入数据库
- 批量处理问答生成训练数据
- 需要完整上下文才能继续的操作(如代码生成)
2. 流式返回(适合页面展示)
@PostMapping(value = "/askQuestion" ,produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> stream(@RequestBody
QuestionVO questionVO, HttpServletRequest request

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



