忿惺噱
2025-8-17 18:57:42
流式输出
参考文档:
前置准备
- <dependency>
- <groupId>dev.langchain4j</groupId>
- 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 -> StreamingLanguageModel
- ChatLanguageModel -> 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 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);
- }
- }
复制代码 来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |
|
|
|
相关推荐
|
|