欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 基于Spring AI与OpenAI API的深度实践:调用DeepSeek模型构建智能应用全指南

基于Spring AI与OpenAI API的深度实践:调用DeepSeek模型构建智能应用全指南

2025/4/21 20:17:08 来源:https://blog.csdn.net/WDJ54068923/article/details/147347995  浏览:    关键词:基于Spring AI与OpenAI API的深度实践:调用DeepSeek模型构建智能应用全指南

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

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

快捷跳转

  • 一、环境准备与资源配置
    • 1. 开发环境搭建
    • 2. DeepSeek开放平台配置
    • 3. 设置yml配置文件
  • 二、Spring AI项目调用API模型
    • 1. 创建配置类,配置对话客户端类
    • 2. 编写Controller层代码
    • 3.效果展示
      • 阻塞式调用 call
      • 流式调用 stream ,未配置字符集的效果
      • 流式调用 stream ,配置字符集的效果

一、环境准备与资源配置

开发环境搭建

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.comchat: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的集成,但还是有好多的功能没有使用到,在接下来的博客中,我们还会讲到更多的使用案例

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词