用SpringBoot进行通义千问接口调用同步方法和异步流式多轮回复方法

同步效果就不展示了,这里展示更常用的异步,多轮异步流式效果展示如下:
第一轮回答,此时没有会话id,需要雪花算法生成插入数据库
在这里插入图片描述

第二轮问题以及结果内容组合

在这里插入图片描述

1、同步版本环境准备以及代码

需要开通阿里大模型服务,如果没有开通服务,单独的去生成 key 是无效的。

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

生成你需要的 key

1、maven 准备

        <!--阿里巴巴大模型-->
        <!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dashscope-sdk-java</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                </exclusion>
            </exclusions>
            <version>2.8.3</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.10.0</version>
        </dependency>

2、application.yml 配置

redis一般默认有16个数据库,这里使用第三个。这个自定义。

#Redis
spring:
  data:
    redis:
      host: localhost
      port: 6379
      database: 3
zm:
  ali:
    api-key: "你的keyid"
    app-id: "你的appid"

3、实体类准备

主要是封装了一次,获取到 yml 的配置信息

@Configuration
@Data
public class AliKey {
   
    @Value("${zm.ali.api-key}")
    private String ApiKey;
    @Value("${zm.ali.host}")
    private String host;
}

redis工厂化工具类


/*
 * @Author 落梨
 * @Date 2024-09-15 10:04
 * @Description: Redis模板生产工具
 **/
@Configuration
@Slf4j
public class RedisConfiguration {
   
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
   
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(serializer);
        template.setKeySerializer(new StringRedisSerializer());
        return template;
    }
}

4、controller 层

注意这里的回复类 使用的是官方提供,也就是 引入 maven 依赖,不是自己创建的

    /**
     * @author 落梨
     * @description 发送信息
     *
     **/
    @PostMapping("/chat")
    public ResultResponse getChat(String conversationId,String prompt) throws NoApiKeyException, InputRequiredException {
   
        //这个generationResult是阿里的模型引入的回复类  不需要自己创建,引入即可
        GenerationResult generationResult =  conversationService.qianWenChat(conversationId,prompt);
        return ResultResponse.success(generationResult);
    }

5、service 层以及实现层

Flowable<ApplicationResult> qianWenChat(String conversationId, String prompt) throws NoApiKeyException, InputRequiredException;
    @Override
    public Flowable<ApplicationResult> qianWenChat(String conversationId, String prompt) throws NoApiKeyException, InputRequiredException {
   
        //如果会话id是空,表示新建立一个会话id 调用雪花id
        if (conversationId.equals("")) {
   
            conversationId= String.valueOf(snowFlakeGenerateIdWorker.nextId());
        }
        try {
   
            return qianWenChatController.callWithMessage(conversationId,prompt);
        } catch (JsonProcessingException e) {
   
            throw new RuntimeException(e);
        }
    }
雪花工具类
package com.zm.naviTech.utils;

import org.springframework.stereotype.Component;

/*
 * @Author 落梨
 * @Date 2024-09-14 11:07
 * @Description: 雪花算法 工具类
 **/
@Component
public  class SnowFlakeGenerateIdWorker {
   
    // 起始的时间戳
    private final static long START_TIMESTAMP = 1480166465631L;

    // 每一部分占用的位数,符号位不算在内
    private final static long SEQUENCE_BIT = 12; // 序列号占用的位数
    private final
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zm6Cc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值