Spring 项目接入 DeepSeek,分享两种超简单的方式!

上篇文章已经介绍了怎样Deepseek本地部署,地址:DeepSeek + AnythingLLM + Ollama
搭建本地大模型知识库

Spring AI 是什么?

Spring AI是一个人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于人工智能领域,并推广使用POJO作为人工智能领域应用程序的构建块。

你可以将 Spring AI 看作是一个适配器或者高层封装,用来帮你更方便地集成和使用不同的 AI 模型。它的核心目标是简化开发流程,降低使用多种 AI 服务时的复杂性,同时提升代码的可维护性和灵活性。

在这里插入图片描述

Spring AI的核心是解决AI集成的根本挑战:将企业数据和API与AI模型连接起来。

特征
Spring AI提供以下功能:

  1. 支持所有主要的AI模型提供商,如Anthropic、OpenAI、微软、亚马逊、谷歌和Ollama。支持的型号类型包括:聊天完成、植入、文本到图像、音频转录、文本到语音、适度
  2. 支持跨人工智能提供商的可移植API支持同步和流式API选项。还可以访问特定型号的功能。 结构化输出-将AI模型输出映射到POJO。
  3. 支持所有主要的矢量数据库提供商,如Apache Cassandra、Azure矢量搜索、Chroma、Milvus、MongoDB
    Atlas、Neo4j、Oracle、PostgreSQL/PGVector、PineCone、Qdrant、Redis和Weaviate。
  4. 跨矢量存储提供商的可移植API,包括一个新的类似SQL的元数据过滤器API。
  5. 工具/函数调用-允许模型请求执行客户端工具和函数,从而根据需要访问必要的实时信息。
  6. 可观察性——提供对人工智能相关操作的见解。
  7. 数据工程的文档注入ETL框架。
  8. AI模型评估-帮助评估生成内容并防止产生幻觉反应的实用程序。
  9. ChatClient API-Fluent API,用于与人工智能聊天模型进行通信,与WebClient和RestClient
    API相似。
  10. Advisors API-封装重复出现的Generative
    AI模式,转换发送到语言模型(LLM)的数据和从语言模型发送的数据,并提供跨各种模型和用例的可移植性。
  11. 支持聊天会话记忆和检索增强生成(RAG)。
  12. 所有AI模型和矢量存储的Spring Boot自动配置和启动器-使用start.Spring.io选择模型或矢量存储

此功能集允许您实现常见用例,如“文档问答”或“与文档聊天”

Spring 与 DeepSeek 的集成方式

  • ‌统一接口调用‌:Spring AI 通过兼容 OpenAI 的接口标准,使开发者能以统一方式调用 DeepSeek模型,仅需修改配置文件中的 API 密钥和基础 URL 即可完成接入‌。

spring-ai-openai starter:伪装成 OpenAI,DeepSeek 提供了 OpenAI 兼容模式。

  • ‌本地化部署支持‌:支持通过 Ollama 框架或 OpenAI 兼容接口进行本地部署,开发者可选择部署在自有服务器(如腾讯云 HAI 服务器)或使用官方云服务‌。

spring-ai-ollama-spring-boot-starter:通过 Ollama 本地部署一个 DeepSeek R1 蒸馏版。

方式一:伪装成 OpenAI

DeepSeek 其实提供了 OpenAI 兼容模式,只要在请求头里加个api_key,就能假装自己在调 OpenAI。Spring AI 的 openai starter 本质上是通过 RestTemplate 发请求,我们只需要改改 URL 和认证方式。
在这里插入图片描述

1、添加依赖:

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

2、修改配置文件 application.yml

spring:
  ai:
    openai:
      base-url: https://api.deepseek.com/v1  # DeepSeekOpenAI式端点
      api-key: sk-your-deepseek-key-here
      chat.options:
        model: deepseek-chat  # 指定DeepSeek的模型名称

3、DeepSeek API KEY 可以在 DeepSeek 开放平台中自行创建,地址:https://platform.deepseek.com/api_keys
在这里插入图片描述

4、在代码中调用:

@RestController
@RequestMapping("/ai")
@Slf4j
public class ChatController {

 private final ChatClient chatClient;

 // 构造方法注入 ChatClient.Builder,用于构建 ChatClient 实例
 public ChatController(ChatClient.Builder chatClientBuilder) {
  this.chatClient = chatClientBuilder.build();
 }

 @GetMapping("/chat")
 public String generate(@RequestParam(value = "message") String message) {
  log.info("Generating response");
  // 调用 ChatClient 的 prompt 方法生成响应
  // 1. prompt(message): 创建一个包含用户输入消息的 Prompt 对象
  // 2. call(): 调用 ChatClient 与 AI 模型交互以获取响应
  // 3. content(): 提取响应的内容部分
  return chatClient.prompt(message).call().content();
 }
}

通过/ai/chat接口,你就可以向DeepSeek发送消息,获取它的智能响应了。是不是很简单?

5、覆盖默认配置(可选)
如果你希望在调用时使用不同的模型或参数,可以在代码中临时覆盖默认配置:

ChatResponse response = chatModel.call(    
   new Prompt(         
        "Generate the names of 5 famous pirates.",           
        OpenAiChatOptions.builder()       
                .withModel("deepseek-chat")              
                .withTemperature(0.4)              
                .build()     
         ));   

方式二:本地化部署

如果你不太愿意依赖外部API服务,或者有对本地部署的偏好,可以选择在本地或内网服务器上部署DeepSeek模型。对于这种场景,我们可以借助Ollama工具,将DeepSeek模型部署到本地服务器,完全避免依赖云端服务。

如果想要把 DeepSeek 部署在内网服务器,或者你想在本地跑个小模型,可以采用这种方式来在本地部署一个 DeepSeek R1 蒸馏版。

上篇文章已经介绍了本地部署Deepseek,地址:DeepSeek + AnythingLLM + Ollama
搭建本地大模型知识库

1、添加依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    <version>0.8.1</version>
</dependency>

4、修改配置:

spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:1.5b  # 与本地模型名称对应

在代码中调用:

@RestController
@RequestMapping("/ai")
public class ChatController {
    private final ChatClient chatClient;

    // 构造方法注入 ChatClient.Builder,用于构建 ChatClient 实例
    public ChatController(ChatClient.Builder chatClient) {
        this.chatClient = chatClient.build();
    }

     @GetMapping("/chat")
    public ResponseEntity<Flux<String>> chat(@RequestParam(value = "message") String message) {
        try {
            // 调用 ChatClient 生成响应,并以 Flux<String>(响应流)形式返回
            Flux<String> response = chatClient.prompt(message).stream().content();
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.badRequest().build();
        }
    }
}

总结

这篇文章主要介绍了 Spring AI 以及如何通过 Spring AI 集成 DeepSeek:

伪装成 OpenAI: DeepSeek 可以假装自己是 OpenAI,直接用 Spring AI 的 OpenAI starter 就行,改改配置就好,就像换个链接一样简单。
本地部署: 如果你想把 DeepSeek 放在自己服务器上,或者想在电脑上跑个小模型玩玩,可以用 Ollama。先下载 Ollama,再下载 DeepSeek 模型,然后用 Spring AI 的 Ollama starter,也超级简单。Spring Cloud Alibaba AI 也支持这种玩法,官网有教程。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐