Spring 官宣接入 DeepSeek,太香了!

最近逛了下Spring的官网,发现Spring AI已经支持DeepSeek!今天和大家聊聊如何在Spring Boot项目制使用DeepSeek,还是非常方便的!

Spring AI简介

Spring AI是Spring官方推出的开源框架,旨在为Java开发者提供方便的AI集成能力。其核心是通过抽象化和模块化设计,简化AI功能的接入步骤,同时保持与Spring生态的无缝兼容。

以下是其主要特点与功能:

  • 统一的抽象API:支持主流AI服务,如 OpenAI、DeepSeek、Google、和Ollama等,提供了提供标准化的接口。
  • 核心功能模块:模型交互、向量处理、检索增强生成(RAG)、函数调用。
  • 低代码集成:通过Spring Boot Starter依赖快速接入,在配置文件中配置好AI服务即可使用。
  • 结构化输出:将模型响应直接映射为Java对象,简化数据处理。
  • 流式响应:支持Flux流式输出,适用于实时聊天等场景。

获取API KEY

由于DeepSeek官方服务有时候调用会繁忙,这里以阿里云百炼平台的DeepSeek服务为例。

  • 点击模型的立即体验,然后点击右上角的钥匙按钮就可以获取到对应的API KEY了,首次使用需要自行创建API KEY。

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + Vue 的电商系统(Github标星60K),后端支持多模块和2024最新微服务架构,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

项目演示:

使用

接下来我们就来讲解下使用Spring AI来调用DeepSeek服务。

  • 首先在SpringBoot项目中添加Spring AI对应的依赖;
xml 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>
  • 然后在项目的application.yml配置文件中添加调用AI服务相关的配置;
yaml 复制代码
spring:
  ai:
    openai:
      # 调用AI接口时表明身份的API KEY
      api-key: <YOUR_API_KEY>
      # 调用AI接口时的基础路径,配置的是阿里云百炼的基础路径
      base-url: https://dashscope.aliyuncs.com/compatible-mode
      chat:
        options:
          # 调用的模型,DeepSeek的话可以选择deepseek-r1或deepseek-v3
          model: deepseek-r1
          # 用来控制文本生成的随机性(创造力),值越小越严谨
          temperature: 0.8
  • 接下来在Controller中添加对应的接口来调用AI服务生成答案,这里提供了直接回答和流式回答两个接口。
java 复制代码
/**
 * @auther macrozheng
 * @description 对接DeepSeek后生成回答的Controller
 * @date 2025/2/21
 * @github https://github.com/macrozheng
 */
@RestController
public class DeepSeekController {

    private final OpenAiChatModel chatModel;

    @Autowired
    public DeepSeekController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    /**
     * 根据消息直接输出回答
     */
    @GetMapping("/ai/chat")
    public Map chat(@RequestParam(value = "message") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    /**
     * 根据消息采用流式输出,输出回答
     */
    @GetMapping(value = "/ai/chatFlux", produces = MediaType.TEXT_EVENT_STREAM_VALUE + "; charset=UTF-8")
    public Flux<ChatResponse> chatFlux(@RequestParam(value = "message") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }

}

测试

然后启动项目,这里我们使用Postman来测试下接口

  • 接下来调用下流式输出答案的接口,我们可以发现它会持续不断地返回结果,直到请求连接关闭,接口地址:http://localhost:8080/ai/chatFlux
  • 其实总的回答在result.output.text这个属性里面,我们可以通过接口中的text属性的拼接来获得完整的回答。

总结

今天给大家介绍了下Spring AI和DeepSeek的集成方法,还是比较简单的。对于回答的输出,由于直接输出响应比较慢,我们可以采用流式输出,通过不断拼接回答来响应比较好。

项目源码地址

github.com/macrozheng/...

参考资料

相关推荐
鼠鼠我捏,要死了捏2 小时前
深入解析Java NIO多路复用原理与性能优化实践指南
java·性能优化·nio
ningqw2 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友2 小时前
vi编辑器命令常用操作整理(持续更新)
后端
superlls2 小时前
(Redis)主从哨兵模式与集群模式
java·开发语言·redis
胡gh2 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫3 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong3 小时前
技术人如何对客做好沟通(上篇)
后端
叫我阿柒啊4 小时前
Java全栈工程师面试实战:从基础到微服务的深度解析
java·redis·微服务·node.js·vue3·全栈开发·电商平台
颜如玉4 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment4 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源