当前位置:   article > 正文

Spring Boot实战:无缝对接通义千问_千问 sse sprinboot请求

千问 sse sprinboot请求

Spring Boot实战:无缝对接通义千问

引言

随着人工智能技术的飞速发展,特别是自然语言处理(NLP)领域的突破,人工智能语言模型在各行各业中的应用日益广泛。阿里云自主研发的通义千问(DashScope),作为中文版的ChatGPT,以其强大的语言理解与生成能力,成为了众多开发者关注的焦点。本文将详细介绍如何在Spring Boot项目中无缝对接通义千问,通过实战案例帮助读者快速掌握这一技术,实现高效的人机交互。

一、通义千问简介

通义千问是阿里云推出的一款人工智能语言模型,它基于深度学习和自然语言处理技术,具备高效准确的自然语言处理能力。通义千问不仅能够回答广泛的问题,覆盖生活常识、新闻资讯等多个领域,还能基于上下文理解用户意图,作出连贯准确的回应。这使得通义千问成为生活和工作中的重要助手,极大地提高了信息获取效率和用户体验。

通义千问自发布以来,不断迭代升级,性能持续提升。最新的通义千问2.5版本在理解能力、逻辑推理、指令遵循、代码能力等方面均有显著提升,全面赶超GPT-4 Turbo,成为地表最强中文大模型。此外,通义千问还推出了多个开源模型,涵盖不同参数规模,满足不同场景需求,进一步推动了人工智能技术的普及和应用。

二、Spring Boot简介

Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用的初始搭建以及开发过程。Spring Boot遵循“约定优于配置”的原则,通过自动配置和起步依赖,让开发者能够快速搭建出符合业务需求的Web应用。Spring Boot凭借其高效、便捷的开发特性,成为了企业级应用开发的首选框架之一。

三、准备工作

1. 开通通义千问服务并获取API-KEY

首先,需要在阿里云官网开通通义千问服务。访问DashScope管理控制台,点击“去开通”按钮,完成服务激活。激活后,在控制台中创建新的API-KEY,并将获取的API-KEY复制保存,以便后续在Spring Boot项目中使用。

2. 创建Spring Boot项目

使用Spring Initializr(https://start.spring.io/)快速生成Spring Boot项目。选择需要的依赖项,如Spring Web、Lombok等,生成项目后导入到IDE中。

四、集成通义千问

1. 导入Maven依赖

在Spring Boot项目的pom.xml文件中,添加通义千问的SDK依赖。确保使用仓库中最新的依赖版本,以避免在调用API时出现Gson转化异常等问题。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <version>最新版本</version>
</dependency>
<!-- 如果需要流式编程支持,可以添加reactor-core依赖 -->
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>最新版本</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2. 配置application.yml

application.yml配置文件中,添加通义千问的API-KEY配置。

ai:
  api:
    key: 你的API-KEY
  • 1
  • 2
  • 3

3. 配置Generation Bean

在Spring Boot项目中,创建一个配置类来注入Generation对象。Generation是通义千问SDK中用于执行文本生成操作的核心类。

@Configuration
public class AiConfiguration {

    @Bean
    public Generation generation() {
        return new Generation();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4. 编写Controller层代码

创建一个Controller类,用于处理前端发来的请求,并调用通义千问API进行文本生成。这里以WebFlux为例,展示如何通过流式编程实现实时推送消息。

@RestController
@RequestMapping("/ai")
public class AiController {

    private final Generation generation;

    @Value("${ai.api.key}")
    private String appKey;

    @Autowired
    public AiController(Generation generation) {
        this.generation = generation;
    }

    @PostMapping("/send")
    public Flux<ServerSentEvent<String>> aiTalk(@RequestBody String question, HttpServletResponse response) throws NoApiKeyException, InputRequiredException {
        // 构建消息对象
        Message message = Message.builder().role(Role.USER.getValue()).content(question).build();

        // 构建通义千问参数对象
        GenerationParam param = GenerationParam.builder()
            .model(Generation.Models.QWEN_PLUS)
            .messages(Arrays.asList(message))
            .resultFormat(GenerationParam.ResultFormat.MESSAGE)
            .topP(0.8)
            .apiKey(appKey)
            .build();

        // 执行文本生成操作,并流式返回结果
        Flowable<GenerationResult> result = generation.streamCall(param);
        return Flux.from(result)
            .map(m -> {
                String content = m.getOutput().getChoices().get(0).getMessage().getContent();
                return ServerSentEvent.<String>builder().data(content).build();
            })
            .publishOn(Schedulers.boundedElastic())
            .doOnError(e -> {
                // 错误处理
                Map<String, Object> map = new HashMap<>();
                map.put("code", "400");
                map.put("message", "has mistake " + e.getMessage());
                try {
                    response.setContentType(MediaType.TEXT_EVENT_STREAM_VALUE);
                    response.setCharacterEncoding("UTF-8");
                    response.getOutputStream().print(JsonUtils.toJson(map));
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

5. 测试与验证

使用Postman或任何HTTP客户端工具,向http://localhost:8080/ai/send发送POST请求,携带需要提问的文本作为请求体。如果一切配置正确,你将能够实时接收到通义千问的回复消息。

五、进阶应用

1. 集成Web前端

为了实现完整的人机交互,可以将Spring Boot后端与前端框架(如React、Vue等)集成。前端负责发送用户输入到后端,并接收后端返回的实时消息进行展示。

2. 多模态交互

通义千问不仅支持文本交互,还具备文生图、智能编码、文档解析、音视频理解等多模态交互能力。开发者可以根据业务需求,调用相应的API接口,实现更加丰富的交互体验。

3. 定制化开发

根据具体应用场景,开发者可以对通义千问进行定制化开发,如调整模型参数、优化交互流程等,以满足特定的业务需求。

六、总结

通过本文的介绍,我们详细了解了如何在Spring Boot项目中无缝对接通义千问。从开通服务、配置项目、编写代码到测试验证,每一步都进行了详细的说明。通过实战案例,读者不仅能够掌握通义千问的基本使用方法,还能够深入理解Spring Boot的核心特性和最佳实践。希望本文能够对广大开发者在人工智能领域的探索和应用提供有益的参考和帮助。

随着人工智能技术的不断发展,通义千问等人工智能语言模型将在更多领域发挥重要作用。开发者应紧跟技术前沿,不断学习新知识、掌握新技能,为人工智能的广泛应用贡献自己的力量。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/909994
推荐阅读
相关标签
  

闽ICP备14008679号