文章介绍了 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。Respon