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

SpringBoot 讯飞星火AI WebFlux流式接口返回 异步返回 对接AI大模型 人工智能接口返回

介绍

用于构建基于 WebFlux 的响应式 Web 应用程序。集成了 Spring WebFlux 模块,支持响应式编程模型,构建非阻塞、异步的 Web 应用。WebFlux 使用了非阻塞的异步模型,能够更好地处理高并发请求。适合需要实时数据推送的应用场景。

WebClient 是 Spring WebFlux 中用于创建 WebClient 实例的构建器方法。用于发起 HTTP 请求的非阻塞、响应式的客户端,可以与 Web 服务进行交互,支持异步和响应式编程模型。

讯飞星火

官方文档:https://www.xfyun.cn/doc/spark/X1http.html
接口地址:https://spark-api-open.xf-yun.com/v2/chat/completions
在这里插入图片描述
在这里插入图片描述

效果图

流式异步返回数据
在这里插入图片描述

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

构建请求体

/*** 构建消息体* @param userId 用户的唯一id,表示一个用户,user_123456* @param text 问题内容* @return*/
private JSONObject builderBody(String userId,String text){// 创建最外层的JSON对象并填充字段JSONObject jsonObject = new JSONObject();jsonObject.put("user", userId);jsonObject.put("model", "x1");jsonObject.put("stream", true);jsonObject.put("max_tokens", 4096);// 创建单个消息的JSON对象JSONObject messageObject = new JSONObject();messageObject.put("role", "user");messageObject.put("content", text);messageObject.put("temperature", "0.5");// 历史记录JSONObject test = new JSONObject();test.put("role", "user");test.put("content", "梅州城市为背景");test.put("temperature", "0.5");// 创建messages数组并将消息对象添加到数组中JSONArray messagesArray = new JSONArray();messagesArray.add(messageObject);messagesArray.add(test);// 将messages数组添加到最外层的JSON对象中jsonObject.put("messages", messagesArray);return jsonObject;
}

控制器

private final static  String APIPassword="gQnwqGhbiifKUgtxhQrXnb:JdDduuVNXTxduGIvwtorNjw";@GetMapping("/chat")
public Flux<String> chat(String text) {return   WebClient.builder().defaultHeader("Content-Type", "application/json; charset=UTF-8")  // 明确指定UTF-8.defaultHeader("Authorization","Bearer" + APIPassword).baseUrl("https://spark-api-open.xf-yun.com/v2/chat/completions").build().post() //post请求.accept(MediaType.TEXT_EVENT_STREAM)// 设置接受的响应类型.bodyValue(builderBody("123",text).toString()) //请求体内容.retrieve()  // 执行请求.bodyToFlux(String.class)  // 响应体转换成 String.map(s->s).timeout(Duration.ofSeconds(10))  // 设置请求超时时间,10秒.retry(3)  // 如果发生错误,最多重试3次.onErrorResume(WebClientRequestException.class, ex ->Flux.just(ex.getLocalizedMessage()))  // 处理 WebClient 请求错误.doOnTerminate(() -> {// 终止流时执行的操作,可能用于清理资源等}).doOnCancel(() -> {// 流取消时执行的操作}).doFinally(signalType -> {// 在流结束时执行的操作,包括正常完成、取消或出错等情况});
}

相关文章:

  • leetcode 242. Valid Anagram
  • 【前端基础】9、CSS的动态伪类(hover、visited、hover、active、focus)【注:本文只有几个粗略说明】
  • 四、Hadoop 2.X vs 3.X:特性、架构与性能全解析
  • ubuntu yolov5(c++)算法部署
  • [特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)
  • 5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming
  • 秋招准备——2.跨时钟相关
  • 室内无人机自主巡检解决方案-自主方案
  • STM32-模电
  • Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡
  • 认识守卫-以及简单的示例和装饰器
  • 如何在macOS上通过SSHFS挂载远程文件系统
  • 驱动开发硬核特训 · Day 30(下篇): 深入解析 lm48100q I2C 音频编解码器驱动模型(基于 i.MX8MP)
  • Redis最新入门教程
  • 静态BFD配置
  • 信创生态核心技术栈:国产芯片架构适配与交叉编译优化指南
  • 2025最新:3分钟使用Docker快速部署Redis集群
  • node.js 实战——express图片保存到本地或服务器(七牛云、腾讯云、阿里云)
  • RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE
  • Marin说PCB之器件的3D数模匹配失效案例
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 2025中国品牌日上海践行活动启动,将建设品牌生态交互平台
  • 七大交响乐团在沪“神仙斗法”,时代交响奏出何等时代新声