LangChain4j 快速入门:流式响应(Streaming Response)
LLM 每次生成一个Token,因此许多 LLM 提供商都提供逐个Token的流式传输响应方法,而不是等待生成整个文本。这显著改善了用户体验,因为用户无需等待未知的时间,几乎可以立即开始阅读响应。
对于ChatLanguageModel
和LanguageModel
接口,有对应的 StreamingChatLanguageModel
和StreamingLanguageModel
接口。它们具有类似的 API,但可以流式传输响应。它们接受StreamingResponseHandler
接口的实现作为参数。
public interface StreamingResponseHandler<T> {
void onNext(String token);
default void onComplete(Response<T> response) {}
void onError(Throwable error);
}
通过实现 StreamingResponseHandler
,你可以为以下事件定义操作:
- 生成下一个令牌时:
onNext(String token)
被调用。例如,您可以在令牌可用时立即将其直接发送到 UI。 - 当 LLM 完成生成时:
onComplete(Response<T> response)
被调用。这里,T 在使用StreamingChatLanguageModel
代表AiMessage
,在使用StreamingLanguageModel
的情况下代表String
。Response 对象包含完整的响应。 - 当发生错误时:onError(Throwable error) 被调用。
下面是一个如何使用StreamingChatLanguageModel
实现流式传输的示例:
StreamingChatLanguageModel model = OpenAiStreamingChatModel.withApiKey(System.getenv("OPENAI_API_KEY"));
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();
}
});
https://docs.langchain4j.dev/tutorials/response-streaming/
作者:Jeebiz 创建时间:2024-08-18 23:47
最后编辑:Jeebiz 更新时间:2024-08-18 23:51
最后编辑:Jeebiz 更新时间:2024-08-18 23:51