Spring AI (二) 流式响应

7.流式响应

Spring AI中流式对话接口采用的是Spring WebFlux异步网络框架实现的.

调用 客户端chatClient 的stream() 方法得到 Flux 类型 流式对象

stream() 方法通常在流式处理的场景下被使用,尤其是在实时通信、大文件传输、或者需要逐步接收大量数据的情况下。在与阿里云通义千问的交互中,stream() 方法允许你以流式的方式接收模型的回复,这对于长文本生成、对话响应等需要逐步展示结果的场景特别有用。

7.1.简单案例

后台代码

produces = "text/event-stream" produces声明为文本事件流, 也可以设置成 produces = MediaType.TEXT_EVENT_STREAM_VALUE

    @GetMapping(value = "/chat/forStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<ChatResponse> forStream(@RequestParam(value = "message", defaultValue = "宫保鸡丁的制作方法")String message) {// 创建Prompt对象,用于发起聊天请求Prompt prompt = new Prompt(new UserMessage(message));// 向聊天客户端发送消息,启动流式聊天会话return chatClient.stream(prompt);}

前端

基于 HTTP 的 Server-Sent Events(SSE) 实现, 结合 SSE 和 Flux 向前端流式输出

目前大模型的流式响应接口所采用的技术主要是两种:WebSocketSSE。这两种方式都支持服务端主动向客户端发送内容,其中,

Websocket是一种双向通信协议,可以在一个连接上进行双向通信,即:客户端可以向服务端发送信息,服务端也可以主动向客户端发送信息。

而SSE是基于标准的Http协议实现的,是一种单向信道,即:只支持服务端向客户端发送数据。

一般我们主要是通过EventSource事件源来监听并获取服务端的消息。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<a href="index.html">返回</a> <br>
<div id="chat"></div>
<hr>
<textarea id="msg">如何玩五子棋</textarea>
<button id="btn" onclick="send()">发送</button></body>
<script>function send() {let msg = document.getElementById('msg').value;var source = new EventSource("http://localhost:8080/chat/forStream?message=" + msg);source.onmessage = function(event) {document.getElementById('chat').innerText = JSON.parse(event.data).result.output.content;};}
</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快乐数-快慢指针法

题目描述&#xff1a; 个人题解&#xff1a; 通过反复调用 getNext(n) 得到的链是一个隐式的链表。隐式意味着我们没有实际的链表节点和指针&#xff0c;但数据仍然形成链表结构。起始数字是链表的头 “节点”&#xff0c;链中的所有其他数字都是节点。next 指针是通过调用 ge…

使用两种不同的方法估计几何布朗运动随机过程的参数

使用两种不同的方法估计几何布朗运动随机过程的参数 文章目录 一、说明二. 随机过程三、马尔可夫过程3.1. 维纳进程3.2. 广义维纳过程3.3. 伊藤进程 四、几何布朗运动 &#xff08;GBM&#xff09;五、用于估计GBM工艺参数的MLE方法5.1. 最大似然估计如何工作&#xff1f;5.2、…

2024全国青少年信息素养大赛图形化编程复赛真题大全

2024年全国青少年信息素养大赛图形化编程复赛全国结束了&#xff0c;经过了3次各个赛区&#xff08;7月6日、13日、20日&#xff09;图形化编程小低组、小高组整体来看&#xff0c;真题出的都比较有水平&#xff0c;2024年全国青少年信息素养大赛总决赛将在2024年8月16日~20日在…

MySQL面试篇章——MySQL索引

文章目录 MySQL 索引索引分类索引创建和删除索引的执行过程explain 查看执行计划explain 结果字段分析 索引的底层实现原理B-树B树哈希索引 聚集和非聚集索引MyISAM&#xff08;\*.MYD&#xff0c;*.MYI&#xff09;主键索引辅助索引&#xff08;二级索引&#xff09; InnoDB&a…

PRC gRPC 框架

概述 RPC主要目的在于让开发者&#xff0c;能够方便的调用远程服务器上的服务&#xff0c;而不需要关注底层的网络通信细节。其是一种进程间通信技术&#xff0c;允许程序在不同计算机上执行代码。 RPC技术主要用于分布式系统、微服务架构以及需要进行跨网络调用服务的应用中…

项目实战二 HIS项目

目标&#xff1a; 项目的操作流程&#xff1a; 开发体系 前端开发&#xff1a;负责页面的编写 HTML CSS JavaScript 后端开发&#xff1a;看不到 摸不着的功能 常用开发语言 PHP JAVA Python 框架 &#xff1a; 半成品 做好的功能模块 版本控制 Git 分布式版本控…

鼠标连点器:是什么?如何用?鼠标自动点击器好用吗?说明书详细版(国内外6款电脑鼠标连点器分享)值得收藏!

知识科普1&#xff1a;鼠标连点器是什么&#xff1f; ⭕答&#xff1a;鼠标连点器&#xff0c;又称为鼠标点击器或自动点击器&#xff0c;是一种能够模拟鼠标点击操作的计算机软件。 鼠标连点器可以根据用户设定的参数&#xff0c;自动进行连续的鼠标点击操作&#xff0c;从而…

SQL labs-SQL注入(三)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言&#xff1a; 盲注简述&#xff1a;是在没有回显得情况下采用的注入方式&#xff0c;分为布尔盲注和时间盲注。 布尔盲注&#xff1a;布尔仅有两种形式&#xff0c;ture&#…

Java学习|Java 热排障入门

文章目录 1. 什么是热排障&#xff1f;2. 热排障的作用3. 如何进行热排障4. 热排障工具及其对比工具列表工具对比 5. 使用技巧6. 实战案例 1. 什么是热排障&#xff1f; 热排障&#xff08;Hot Troubleshooting&#xff09;&#xff0c;是指在不重启应用程序的情况下&#xff…

【LLM】-05-提示工程-部署Langchain-Chat

目录 1、软硬件要求 1.1、软件要求 1.2、硬件要求 1.3、个人配置参考 2、创建cuda环境 3、下载源码及模型 4、配置文件修改 5、初始化知识库 5.1、训练自己的知识库 6、启动 7、API接口调用 7.1、使用openai 参考官方wiki&#xff0c;本文以Ubuntu20.04_x64&#xf…

微信小程序数组绑定使用案例(二)

一、数组事件绑定&#xff0c;事件传递数据 1.wxml <text>姓名&#xff1a;{{name}} </text> <block wx:for"{{list}}"><button bind:tap"nameClick2" data-name"{{item}}">修改:{{item}}</button> </block&…

用户引导插件 driver.js

1.安装 npm install driver.js 2. import { driver } from driver.js; import driver.js/dist/driver.css; const driverObj driver({showProgress: true,steps: [{element: .keywords,popover: {title: Title,description: Description,side: left,align: start}},{eleme…

想学习Python爬虫的宝子们可以看过来,从基础开始看这一篇文章就够了!

1. 预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;Request包含&am…

单调栈(随缘复习到了,顺手刷了)

也是不知道为什么突然又复习到单调栈了&#xff0c;所以顺手刷了三道题&#xff0c;总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路&#xff1a;这题是要求每个子区间里面的最大值和最小值的差&#xff0c;我们一开始想的必然是纯暴力呀&#xff0c;但是一看这数据&#…

【MySQL进阶之路 | 高级篇】第二范式和第三范式

1. 第二范式 第二范式要求&#xff0c;在满足第一范式的基础上&#xff0c;还要满足数据表里的每一条数据记录&#xff0c;都是可唯一标识的。而且所有非主键字段&#xff0c;都必须完全依赖主键&#xff0c;不能只依赖主键的一部分。如果知道主键的所有属性的值&#xff0c;就…

C++ 基础练习 - Chapter 5(英文版)

Review Questions 5.1 How do structures in C and C differ? Answer: C structure member functions are not permitted but in C member functions are permitted. 5.2 What is class? How does it accomplish data hiding? Answer: A class is a way to bind the d…

自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感…

MySQL聚合函数(DQL)

先看一下我的表内容和数据&#xff0c;再做接下来的例子和讲解 1.聚合函数的基本语法 SELECT 聚合函数&#xff08;表中的某个字段&#xff09;FROM 表名; 2. 常见的聚合函数 举例 1.统计该企业的数量 select count(idcard) from emp; 2.统计该企业员工的平均年龄 select…

【论文精读】Fully Sparse 3D Occupancy Prediction

1 背景信息 团队&#xff1a;南京大学&#xff0c;上海人工智能实验室 时间&#xff1a;2023年12月 代码&#xff1a;https://github.com/MCG-NJU/SparseOcc 2 OCC预测存在的问题 2.1 dense 3D features 目前都是提取的密集3D特征&#xff0c;但是据统计&#xff0c;**90%*…

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外&#xff0c; 自Spring3.1开始&#xff0c;Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中&#xff1b;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用&#xff0c;将某些数据写入到缓存中间件…