Langchaine4j 流式输出 (6)

article/2025/8/13 13:55:55

Langchaine4j 流式输出

大模型的流式输出是指大模型在生成文本或其他类型的数据时,不是等到整个生成过程完成后再一次性

返回所有内容,而是生成一部分就立即发送一部分给用户或下游系统,以逐步、逐块的方式返回结果。

这样,用户就不需要等待整个文本生成完成再看到结果。通过这种方式可以改善用户体验,因为用户不

需要等待太长时间,几乎可以立即开始阅读响应。

流式输出

添加流式输出依赖

<!--流式输出-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-reactor</artifactId>
</dependency>

使用流式输出模型

langchain4j:# 接入阿里百炼平台community:dashscope:streaming-chat-model:api-key: ${ALI_BAILIAN_TOKEN}model-name: qwen-plus

创建流式Assistant

@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,streamingChatModel = "qwenStreamingChatModel", // 这里注入 千问流式模型chatMemory = "chatMemory")
public interface StreamAssistant {// 使用WebFlux接受流式模型返回Flux<String> chat( String userMessage);}

测试流式输出

  • 单元测试流式输出
@SpringBootTest
public class StreamModelTest {@Resourceprivate StreamAssistant streamAssistant;@Testpublic void testStreamModel() throws InterruptedException {Flux<String> responseFlux = streamAssistant.chat("1+2等于几,322233222345的平方根是多少?");CountDownLatch latch = new CountDownLatch(1);responseFlux.doOnSubscribe(sub -> System.out.println("Subscribed to flux")).subscribe(chunk -> System.out.println("Received: " + chunk),throwable -> {System.err.println("Error occurred: " + throwable.getMessage());latch.countDown();},() -> {System.out.println("Completed");latch.countDown();});latch.await();}
}

PixPin_2025-06-01_15-07-16

  • 接口流式测试

    创建对外接口:

    @RestController
    @RequestMapping("/stream")
    public class StreamController {@Resourceprivate StreamAssistant streamAssistant;@Operation(summary = "对话")@GetMapping(value = "/chat", produces = "text/stream;charset=utf-8") // 设置响应类型为流式文本,并指定字符集为UTF-8public Flux<String> chat() {return streamAssistant.chat("1+2等于几,322233222345的平方根是多少?");}
    }
    

    chrome_stream


http://www.hkcw.cn/article/wkIhopnVgt.shtml

相关文章

代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包依赖包安装包加载需要的R包数据下载以及转换mzML数据预处理代谢物注释LipidFinder过滤MultiABLER数据预处理过滤补缺失值对数变换数据标准化下游数据分析总结系统信息参考介…

常量指真,指针常量 ,

const int*p&#xff1b;//const int 值不能变 指向可以变 int *const p&#xff1b;//const p 指向不可以变 值能变

智能指针unique

什么是智能指针&#xff1a; 就像是一个自动管家 帮你管理内存 自动清理不需要的内存 防止内存泄漏 unique_ptr 的特点&#xff1a; 独占所有权&#xff1a;一个资源只能被一个 unique_ptr 管理 不能复制&#xff1a;只能移动 自动释放&#xff1a;当 unique_ptr 被销毁…

并发执行问题 下

这段例子 是让S3 在S2后面运行 写完数据 通知后 另一个进程 竞争使用资源 独占资源 shell解释器 科学语言才有并发语句语言 C语言没有 使用多线程和多进程实现并发运行

[JS逆向] 福建电子交易平台

博客配套代码发布于github&#xff1a;福建电子交易平台 相关知识点&#xff1a;[爬虫知识] 密码学&#xff1a;通往JS逆向路上必会的一环 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 此案例目标为对福建省电子公共服务平台逆向&#xff0c;并爬…

Mask_RCNN 环境配置及训练

目录 一、Mask_RCNN代码及权重 1、源码下载 2、权重获取 二、环境配置 1、创建虚拟环境 2、安装必要的包 三、测试环境 1、使用coco 2、使用balloon 四、测试 1、使用coco 2、使用balloon 一、Mask_RCNN代码及权重 均从github获取&#xff0c;以下是相关链接&#…

72.编辑用户消息功能之前端实现

大体设想 我想实现的一个功能是在用户发出的消息下面有一个图标是编辑&#xff0c;按下那个图标之后&#xff0c;用户可以修改对应的那个消息&#xff0c;修改完成点击确认之后&#xff0c;用户下面对用的那个AI的回答可以重新生成 之前已经介绍了后端实现&#xff0c;这篇博…

第303个Vulnhub靶场演练攻略:Thales1

Thales1 Vulnhub 演练 “Thales”是 Vulnhub 上的夺旗挑战赛。MachineBoy 开发了这款机器&#xff0c;功不可没。https://www.vulnhub.com/entry/thales-1,749/在本教程中&#xff0c;我们将学习如何利用 Tomcat 应用程序管理器实例中的漏洞获取系统访问权限&#xff0c;以及如…

vscode + cmake + ninja+ gcc 搭建MCU开发环境

vscode cmake ninja gcc 搭建MCU开发环境 文章目录 vscode cmake ninja gcc 搭建MCU开发环境1. 前言2. 工具安装及介绍2.1 gcc2.1.1 gcc 介绍2.1.2 gcc 下载及安装 2.2 ninja2.2.1 ninja 介绍2.2 ninja 安装 2.3 cmake2.3.1 cmake 介绍2.3.2 cmake 安装 2.4 VScode 3. 上手…

GNSS终端授时之四:高精度的PTP授时

我们在GNSS终端的授时之三&#xff1a;NTP网络授时中介绍了NTP网络授时的基本原理。我们知道了NTP授时的精度跟网络环境相关&#xff0c;即使在局域网中NTP授时的精度也只能到ms级别。如果广域网&#xff0c;经过多级交换机&#xff0c;路由器&#xff0c;由于传输路径和延时的…

Amazon Augmented AI:人类智慧与AI协作,破解机器学习审核难题

在人工智能日益渗透业务核心的今天&#xff0c;你是否遭遇过这样的困境&#xff1a;自动化AI处理海量数据时&#xff0c;面对模糊、复杂或高风险的场景频频“卡壳”&#xff1f;人工审核团队则被低效、重复的任务压得喘不过气&#xff1f;Amazon Augmented AI (A2I) 的诞生&…

OS10.【Linux】yum命令

目录 1.安装软件的几种方法 直接编译源代码,得到可执行程序 使用软件包管理器 2.yum yum list命令 参数解释 yum install命令 yum remove命令 下载链接存放的位置 扩展yum源 实验:安装sl小火车命令 sl命令的选项 方法1:man sl 方法2:读源代码 3.更新yum源 查看…

网络协议的原理及应用层

网络协议 网络协议目的为了减少通信成本&#xff0c;所有的网络问题都是传输距离变长的问题。 协议的概念&#xff1a;用计算机语言来发出不同的信号&#xff0c;信号代表不同的含义&#xff0c;这就是通信双方的共识&#xff0c;便就是协议。 协议分层&#xff08;语言层和…

【计算机网络】第3章:传输层—可靠数据传输的原理

目录 一、PPT 二、总结 &#xff08;一&#xff09;可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心&#xff1a;滑…

RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…

Java流【全】

IO流分类 AA、根据数据流动的方向:输入流和输出流 如:打开一个新的记事本并输入一些内容,而这些内容是在内存里面的,没有存储到磁盘中,当点击保存之后,数据才会从内存流向磁盘;当双击打开磁盘文件的时候,数据才会从磁盘流向内存【数据存储有一个特点:内存一旦断电数…

大模型登《情报学报》!大模型驱动的学术文本挖掘!

武汉大学信息管理学院、武汉大学信息检索与知识挖掘研究所的陆伟、刘寅鹏、石湘、刘家伟、程齐凯、黄永和汪磊共同研究的《大模型驱动的学术文本挖掘——推理端指令策略构建及能力评测》在《情报学报》中发表。论文以学术文本挖掘任务为切入点&#xff0c;构建涵盖文本分类、信…

UI 设计|提高审美|极简扁平过时吗?

​在做UI界面时&#xff0c;极简扁平一直是个稳妥又高适配的选择。它没有复杂的质感和装饰&#xff0c;更强调清晰、直接和功能导向&#xff0c;能快速搭建出干净、有秩序的界面&#xff0c;适合大多数场景落地。 但是也确实有太多太相似的极简导致确实辨识度&#xff0c;这中…

哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者单位&#xff1a;哈尔滨工业大学空间光学工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

#14 【Kaggle】 Drawing with LLMs 金牌方案赏析

用大模型画svg的比赛结束了,本来还是银牌的,shake down成了铜牌… 痛定思痛,瞻仰一下第一名的金牌解决方案。 🍕 比赛简单介绍 给定一段描述图像的文本提示,你的任务是生成可缩放矢量图形(SVG)代码,将其尽可能准确地渲染为一幅图像。 本次竞赛旨在构建既实用又可复用…