langchain4j-7 (Response Streaming 响应流)
流式传输响应的一种更紧凑的方法是使用 LambdaStreamingResponseHandler class。对于 ChatLanguageModel 和 LanguageModel 接口,有相应的 StreamingChatLanguageModel 和 StreamingLanguageModel 接口。LLMs一次生成一个令牌的文本,因此许多LLM提供商提供了一种逐个令牌流式传输响应的方法
Response Streaming
本页介绍使用低级 LLM API 的响应流式处理。有关高级 LLM API,请参阅 AI 服务 https://docs.langchain4j.dev/tutorials/ai-services/#streaming。
LLMs一次生成一个令牌的文本,因此许多LLM提供商提供了一种逐个令牌流式传输响应的方法,而不是等待生成整个文本。这显著改善了用户体验,因为用户不需要等待未知的时间,几乎可以立即开始读取响应。
对于 ChatLanguageModel 和 LanguageModel 接口,有相应的 StreamingChatLanguageModel 和 StreamingLanguageModel 接口。这些具有类似的 API,但可以流式传输响应。它们接受 StreamingChatResponseHandler 接口的实现作为参数。
public interface StreamingChatResponseHandler {
void onPartialResponse(String partialResponse);
void onCompleteResponse(ChatResponse completeResponse);
void onError(Throwable error);
}
通过实现 StreamingChatResponseHandler,您可以为以下事件定义作:
- 当生成下一个部分响应时: onPartialResponse(String partialResponse) 被调用。部分响应可以由单个或多个标记组成。例如,您可以在令牌可用后立即将其直接发送到 UI。
- 当 LLM has completed generation: onCompleteResponse(ChatResponse completeResponse) 被调用时。ChatResponse 对象包含完整的响应 (AiMessage) 以及 ChatResponseMetadata。
- 发生错误时:调用 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.chat(userMessage, new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String partialResponse) {
System.out.println("onPartialResponse: " + partialResponse);
}
@Override
public void onCompleteResponse(ChatResponse completeResponse) {
System.out.println("onCompleteResponse: " + completeResponse);
}
@Override
public void onError(Throwable error) {
error.printStackTrace();
}
});
流式传输响应的一种更紧凑的方法是使用 LambdaStreamingResponseHandler class。此实用程序类提供静态方法,以使用 lambda 表达式创建 StreamingChatResponseHandler。使用 lambda 流式传输响应的方法非常简单。您只需使用 lambda 表达式调用 onPartialResponse() 静态方法,该表达式定义如何处理部分响应:
import static dev.langchain4j.model.LambdaStreamingResponseHandler.onPartialResponse;
model.chat("Tell me a joke", onPartialResponse(System.out::print));
onPartialResponseAndError() 方法允许您为 onPartialResponse() 和 onError() 事件定义作:
import static dev.langchain4j.model.LambdaStreamingResponseHandler.onPartialResponseAndError;
model.chat("Tell me a joke", onPartialResponseAndError(System.out::print, Throwable::printStackTrace));
更多推荐



所有评论(0)