Spring AI 框架集成 DeepSeek 大模型了,速看~

1,820 阅读3分钟

DeepSeek 是深度求索公司发布的大模型,是国产之光。大家应该学会如何使用 DeepSeek 大模型,下面我们将看下如何开发基于 DeepSeek 大模型的智能应用。

DeepSeek 大模型

DeepSeek 推出两款模型;

  • DeepSeek V 系列,对于V系列主要 对话,模型名称:deepseek-chat
  • DeepSeek R 系统,对于R系统主要 推理, 模型名称:deepseek-reasoner

DeepSeek 官方更新日志,可以看到模型发布和演化的过程。

集成 DeepSeek 大模型

DeepSeek AI 提供开源的 DeepSeek V3 模型,该模型以其尖端的推理和解决问题的能力而闻名。

Spring AI 通过重用现有的 OpenAI 客户端与 DeepSeek AI 集成。首先,您需要获取 DeepSeek API 密钥,配置基本 URL,并选择其中一个受支持的模型。

image.png

接入前准备

  1. 创建 API 密钥:访问此处创建 API 密钥。使用 Spring AI 项目中的 spring.ai.openai.api-key 属性对其进行配置。
  2. 设置 DeepSeek 基本 URL:将 spring.ai.openai.base-url 属性设置为 api.deepseek.com
  3. 选择 DeepSeek 模型:使用属性 spring.ai.openai.chat.model=<model name> 指定模型。有关可用选项,请参阅支持的型号

集成 DeepSeek 示例

1、引入依赖

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

2、配置

spring:
  ai:
    openai:
      api-key: sk-xxx   // 填写自己申请的key
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat

3、简单的聊天示例

package com.ivy.controller;

import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.Map;


@RestController
public class ChatController {

    private final OpenAiChatModel chatModel;
    
    public ChatController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String, String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }
}

集成 DeepSeek R1 局限性

参考文章 # DeepSeek R1 集成难题完美解决:deepseek4j 已开源;

对于DeepSeek v系统的模型支持尚还可以,但是对于DeepSeek R系统的模型支持,Spring AI框架存在以后问题,

  • 思维链内容丢失:R1 最核心的推理过程完全被忽略
  • 响应模式不兼容:无法处理"思考在前、结论在后"的输出模式
  • 参数限制:temperature、top_p 等关键参数设置失效
  • 流式处理不完善:用户体验欠佳

为了解决以上问题,DeepSeek4j框架开源,提供了开箱即用的 Spring starter,具体使用可以参考官方文档

deepseek4j 是面向 DeepSeek 推出的 Java 开发 SDK,支持 DeepSeek R1 和 V3 全系列模型。提供对话推理、函数调用、JSON结构化输出、以及基于 OpenAI 兼容 API 协议的嵌入向量生成能力。通过 Spring Boot Starter 模块,开发者可以快速为 Spring Boot 2.x/3.x 以及 Solon 等主流 Java Web 框架集成 AI 能力,提供开箱即用的配置体系、自动装配的客户端实例,以及便捷的流式响应支持。

本人还未研究过 deepseek4j 框架,是否像 Spring AI、LangChain4j 框架可以无缝切换多种模型而无需修改代码,是否集成了嵌入模型、是否支持 RAG 等。

如果项目中仅需要支持 DeepSeek 大模型,则使用 deepseek4j 框架可能比较好。对于项目中需支持多种模型的切换,可能 Spring AI 或者 LangChain4j框架更好一些。

总结

Spring AI 接入 DeepSeek 大模型是非常简单的,实现了阻塞和流式聊天模式。 对于 DeepSeek 大模型的函数调用,角色定义以及结构化输出等和之前文章中讲解的内容是一致的,没有什么特别的地方,这里也不再赘述了,有兴趣的可以参考本专栏的其它文章。