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

java 千帆大模型 流式返回

聊天有两个接口,第一个是获取token, 第二个是聊天接口,具体参照官方文档

下面是流式调用聊天接口,单次的,不含上下文

    @Value("${qianfan.apiKey}")private String apiKey;@Value("${qianfan.secretKey}")private String secretKey;@Value("${qianfan.tokenUrl}")private String tokenUrl;@Value("${qianfan.chatUrl}")private String chatUrl;private final OkHttpClient client = new OkHttpClient();private static final String ACCESS_TOKEN_PRE = "?access_token=";@SneakyThrowspublic Flux<String> getAnswer(Message message, String token) {RequestMessage requestBody = new RequestMessage();requestBody.addMessage(message);String jsonStr = JSON.toJSONString(requestBody);MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, jsonStr);Request request = new Request.Builder().url(chatUrl + ACCESS_TOKEN_PRE + token).addHeader("Content-Type", "application/json").method("POST", body).build();Response response = client.newCall(request).execute();ResponseBody responseBody = response.body();if (responseBody != null) {BufferedReader reader = new BufferedReader(responseBody.charStream());return Flux.<String>generate(sink -> { // 流式响应式接口try {String line = reader.readLine();line = line.replace("data: ", "");JSONObject json = JSON.parseObject(line);if (null != json && StringUtils.isNotBlank((String) json.get("result"))) {sink.next((String) json.get("result")); // 返回答案} else if (null != json && (Boolean) json.get("is_end")) {sink.complete(); // 结束响应} else {sink.next("\u200B"); // 返回空白字符}} catch (IOException e) {sink.error(e);}}).doFinally(signalType -> {try {reader.close();responseBody.close();} catch (IOException e) {// handle exception}});}return Flux.empty();}

对应controller

   @GetMapping(value = "/chat", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)@CrossOrigin(origins = "*")public Flux<String> chat(@Valid Message vo){return xxxService.chat(vo);}

入参

@Data@AllArgsConstructor
@NoArgsConstructor
public class Message {/*** 用户角色* 目前支持:* user 用户* assistant 对话助手*/@ApiModelProperty(value = "用户角色", example = "user",hidden = true)private String role = "user";/*** 对话内容。*/@ApiModelProperty(value = "对话内容")@NotBlank(message = "对话内容不能为空")private String content;}
@Data
public class RequestMessage {/*** 聊天上下文*/List<Message> messages = new ArrayList<>();/*** 范围(0~1.0]* 较高的数值会使输出更加随机*/float temperature = Float.parseFloat("0.95");/*** 影响文本的多样性,取值越大生成的文本多样性越强* 建议该参数与temperature只设置一个。建议top_p和temperature不要同时更改*/float top_p = Float.parseFloat("0.8");/*** 通过对已生成的token增加惩罚,减少重复生成的现象* 值越大,惩罚越大* 取值范围[1,2]*/float penalty_score = Float.parseFloat("1.0");/*** 是否以流式接口形式返回数据*/boolean stream = true;/*** 模型人设*/String system = null;/*** 表示用户唯一标识符,用于监测和检测滥用行为。防止接口恶意调用。*/String user_id = "";public void addMessage(Message message){this.messages.add(message);}
}

部署服务器后,不是流式响应的话,需要在NGINX的配置文件中加上:

proxy_buffering off;

http {include       mime.types;default_type  application/octet-stream;proxy_buffering off;client_max_body_size 5000M;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                 '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for" "$server_protocol"';

然后重启NGINX即可!

相关文章:

java 千帆大模型 流式返回

聊天有两个接口,第一个是获取token, 第二个是聊天接口,具体参照官方文档 下面是流式调用聊天接口,单次的,不含上下文 Value("${qianfan.apiKey}")private String apiKey;Value("${qianfan.secretKey}")private String secretKey;Value("${qianfan.to…...

全新互联网洗衣洗鞋小程序平台新模式

互联网洗衣洗鞋新模式&#xff0c; 全新软件升级 对接各大平台 扩大营销渠道&#xff0c;增加效益&#xff01;...

js 对于一些脚本中对于url的一些参数获取

js 对于一些脚本中对于url的一些参数获取 获取当前浏览器的链接上的参数(不使用vue / react 等框架&#xff09;仅用在一些脚本上的使用 获取当前浏览器的链接上的参数(不使用vue / react 等框架&#xff09;仅用在一些脚本上的使用 const query {} const params new URLSear…...

IEDA中tomcat日志乱码解决

文章目录 乱码样式原因解决方案参考 乱码样式 原因 乱码原因是编码格式的问题&#xff0c;编码格式不统一&#xff0c;导致显示乱码。 解决方案 统一编码格式。 打开tomcat的配置文件&#xff0c;conf/logging.properties,进行如下修改 进入idea的安装文件中&#xff0c;b…...

计算机网络实验(六):三层交换机实现VLAN间路由

一、实验名称:三层交换机实现VLAN间路由 二、实验原理 2.1. VLAN基本配置 在交换网络中,为了实现对物理网络的逻辑划分,引入了VLAN(虚拟局域网)的概念。VLAN通过将不同的设备划分到不同的虚拟网络中,实现了逻辑隔离。基本配置包括在交换机上创建VLAN、将端口划分到相应…...

Flutter中showModalBottomSheet的属性介绍和使用

在Flutter中&#xff0c;showModalBottomSheet是一个常用的工具&#xff0c;用于在屏幕底部显示模态底部面板。了解其属性将帮助您更好地定制和控制底部模态框的外观和行为。 showModalBottomSheet的常用属性 1. context: 类型: BuildContext描述: 表示当前构建上下文&#…...

机器学习 -- k近邻算法

场景 我学习Python的初衷是学习人工智能&#xff0c;满足现有的业务场景。所以必须要看看机器学习这一块。今天看了很久&#xff0c;做个总结。 机器学习分为深度学习和传统机器学习 深度学习 深度学习模型通常非常复杂&#xff0c;包含多层神经网络&#xff0c;每一层都包含…...

安全测试之SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时&#xff0c;利用服务器漏洞&#xff0c;由攻击者构造请求&#xff0c;服务器端发起请求的安全漏洞&#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…...

php composer安装

引言 Composer 是 PHP 中的依赖管理工具。它允许您声明您的项目所依赖的库&#xff0c;并且它将为您管理&#xff08;安装/更新&#xff09;它们。 官网链接&#xff1a;Introduction - Composer 安装 要在当前目录中快速安装 Composer&#xff0c;请在终端中运行以下脚本。…...

【MyBatis】MyBatis基础操作

文章目录 前言注解方式书写 MyBatis打印 MyBatis 日志参数传递MyBatis 增加操作返回主键 MyBatis 删除操作MyBatis 修改操作MyBatis 查找操作1. 对查询结果进行别名2. Results注解3. 开启驼峰命名&#xff08;推荐&#xff09; XML 配置文件方法书写 MyBatis配置数据库的相关配…...

Automatic merge failed; fix conflicts and then commit the result.如何处理

当你在Git中遇到 “Automatic merge failed; fix conflicts and then commit the result.” 的错误时&#xff0c;这意味着你尝试合并两个分支时出现了冲突。Git无法自动解决这些冲突&#xff0c;因此需要你手动解决。以下是处理这种情况的步骤&#xff1a; 找出冲突文件: 运行…...

一文读懂 $mash 通证 “Fair Launch” 规则(幸运池玩法解读篇)

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台&#xff0c;该平台旨在为 Solana 原生铭文项目&#xff0c;以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash&#xff0c;将会有更多的 Solana 生态的铭…...

Qt3D QGeometryRenderer几何体渲染类使用说明

Qt3D中的QGeometryRenderer派生出来的几何体类包括: Qt3DExtras::QConeMesh, Qt3DExtras::QCuboidMesh, Qt3DExtras::QCylinderMesh, Qt3DExtras::QExtrudedTextMesh, Qt3DExtras::QPlaneMesh, Qt3DExtras::QSphereMesh, Qt3DExtras::QTorusMesh, and Qt3DRender::QMesh 有球…...

pandasDataFrame读和写csv文件

从.csv文件读数据 import pandas as pd# 从CSV文件中读取数据 train_df pd.read_csv("datasets/train01.csv") val_df pd.read_csv("datasets/val01.csv") test_df pd.read_csv("datasets/test01.csv")# 显示数据框的前几行&#xff0c;确保…...

力扣122. 买卖股票的最佳时机 II

动态规划 思路&#xff1a; 假设 dp[i][0] 是第 i 天手上没有股票时的最大利润&#xff0c; dp[i][1] 是第 i 天手上有 1 支股票的最大利润&#xff1b;dp[i][0] 的迁移状态为&#xff1a; dp[i - 1][0]&#xff0c;前一天手上已经没有股票&#xff0c;没有发生交易&#xff1…...

Go语言断言和类型查询

Go语言断言和类型查询 1、类型断言 类型断言(Type Assertion)是一个使用在接口值上的操作&#xff0c;用于检查接口类型变量所持有的值是否实现了期望的接 口或者具体的类型。 在Go语言中类型断言的语法格式如下&#xff1a; // i.(TypeNname) value, ok : x.(T)其中&…...

02 Deep learning algorithm

Neural Networks target&#xff1a; inference&#xff08;prediction&#xff09;training my own modelpractical advice for building machine learning systemdecision Tress application: speech&#xff08;语音识别&#xff09; ----> images(计算机视觉)—> t…...

代码随想录算法训练营第二十四天 | 回溯算法

理论基础 代码随想录原文 什么是回溯法 回溯也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯法的效率 虽然回溯法很难&#xff0c;不好理解&#xff0c;但是回溯法并不是什么高效的算法。因为回溯的本…...

Spring Cloud Gateway 缓存区异常

目录 1、问题背景 2、分析源码过程 3、解决办法 最近在测试环境spring cloud gateway突然出现了异常&#xff0c;在这里记录一下&#xff0c;直接上干货 1、问题背景 测试环境spring cloud gateway遇到以下异常 DataBufferLimitException: Exceeded limit on max bytes t…...

Spring Boot依赖版本声明

链接 官网 Spring Boot文档官网&#xff1a;​​​​​​https://docs.spring.io/spring-boot/docs/https://docs.spring.io/spring-boot/docs/ Spring Boot 2.0.7.RELEASE Spring Boot 2.0.7.RELEASE reference相关&#xff1a;https://docs.spring.io/spring-boot/docs/2.…...

Java项目:109SpringBoot超市仓管系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 超市仓管系统基于SpringBootMybatis开发&#xff0c;系统使用shiro框架做权限安全控制&#xff0c;超级管理员登录系统后可根据自己的实际需求配角色&…...

【React系列】Redux(三) state如何管理

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. reducer拆分 1.1. reducer代码拆分 我们来看一下目前我们的reducer&#xff1a; function reducer(state ini…...

3D 纹理的综合指南

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 我们经常看到超现实主义的视频游戏和动画电影角色出现在屏幕上。他们皮肤上的…...

LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-…...

VLOOKUP的使用方法

VLOOKUP是Excel中一个非常有用的函数&#xff0c;用于在一个表格或范围中查找某个值&#xff0c;并返回该值所在行或列的相应数据。 VLOOKUP函数的基本语法如下&#xff1a; VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])lookup_value&#xff1a;要查…...

数据加密、端口管控、行为审计、终端安全、整体方案解决提供商

PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是关于这几个概念的解释&#xff1a; 数据加密&#xff1a;这是一种通过加密算法和密钥将明文转换为密文&#xff0c;以及通过解密算法和解密密钥将密文恢复为明文…...

编码器原理详解

编码器 什么是编码器 编码器可以用来将信息编码成为二进制代码&#xff0c;有点类似于取代号&#xff0c;人为的将二进制代码与对应的信息联系起来。 如下图所示&#xff1a; 假设有这三种情况会发生&#xff0c;且每次只发生一种情况 为了给这三种情况做一个区分&#xff…...

linux下docker搭建mysql8

1&#xff1a;环境信息 centos 7,mysql8 安装docker环境 2.创建mysql容器 2.1 拉取镜像 docker pull mysql:8.0.23 2.2 查询镜像拉取成功 docker images 2.3 创建挂载的目录文件 mkdir /usr/mysql8/conf mkdir /usr/mysql8/data ##给data文件赋予操作权限 chmod 777 /…...

书生·浦语大模型实战1

书生浦语大模型全链路开源体系 视频链接&#xff1a;书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型之所以能收到这么高的关注度&#xff0c;一个重要原因是大模型是发展通用人工智能的重要途径 深度信念网络&#xff1a; &#xff08;1&#xff09;又被称为贝叶斯网…...

前端JS加密对抗由浅入深-1

前言&#xff1a; 本文主要讲解&#xff0c;针对前端加密数据传输站点&#xff0c;如何进行动态调试以获取加密算法、秘钥&#xff0c;本次实验不涉及漏洞挖掘&#xff0c;仅为学习演示&#xff0c;环境为本地搭建环境 此次站点加密方式为AES加密方式&#xff0c;现如今越来越…...

北京网站建设公司册/电商运营入门基础知识

路径&#xff1a;在顶部菜单栏小眼睛按钮 全局变量跟环境变量作用域不同。全局变量不受当前环境的影响&#xff0c;只要是在同一个项目下&#xff0c;该变量都会生效 环境变量和全局变量的调用方法都是一样的 {{变量名}} 定义 目前通过脚本定义全局变量&#xff08;由预/后执…...

怎么让自己做的网站让别人看到/安卓优化大师老版本

推理引擎示例推理引擎示例应用是简单的控制台应用&#xff0c;显示了如何在应用中利用特定的推理引擎功能&#xff0c;帮助开发人员执行特定的任务&#xff0c;例如加载模型、运行推理、查询特定的设备功能等。安装英特尔OpenVINO™工具套件分发版后&#xff0c;С、C和Python …...

企业网站初始期如何优化/房地产营销策略有哪些

linux之磁盘分区与文件系统磁盘分区与文件系统CPUI/O接口类型&#xff1a;IDE&#xff1a;两块设备&#xff0c;有主有从SCSI:并口&#xff1a;可以接多块设备硬盘&#xff1a;机械硬盘&#xff1a;扇区&#xff1a;一个扇区512字节磁道&#xff1a;盘片上有很多的磁道&#xf…...

中英文网站模板下载/学校网站模板

其实微信小程序不过是正常的webview而已. 只是产品概念上的不同. 本质还是h5. 所以用appium是可以进行自动化的. 以我们某团外卖为例. 查看结构就可以看到小程序的dom结构. 欢迎大家使用某团外卖小程序(此处应有广告词) 自动化用例的调整 webview的进程名是com.tencent.mm:appb…...

有道云笔记 wordpress/自己做网站

亲爱的《烈焰手游》玩家&#xff1a;您们好!感谢大家从《烈焰》手游的支持与厚爱!为了给大家提供更加优质的游戏环境&#xff0c;感受更多的游戏乐趣&#xff0c;提高游戏的可玩性和互动性&#xff0c;应广大玩家的需求&#xff0c;我们将对部分服进行合服操作&#xff0c;以下…...

网站建设九步走/百度竞价推广怎么做

9 为虚拟机启用容错在本节中&#xff0c;将把上一节安装配置的虚拟机启用FT&#xff08;容错&#xff09;功能。在启用容错功能之前&#xff0c;修改虚拟机的配置为2个CPU&#xff08;2个插槽、每个插槽1个内核&#xff09;、512MB内存。之后为虚拟机启用容错功能&#xff0c;主…...