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/...

参考资料

相关推荐
清心歌3 分钟前
HashMap实现原理及扩容机制
java
一只大袋鼠3 分钟前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
禹中一只鱼6 分钟前
【IDEA 出现 `IDE error occurred`】
java·ide·spring boot·intellij-idea
西凉的悲伤6 分钟前
Guava类库——Lists.partition() 高效分批处理列表数据
java·guava
weixin_408099677 分钟前
【保姆级教程】按键精灵调用 OCR 文字识别 API(从0到1完整实战 + 可运行脚本)
java·前端·人工智能·后端·ocr·api·按键精灵
brahmsjiang8 分钟前
Java类加载机制解析:从JVM启动到双亲委派,再到Android的特殊实现
android·java·jvm
yaaakaaang10 分钟前
十一、享元模式
java·享元模式
卓怡学长12 分钟前
基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)
java·数据库·spring boot·tomcat·maven
ID_1800790547313 分钟前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库
努力努力再努力wz15 分钟前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!(附B树实现源码)
java·linux·开发语言·数据结构·c++·b树·算法