侧边栏壁纸
博主头像
米老鼠吃薯片 博主等级

行动起来,活在当下

  • 累计撰写 7 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
ai

2.流式响应对话

Administrator
2026-04-26 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

产生背景

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

流式传输特点

模型每生成一部分 token,就可以立即推送给客户端,
客户端可以边接收边展示,无需等待完整回答全部生成。

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

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

基础用法

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:

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

方式2:

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

评论区