汝雨竹 发表于 2025-9-28 16:46:57

Langchain4j-1-流式输出

流式输出
参考文档:

[*]响应流式输出
[*]AI Services Flux
前置准备


[*]导入响应式编程依赖包:
<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);
        }
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

轮达 发表于 2025-10-7 16:48:56

分享、互助 让互联网精神温暖你我

羊舌正清 发表于 2025-11-18 20:34:52

喜欢鼓捣这些软件,现在用得少,谢谢分享!

司马黛 发表于 2025-11-29 09:45:54

这个有用。

任佳湍 发表于 2025-12-6 15:16:27

收藏一下   不知道什么时候能用到

佴莘莘 发表于 2025-12-8 18:48:48

不错,里面软件多更新就更好了

荪俗 发表于 2025-12-21 09:38:40

过来提前占个楼

林鱼 发表于 2025-12-21 20:58:51

谢谢分享,辛苦了

汲佩杉 发表于 2026-1-17 14:46:19

感谢发布原创作品,程序园因你更精彩

路逸思 发表于 2026-1-17 20:46:48

过来提前占个楼

讹过畔 发表于 2026-1-18 05:08:43

感谢,下载保存了

乳杂丫 发表于 2026-1-20 13:25:07

分享、互助 让互联网精神温暖你我

章绮云 发表于 2026-1-20 22:00:58

谢谢分享,试用一下

酒跚骼 发表于 2026-1-21 10:20:52

懂技术并乐意极积无私分享的人越来越少。珍惜

郗燕岚 发表于 2026-1-22 03:45:12

感谢发布原创作品,程序园因你更精彩

谅潭好 发表于 2026-1-22 10:42:50

新版吗?好像是停更了吧。

院儿饯 发表于 2026-1-22 12:11:41

这个好,看起来很实用

嗣伐 发表于 2026-1-22 12:23:34

喜欢鼓捣这些软件,现在用得少,谢谢分享!

圣罩 发表于 2026-1-23 08:32:35

东西不错很实用谢谢分享

骆贵 发表于 2026-1-23 08:36:44

感谢分享,下载保存了,貌似很强大
页: [1] 2
查看完整版本: Langchain4j-1-流式输出