当前位置: 首页 > news >正文

* LangChain4j中的流式调用

在大模型对话中用户最怕的就是盯着屏幕等半天然后“刷”地一下弹出一大段文字。这种体验就像发短信等回信而流式调用则像面对面聊天对方说一个字你就能听到一个字。之前我们用的是阻塞式调用模型把所有回答想好了才一次性给出来。这一节我们就来学习如何用 LangChain4j 实现流式调用让文字像打字机一样逐字呈现。一、流式调用需要什么流式调用的核心是服务器端持续推送数据客户端持续接收并渲染。在技术栈上我们需要两样东西服务端支持流式响应的模型StreamingChatModel和能够输出反应式流的接口Flux客户端能够逐步消费流数据的前端页面LangChain4j 为我们提供了完整的支持只需调整少量配置和代码即可。二、引入必要依赖在原有项目基础上加入 Spring WebFlux 和 LangChain4j 的反应式模块!-- Source: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency !-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-reactor -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-reactor/artifactId version1.15.0-beta25/version /dependency完整的pom.xml配置如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.5.14/version relativePath/ /parent artifactIdLangChain4j-SpringBoot/artifactId properties maven.compiler.source21/maven.compiler.source maven.compiler.target21/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencies !-- 具体的 模型驱动负责集成OpenAI并生成基础AI对象。 -- !-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-open-ai-spring-boot-starter -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai-spring-boot-starter/artifactId version1.15.0-beta25/version /dependency !-- 框架的 功能核心负责提供自动配置和高级AI服务声明 -- !-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-spring-boot-starter -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-spring-boot-starter/artifactId version1.15.0-beta25/version /dependency !-- Source: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency !-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-reactor -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-reactor/artifactId version1.15.0-beta25/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId version3.5.14/version /dependency /dependencies /project三、配置流式模型对象在application.yml中除了之前的阻塞式模型新增流式模型的配置langchain4j: open-ai: streaming-chat-model: #流式模型配置 base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 api-key: ${API-KEY} model-name: qwen-plus log-requests: true log-responses: true启动后LangChain4j 会自动往容器中注入OpenAiStreamingChatModelBean 名称为openAiStreamingChatModel。完整配置如下langchain4j: open-ai: chat-model: base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 #api-key: ${API-KEY} # 引用环境变量 api-key: sk-xxxx model-name: qwen-plus log-requests: true # 打印请求日志 log-responses: true # 打印响应日志 streaming-chat-model: #流式模型配置 base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 #api-key: ${API-KEY} api-key: sk-xxxx model-name: qwen-plus log-requests: true log-responses: true logging: level: dev.langchain4j: debug # 设置日志级别四、改造接口层返回反应式流4.1 调整 ConsultantService将 streamChat方法的返回值为FluxString反应式字符串流package com.langchan4jSpringBoot.aiService; import dev.langchain4j.service.spring.AiService; import reactor.core.publisher.Flux; AiService public interface ConsultantService { //用于聊天的方法,message为用户输入的内容 public String chat(String message); FluxString streamChat(String message); }4.2 调整 ChatControllerController 中新增streamChat方法返回值为FluxString并设置正确的响应类型进行流式输出produces MediaType.TEXT_EVENT_STREAM_VALUEpackage com.langchan4jSpringBoot.controller; import com.langchan4jSpringBoot.aiService.ConsultantService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; RestController public class ChatController { Autowired private ConsultantService consultantService; RequestMapping(/chat) public String chat(RequestParam(message) String message) { String result consultantService.chat(message); return result; } RequestMapping(value /streamChat, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString streamChat(RequestParam(message) String message) { return consultantService.streamChat(message); } }4.3进行测试在输入框中输入问题点击发送你会看到文字像真人打字一样逐字出现在屏幕上。这就是流式调用带来的交互体验——低延迟、即时反馈、更自然。五、小结从阻塞到流式我们只改了三处依赖添加spring-boot-starter-webflux和langchain4j-reactor配置增加streaming-chat-model的 yml 配置接口ConsultantService和ChatController的返回值改为FluxString并在AiService中指定streamingChatModelLangChain4j 将底层流式模型的复杂细节封装得干干净净我们只需关注返回值类型和模型指定两个点代码层面的改动量极小。配合一个简单的前端页面就能让 AI 对话体验从“等快递”变成“看直播”。核心改动仅三处添加依赖spring-boot-starter-webflux提供 Flux 反应式流支持langchain4j-reactorLangChain4j 的反应式适配器配置流式模型在application.yml中增加langchain4j.open-ai.streaming-chat-model配置项base-url、api-key、model-name 等Spring Boot 会自动注入OpenAiStreamingChatModelBean。改造接口返回值服务层(ConsultantService)将streamChat方法返回类型改为FluxString控制器(ChatController)新增/streamChat接口设置produces MediaType.TEXT_EVENT_STREAM_VALUE直接返回FluxString流
http://www.gsyq.cn/news/1340511.html

相关文章:

  • Java实战:熵权法原理详解+房产价值评估系统设计(上)—— 构建客观多指标评价模型
  • 【Midjourney毛发质感生成终极指南】:20年AI图像专家亲授7大不可外传的提示词结构与参数微调公式
  • 为OpenClaw智能体工作流配置Taotoken作为稳定的模型供应后端
  • 巨亏47亿,市值5000亿:拆解智谱AI的定价逻辑
  • 初入职场:在琐碎中筑牢测试根基
  • 数据结构笔记(持续更新)
  • Continental CICP1800RB继电器扩展板
  • 长期项目使用Taotoken聚合API的稳定性与容灾感受
  • 全国二手摩托车第三方检测机构推荐 - GrowthUME
  • 终极电视浏览器解决方案:如何让智能电视真正“上网冲浪“?
  • AI Agent将如何重构制造业的市场竞争战略决策模式?[2026数智转型深度洞察与技术解决方案]
  • OpenClaw(小龙虾AI)Windows一键部署包v2.7.5|零代码+可视化操作
  • 云南蜜月游靠谱的旅行社企业找哪家 2026.05.21 - GrowthUME
  • 基于少样本学习和思维链提示的知识概念抽取方法研究
  • OpenAvatarChat终极部署指南:如何构建企业级数字人对话系统
  • vue3+python基于Django的羽毛球场地预约服务管理系统设计与实现869373194
  • iMeta | 山东大学冯世庆/周恒星组-脊髓损伤引发急性微生物组休克及多器官转录组重编程
  • Midjourney金属质感渲染实战手册(航天级铝钛合金/做旧铜锈/镜面不锈钢三重进阶)
  • 宏裕塑胶代理GE塑料全系列产品,提供沙伯基础创新SABIC高性能材料解决方案
  • 武汉到广西物流专线:高效、安全、快捷的干线运输解决方案 - GrowthUME
  • 阿姨语义化智能匹配实战:基于 Milvus + LangChain 的 RAG 系统,用户匹配满意度提升至 80%
  • 特斯拉FSD入华:马斯克付出啥代价?中国车主咋选?
  • 普宁不乱推销的眼镜店推荐|怎么判断一家眼镜店是否诚信 - 品牌观察
  • 实力强强联合!OpenClaw 接入 Kimi 大模型完整配置教程
  • 2026郴州黄金回收实测:5家本地靠谱平台排名 - 小仙贝贝
  • Captain AI:Ozon多维度运营复盘,数据驱动精细化运营
  • 如何快速掌握TegraRcmGUI:Windows上最简单的Switch注入工具终极指南
  • 告别枯燥重复!5分钟上手碧蓝航线自动化脚本,让你的游戏时间更有价值
  • 终极AI评估指南:用DeepEval开源框架轻松保障你的大语言模型质量
  • 布料物理属性映射全解析,深度拆解纤维密度、捻度、反射率三重参数如何被MJ隐式编码