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 -> {
              // 在流结束时执行的操作,包括正常完成、取消或出错等情况
          });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生产队的驴.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值