随着大模型技术的快速发展,如何高效集成AI能力到企业级应用中成为开发者关注的重点。本文将手把手教你使用Spring AI框架调用OpenAI API部署的DeepSeek模型,实现从零搭建、接口调用到实战落地的全流程。通过清晰的代码示例、性能优化技巧和避坑指南,读者将掌握如何利用Spring生态快速构建可扩展的AI应用,解决文本生成、数据分析等复杂场景问题。

在本地部署中,我们由于设备的限制,无法使用较多参数的模型进行推理生成,deepseek开放平台提供了API调用的方法,来实现快捷的调用式开发

一、环境准备与资源配置

开发环境搭建

JDK 17+与Spring Boot 3.x基础环境
申请OpenAI API Key与DeepSeek模型权限

Spring AI项目初始化
通过Spring Initializr添加spring-ai-openai-spring-boot-starter依赖
配置文件详解:application.yml中API密钥与模型参数设置

1. 开发环境搭建

创建一个springboot项目,选择Maven,指定JDK17以上的版本,JDK版本太低可以去官网下一个 JDK17下载链接

在这里插入图片描述
这里使用的springboot3.4.4的版本进行

勾选

  • Web 下 的 Spring Web 我们需要一个tomcat服务器,测试的时候要用
  • SQL 下的 MySQL Driver 后面要用
  • AI 下的 OpenAI

在这里插入图片描述
打开pom.xml可以看到我们本次用到springAI的依赖坐标

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

项目搭建初步完成

2. DeepSeek开放平台配置

打开deepseek官网, 点击上方API开放平台 deepseek官方网址

在这里插入图片描述
点击API keys

在这里插入图片描述
点击创建API key, 进行API的创建,记得保存好自己的Key
在这里插入图片描述

完成后我们点击充值按钮,按照要求实名认证并充值一点钱

在这里插入图片描述
假如不充值的话服务端会报错的
在这里插入图片描述

充值完毕后,我们就完成了对开放平台的配置。

3. 设置yml配置文件

配置文件如下:

spring:
  ai:
    openai:
      api-key: ${你的api-key}
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat

这里说明一下:

  • api-key : DeepSeek 官网注册后获取的密钥
  • base-url : DeepSeek API 的服务地址
  • model :指定使用的模型版本 deepseek-chat是 DeepSeek-v3的模型
    deepseek-reasoner 是DeepSeek-R1模型

两个模型的异同,具体参考此图

在这里插入图片描述

二、Spring AI项目调用API模型

在这里插入图片描述

1. 创建配置类,配置对话客户端类

package com.springai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CommonConfiguration {
    @Bean 
    public ChatClient chatClient(ChatModel chatModel) {
        return ChatClient.builder(chatModel)
                .build();
    }
}

2. 编写Controller层代码

package com.springai.controller;

import org.springframework.ai.chat.client.ChatClient; // 导入用于与聊天模型交互的 ChatClient 类
import org.springframework.web.bind.annotation.RequestMapping; // 导入用于映射 HTTP 请求的注解
import org.springframework.web.bind.annotation.RestController; // 导入用于定义 RESTful 控制器的注解
import reactor.core.publisher.Flux; // 导入用于处理响应式流的 Flux 类

/**
 * ChatController 是一个 RESTful 控制器,用于处理与聊天模型相关的 HTTP 请求。
 * 它通过依赖注入的方式使用 ChatClient 来实现与聊天模型的交互。
 */
@RestController
@RequestMapping("/chat") // 将该控制器的所有接口映射到 "/chat" 路径下
public class ChatController {

    private final ChatClient chatClient; // 用于与聊天模型交互的客户端实例

    /**
     * 构造函数,通过依赖注入初始化 ChatClient 实例。
     *
     * @param chatClient 由 Spring 容器提供的 ChatClient 实例
     */
    public ChatController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    /**
     * 处理 "/call" 请求,返回聊天模型对用户输入的单次响应。
     *
     * @param prompt 用户输入的提示文本
     * @return 聊天模型生成的响应内容
     */
    @RequestMapping("/call") // 映射 GET /chat/call 请求
    public String call(String prompt) {
        return chatClient
                .prompt() // 创建一个新的提示构建器
                .user(prompt) // 设置用户输入的提示文本
                .call() // 调用聊天模型生成响应
                .content(); // 获取并返回响应内容
    }

    /**
     * 处理 "/stream" 请求,以流的形式返回聊天模型对用户输入的响应。
     *
     * @param prompt 用户输入的提示文本
     * @return 包含聊天模型生成的响应内容的响应式流
     */
    @RequestMapping("value="/stream",produces="text/html;charset=utf-8") // 映射 GET /chat/stream 请求
    public Flux<String> stream(String prompt) {
        return chatClient
                .prompt() // 创建一个新的提示构建器
                .user(prompt) // 设置用户输入的提示文本
                .stream() // 以流的形式调用聊天模型生成响应
                .content(); // 获取并返回响应内容的流
    }
}

3.效果展示

阻塞式调用 call

服务器会等待所有语句生成完毕后,然后在打印显示在web页面上
在这里插入图片描述

流式调用 stream ,未配置字符集的效果

这个问题是由于我们流式生成字符时未能正确的读取汉字,我们需要在RequestMapping上配置一下指定字符集

@RequestMapping(value = "/stream",produces="text/html;charset=utf-8" )

在这里插入图片描述

流式调用 stream ,配置字符集的效果

服务器会采用流式传输,动态生成语句,直到结束
在这里插入图片描述

到此为止,我们就完成了对deepseek的集成,但还是有好多的功能没有使用到,在接下来的博客中,我们还会讲到更多的使用案例

Logo

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

更多推荐