第4章:在LangChain中如何实现响应式流(ResponseStreaming)
- 创业
- 2025-08-23 18:33:01

文章介绍了 LangChain4j 中的 响应流式传输(Response Streaming) 功能,展示了如何通过低层次的 LLM(大语言模型)API 实现逐个令牌(token)的流式响应。
响应式流(Response Streaming)
注意: 本页面描述的是使用低级LLM API实现响应式流。如果需要使用高级LLM API,请参考AI服务部分。
语言模型(LLM)是逐token生成文本的,因此许多LLM提供商提供了逐token流式传输响应的功能,而不是等待整个文本生成完成。这种机制显著提升了用户体验,因为用户无需等待未知的时间,几乎可以立即开始阅读响应内容。
概述对于ChatLanguageModel和LanguageModel接口,LangChain4j提供了对应的StreamingChatLanguageModel和StreamingLanguageModel接口。这些接口的API类似,但支持流式传输响应。它们接受一个实现了StreamingResponseHandler接口的对象作为参数。
public interface StreamingResponseHandler<T> { void onNext(String token); // 当生成下一个token时调用 default void onComplete(Response<T> response) {} // 当LLM完成生成时调用 void onError(Throwable error); // 当发生错误时调用 } 基于Model的实现通过实现StreamingResponseHandler接口,你可以定义以下事件的行为:
生成下一个token时:调用onNext(String token)方法。例如,你可以立即将token发送到用户界面。LLM完成生成时:调用onComplete(Response response)方法。其中,T在StreamingChatLanguageModel中代表AiMessage,在StreamingLanguageModel中代表String。Response对象包含完整的响应内容。发生错误时:调用onError(Throwable error)方法。以下是一个使用StreamingChatLanguageModel实现流式响应的示例:
StreamingChatLanguageModel model = OpenAiStreamingChatModel.builder() .apiKey(System.getenv("OPENAI_API_KEY")) // 设置API密钥 .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); // 每次生成token时打印 } @Override public void onComplete(Response<AiMessage> response) { System.out.println("onComplete: " + response); // 完成时打印完整响应 } @Override public void onError(Throwable error) { error.printStackTrace(); // 发生错误时打印堆栈 } }); 使用Lambda表达式简化流式响应为了更简洁地实现流式响应,LangChain4j提供了一个工具类LambdaStreamingResponseHandler。这个类提供了静态方法,可以通过Lambda表达式创建StreamingResponseHandler。使用Lambda表达式实现流式响应非常简单,只需调用onNext()静态方法,并定义如何处理token:
import static dev.langchain4j.model.LambdaStreamingResponseHandler.onNext; model.generate("Tell me a joke", onNext(System.out::print)); // 使用Lambda表达式直接打印token此外,onNextAndError()方法允许同时定义onNext()和onError()事件的行为:
import static dev.langchain4j.model.LambdaStreamingResponseHandler.onNextAndError; model.generate("Tell me a joke", onNextAndError(System.out::print, Throwable::printStackTrace)); 总结这篇文章介绍了LangChain4j中如何实现响应式流(Response Streaming),即逐token接收LLM生成的内容,而不是等待整个响应完成。这种方式显著提升了用户体验,尤其是在处理长文本生成时。文章的核心内容包括:
响应式流的原理:LLM逐token生成文本,通过流式传输可以立即向用户展示部分结果。StreamingResponseHandler接口:通过实现这个接口,可以定义如何处理每个token、完成事件和错误事件。实现示例:展示了如何使用StreamingChatLanguageModel和StreamingResponseHandler实现流式响应。Lambda表达式简化:通过LambdaStreamingResponseHandler,可以使用Lambda表达式更简洁地实现流式响应。 这种流式传输机制特别适用于需要实时展示生成内容的场景,例如聊天机器人、实时翻译或内容生成应用。第4章:在LangChain中如何实现响应式流(ResponseStreaming)由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“第4章:在LangChain中如何实现响应式流(ResponseStreaming)”