2.流式响应对话

产生背景

1
LLM 生成完整回答通常需要一定时间,如果等所有 token 都生成完再返回,用户会感觉首包响应慢、等待时间长。

流式传输特点

1
2
3
4
5
6
7
8
9
10
11
模型每生成一部分 token,就可以立即推送给客户端,
客户端可以边接收边展示,无需等待完整回答全部生成。

优点:
1. 降低用户感知延迟;
2. 提升交互体验,类似 ChatGPT 逐字输出;
3. 适合长文本生成、代码生成、报告生成等耗时场景。

注意:
流式传输通常不能缩短模型生成完整内容的总耗时,
主要是让用户更早看到部分结果。

基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
OpenAiStreamingChatModel streamChatModel = OpenAiStreamingChatModel.builder()
.apiKey(System.getenv("AI_KEY"))
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();

//防止在发送消息后,还没等到响应程序就退出
CountDownLatch latch = new CountDownLatch(1);

//发送消息,并配置响应相关配置
streamChatModel.chat("你好呀", new StreamingChatResponseHandler() {

//在部分token响应时调用
@Override
public void onPartialResponse(String partialResponse) {
System.out.printf("part_response:"+partialResponse);
StreamingChatResponseHandler.super.onPartialResponse(partialResponse);
}

//在全部响应完后调用
@Override
public void onCompleteResponse(ChatResponse chatResponse) {
System.out.println("响应完成");
}

@Override
public void onError(Throwable throwable) {

}
});

//阻塞程序,防止退出
latch.await();

简化响应配置

方式1:

1
2
//使用LambdaStreamingResponseHandler.onPartialResponse简化响应配置(只配置在部分响应时的操作)
streamChatModel.chat("Tell me a joke", onPartialResponse(System.out::print));

方式2:

1
2
//使用LambdaStreamingResponseHandler.onPartialResponseAndError(配置在 部分响应 和 错误 时的操作)
streamChatModel.chat("Tell me a joke", onPartialResponseAndError(System.out::print, Throwable::printStackTrace));

2.流式响应对话
https://roseflower.site/2026/08/23/langchain4j/3.流式响应对话/
发布于
2026年8月23日
许可协议