Langchain4j-1-流式輸出
流式輸出
參考文檔:
前置準備
- 導入響應式編程依賴包:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-reactor</artifactId>
<version>1.0.0-beta3</version>
</dependency>
- 配置文件設置字符集:
# 設置響應的字符編碼,避免流式返回輸出亂碼
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
StreamingChatResponseHandler處理流式事件:
public interface StreamingChatResponseHandler {
void onPartialResponse(String partialResponse);
void onCompleteResponse(ChatResponse completeResponse);
void onError(Throwable error);
}
通過實現 StreamingChatResponseHandler,可以為以下事件定義操作:
- 當生成下一個部分響應時:調用
onPartialResponse(String partialResponse)。可以在標記可用時立即將其發送到 UI。 - 當 LLM 完成生成時:調用
onCompleteResponse(ChatResponse completeResponse)。ChatResponse對象包含完整的響應(AiMessage)以及ChatResponseMetadata。 - 當發生錯誤時:調用
onError(Throwable error)。
原生使用
LanguageModel->StreamingLanguageModelChatLanguageModel->StreamingChatLanguageModel
// Config.java
@Configuration
public class LLMConfig
{
// 流式對話接口 StreamingChatModel
@Bean
public StreamingChatModel streamingChatModel(){
return OpenAiStreamingChatModel.builder()
.apiKey(System.getenv("ALIQWEN_API"))
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
}
// Controller.java
@RestController
@Slf4j
public class StreamingChatModelController
{
@Resource //直接使用 low-level LLM API
private StreamingChatModel streamingChatLanguageModel;
// http://localhost:9007/chatstream/chat?prompt=天津有什么好吃的
@GetMapping(value = "/chatstream/chat")
public Flux<String> chat(@RequestParam("prompt") String prompt)
{
System.out.println("---come in chat");
return Flux.create(emitter -> {
streamingChatLanguageModel.chat(prompt, new StreamingChatResponseHandler()
{
@Override
public void onPartialResponse(String partialResponse)
{
emitter.next(partialResponse);
}
@Override
public void onCompleteResponse(ChatResponse completeResponse)
{
emitter.complete();
}
@Override
public void onError(Throwable throwable)
{
emitter.error(throwable);
}
});
});
}
AI Services 使用
- 接口簽名為:
Flux<String> chatFlux(String prompt); - 傳遞 streamingChatModel 創建
// ChatAssistant.java
public interface ChatAssistant
{
String chat(String prompt);
Flux<String> chatFlux(String prompt);
}
// Config.java
@Configuration
public class LLMConfig
{
@Bean
public ChatAssistant chatAssistant(StreamingChatModel streamingChatModel){
return AiServices.create(ChatAssistant.class, streamingChatModel);
}
}

浙公網安備 33010602011771號