部署DeepSeek模型,进群交流最in玩法!
立即加群
发布
社区首页 >专栏 >langchain4j+springboot流式输出

langchain4j+springboot流式输出

原创
作者头像
code4it
发布2025-02-24 12:42:05
发布2025-02-24 12:42:05
24000
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下langchain4j+springboot如何实现流式输出

步骤

pom.xml

代码语言:javascript
代码运行次数:0
复制
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-reactor</artifactId>
            <version>$1.0.0-beta1</version>
        </dependency>

application.yaml

代码语言:javascript
代码运行次数:0
复制
langchain4j:
  ollama:
    streaming-chat-model:
      base-url: http://localhost:11434
      model-name: deepseek-r1:8b

配置了langchain4j.ollama.streaming-chat-model.base-url的配置就可以自动开启并注入streamingChatModel

controller

代码语言:javascript
代码运行次数:0
复制
    @Autowired
    StreamingChatLanguageModel streamingChatModel;

    @GetMapping("/stream")
    public Flux<String> stream(@RequestParam("prompt") String prompt, HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");
        return Flux.create(sink -> {
            streamingChatModel.chat(prompt, new StreamingChatResponseHandler() {
                @Override
                public void onPartialResponse(String partialResponse) {
                    log.info("onPartialResponse:{}", partialResponse);
                    sink.next(partialResponse);
                }

                @Override
                public void onCompleteResponse(ChatResponse completeResponse) {
                    log.info("complete:{}", completeResponse);
                    sink.complete();
                }

                @Override
                public void onError(Throwable error) {
                    sink.error(error);
                }
            });

        });
    }

StreamingChatLanguageModel提供了StreamingChatResponseHandler用于处理片段结果,结合Flux可以实现流式输出

源码

dev/langchain4j/ollama/spring/AutoConfig.java

代码语言:javascript
代码运行次数:0
复制
    @Bean
    @ConditionalOnProperty(PREFIX + ".streaming-chat-model.base-url")
    OllamaStreamingChatModel ollamaStreamingChatModel(
            @Qualifier(OLLAMA_STREAMING_CHAT_MODEL_HTTP_CLIENT_BUILDER) HttpClientBuilder httpClientBuilder,
            Properties properties,
            ObjectProvider<ChatModelListener> listeners
    ) {
        ChatModelProperties chatModelProperties = properties.getStreamingChatModel();
        return OllamaStreamingChatModel.builder()
                .httpClientBuilder(httpClientBuilder)
                .baseUrl(chatModelProperties.getBaseUrl())
                .modelName(chatModelProperties.getModelName())
                .temperature(chatModelProperties.getTemperature())
                .topK(chatModelProperties.getTopK())
                .topP(chatModelProperties.getTopP())
                .repeatPenalty(chatModelProperties.getRepeatPenalty())
                .seed(chatModelProperties.getSeed())
                .numPredict(chatModelProperties.getNumPredict())
                .stop(chatModelProperties.getStop())
                .format(chatModelProperties.getFormat())
                .supportedCapabilities(chatModelProperties.getSupportedCapabilities())
                .timeout(chatModelProperties.getTimeout())
                .customHeaders(chatModelProperties.getCustomHeaders())
                .logRequests(chatModelProperties.getLogRequests())
                .logResponses(chatModelProperties.getLogResponses())
                .listeners(listeners.orderedStream().toList())
                .build();
    }

langchain4j-ollama-spring-boot-starter的AutoConfig当检测到有配置langchain4j.ollama.streaming-chat-model.base-url的时候会自动配置OllamaStreamingChatModel,它实现了StreamingChatLanguageModel接口

小结

langchain4j-ollama-spring-boot-starter提供了OllamaStreamingChatModel实现了StreamingChatLanguageModel接口,不过貌似没有提供对spring mvc的内置集成,需要自己通过Flux及StreamingChatResponseHandler去适配下。

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤
    • pom.xml
    • application.yaml
    • controller
    • 源码
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档