Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • SpringCloud

    • 微服务架构介绍
    • SpringCloud介绍
    • Spring Cloud:生产者与消费者
    • Spring Cloud Eureka:构建可靠的服务注册与发现
    • Spring Cloud Ribbon:负载均衡
    • Spring Cloud Fegin:服务调用
    • Spring Cloud Hystrix:熔断器
    • Spring Cloud Zuul:统一网关路由
    • Spring Cloud Config:配置中心
  • Java后端框架

    • LangChain4j

      • 介绍
      • 快速开始
      • Chat and Language Models
      • Chat Memory
      • Model Parameters
      • Response Streaming
      • AI Services
      • Agent
      • Tools (Function Calling)
      • RAG
      • Structured Outputs
      • Classification
      • Embedding (Vector) Stores
      • Image Models
      • Quarkus Integration
      • Spring Boot Integration
      • Kotlin Support
      • Logging
      • Observability
      • Testing and Evaluation
      • Model Context Protocol
  • 八股文

    • 操作系统
    • JVM介绍
    • Java多线程
    • Java集合框架
    • Java反射
    • JavaIO
    • Mybatis介绍
    • Spring介绍
    • SpringBoot介绍
    • Mysql
    • Redis
    • 数据结构
    • 云计算
    • 设计模式
    • 计算机网络
    • 锁核心类AQS
    • Nginx
  • 前端技术

    • 初识Vue3
    • Vue3数据双向绑定
    • Vue3生命周期
    • Vue-Router 组件
    • Pinia 集中式状态存储
  • 中间件

    • RocketMQ
  • 开发知识

    • 请求参数注解
    • 时间复杂度和空间复杂度
    • JSON序列化与反序列化
    • Timestamp vs Datetime
    • Java开发中必备能力单元测试
    • 正向代理和反向代理
    • 什么是VPN
    • 正则表达式
  • Java
  • Java后端框架
  • LangChain4j
xiaoyang
2025-01-14

Response Streaming

# 响应流式传输

本页面描述了使用低级 LLM API 进行响应流式传输。 关于高级 LLM API,请参见 AI 服务。

LLM 逐个生成文本标记,因此许多 LLM 提供商提供了一种方式,可以逐个标记地流式传输响应,而无需等待整个文本生成完成。 这显著提高了用户体验,因为用户无需等待未知时间,可以几乎立即开始阅读响应。

对于 ChatLanguageModel 和 LanguageModel 接口,存在相应的 StreamingChatLanguageModel 和 StreamingLanguageModel 接口。 这些接口具有类似的 API,但可以流式传输响应。 它们接受一个 StreamingResponseHandler 接口的实现作为参数。

public interface StreamingResponseHandler<T> {

    void onNext(String token);

    default void onComplete(Response<T> response) {}

    void onError(Throwable error);
}
1
2
3
4
5
6
7
8

通过实现 StreamingResponseHandler,您可以定义以下事件的操作:

  • 当生成下一个标记时:调用 onNext(String token) 方法。例如,您可以在标记可用时将其直接发送到 UI。
  • 当 LLM 完成生成时:调用 onComplete(Response<T> response) 方法。 其中,T 表示 StreamingChatLanguageModel 的 AiMessage,或 StreamingLanguageModel 的 String。Response 对象包含完整的响应。
  • 当发生错误时:调用 onError(Throwable error) 方法。

以下是如何使用 StreamingChatLanguageModel 实现流式传输的示例:

StreamingChatLanguageModel model = OpenAiStreamingChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .modelName(GPT_4_O_MINI)
    .build();

String userMessage = "Tell me a joke";

model.generate(userMessage, new StreamingResponseHandler<AiMessage>() {

    @Override
    public void onNext(String token) {
        System.out.println("onNext: " + token);
    }

    @Override
    public void onComplete(Response<AiMessage> response) {
        System.out.println("onComplete: " + response);
    }

    @Override
    public void onError(Throwable error) {
        error.printStackTrace();
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

一种更简洁的流式传输响应方式是使用 LambdaStreamingResponseHandler 类。 该实用类提供了使用 lambda 表达式创建 StreamingResponseHandler 的静态方法。 通过 lambda 表达式流式传输响应的方法非常简单。 您只需调用 onNext() 静态方法,并传入定义标记操作的 lambda 表达式:

import static dev.langchain4j.model.LambdaStreamingResponseHandler.onNext;

model.generate("Tell me a joke", onNext(System.out::print));
1
2
3

onNextAndError() 方法允许您同时定义 onNext() 和 onError() 事件的操作:

import static dev.langchain4j.model.LambdaStreamingResponseHandler.onNextAndError;

model.generate("Tell me a joke", onNextAndError(System.out::print, Throwable::printStackTrace));
1
2
3
编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← Model Parameters AI Services→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式