找回密码
 立即注册
首页 业界区 安全 Langchain4j-1-流式输出

Langchain4j-1-流式输出

忿惺噱 2025-8-17 18:57:42
流式输出
参考文档:

  • 响应流式输出
  • AI Services Flux
前置准备


  • 导入响应式编程依赖包:
  1. <dependency>
  2.     <groupId>dev.langchain4j</groupId>
  3.     langchain4j-reactor</artifactId>
  4.     <version>1.0.0-beta3</version>
  5. </dependency>
复制代码

  • 配置文件设置字符集:
  1. # 设置响应的字符编码,避免流式返回输出乱码  
  2. server.servlet.encoding.charset=utf-8  
  3. server.servlet.encoding.enabled=true  
  4. server.servlet.encoding.force=true
复制代码

  • StreamingChatResponseHandler 处理流式事件:
  1. public interface StreamingChatResponseHandler {
  2.     void onPartialResponse(String partialResponse);
  3.     void onCompleteResponse(ChatResponse completeResponse);
  4.     void onError(Throwable error);
  5. }
复制代码
通过实现 StreamingChatResponseHandler,可以为以下事件定义操作:

  • 当生成下一个部分响应时:调用 onPartialResponse(String partialResponse)。可以在标记可用时立即将其发送到 UI。
  • 当 LLM 完成生成时:调用 onCompleteResponse(ChatResponse completeResponse)。 ChatResponse 对象包含完整的响应(AiMessage)以及 ChatResponseMetadata。
  • 当发生错误时:调用 onError(Throwable error)。
原生使用


  • LanguageModel -> StreamingLanguageModel
  • ChatLanguageModel -> StreamingChatLanguageModel
  1. // Config.java
  2. @Configuration  
  3. public class LLMConfig  
  4. {
  5.         // 流式对话接口 StreamingChatModel  
  6.         @Bean  
  7.         public StreamingChatModel streamingChatModel(){  
  8.             return OpenAiStreamingChatModel.builder()  
  9.                         .apiKey(System.getenv("ALIQWEN_API"))  
  10.                         .modelName("qwen-plus")  
  11.                         .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  
  12.                     .build();  
  13.         }
  14. }
  15. // Controller.java
  16. @RestController  
  17. @Slf4j  
  18. public class StreamingChatModelController  
  19. {  
  20.     @Resource //直接使用 low-level LLM API   
  21.     private StreamingChatModel streamingChatLanguageModel;  
  22.   
  23.     // http://localhost:9007/chatstream/chat?prompt=天津有什么好吃的  
  24.     @GetMapping(value = "/chatstream/chat")  
  25.     public Flux<String> chat(@RequestParam("prompt") String prompt)  
  26.     {  
  27.         System.out.println("---come in chat");  
  28.   
  29.         return Flux.create(emitter -> {  
  30.             streamingChatLanguageModel.chat(prompt, new StreamingChatResponseHandler()  
  31.             {  
  32.                 @Override  
  33.                 public void onPartialResponse(String partialResponse)  
  34.                 {  
  35.                     emitter.next(partialResponse);  
  36.                 }  
  37.   
  38.                 @Override  
  39.                 public void onCompleteResponse(ChatResponse completeResponse)  
  40.                 {  
  41.                     emitter.complete();  
  42.                 }  
  43.   
  44.                 @Override  
  45.                 public void onError(Throwable throwable)  
  46.                 {  
  47.                     emitter.error(throwable);  
  48.                 }  
  49.             });  
  50.         });  
  51.     }
复制代码
AI Services 使用


  • 接口签名为:Flux chatFlux(String prompt);
  • 传递 streamingChatModel 创建
  1. // ChatAssistant.java
  2. public interface ChatAssistant  
  3. {  
  4.     String chat(String prompt);  
  5.   
  6.     Flux<String> chatFlux(String prompt);  
  7. }
  8. // Config.java
  9. @Configuration
  10. public class LLMConfig  
  11. {
  12.         @Bean  
  13.         public ChatAssistant chatAssistant(StreamingChatModel streamingChatModel){  
  14.             return AiServices.create(ChatAssistant.class, streamingChatModel);  
  15.         }
  16. }
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册