目录
- 引言
- 1、申请DeepSeek API Key
- 1) 访问DeepSeek官网:
- 2) 创建API Key:
- 2、创建Spring Boot项目
- 1) 访问Spring Initializr:
- 2)配置项目参数:
- 3) 生成项目:
- 3、 配置application.yml
- 4、编写配置类
- 5 编写请求/响应模型
- 6 编写服务类
- 7 编写控制器类
- 8 测试与验证
- 1)启动Spring Boot应用:
- 2) 构造测试请求:
- 3) 验证正常响应:
- 4) 异常场景测试:
- 总结
引言
DeepSeek最近异常火爆,作为深度求索公司提供的大模型,提供了强大的自然语言处理和其他AI功能,通过调用其接口,可以在Spring Boot项目中实现智能对话、内容生成等多种功能。本文将详细介绍如何在Spring Boot中调用DeepSeek接口,并给出详细的介入步骤和代码示例。
1、申请DeepSeek API Kejsy
在调用DeepSeek接口之前,首先需要申请一个API Key。这是访问DeepSeek API的凭证,用于验证请求者的身份和权限。
1) 访问DeepSeek官网:
打开浏览器,输入DeepSeek的官网地址(如https://platform.deepseek.com/usage),进入DeepSeek的开放平台页面。
2) 创建API Key:
在开放平台页面中,找到API keys相关选项,点击进入API Key管理页面。点击“创建API Key”按钮,根据提示填写相关信息,如应用名称、描述等。创建完成后,系统会生成一个唯一的API Key,务必妥善保存,因为关闭页面后将无法再次查看。
2、创建Spring Boot项目
接下来,我们需要创建一个Spring Boot项目来调用DeepSeek接口。可以使用Spring Initializr(https://start.spring.io/)来快速生成项目结构。
1) 访问Spring Initializr:
打开浏览器,输入Spring Initializr的地址,进入项目生成页面。
2)配置项目参数:
- Project:选择项目构建工具(如Maven或Gradle),设置项目语言(Java)、Spring Boot版本等。
- Dependencies:添加必要的依赖项。由于我们需要调用DeepSeek的HTTP接口,因此需要添加
spring-boot-starter-web
依赖。此外,还可以根据需要添加其他依赖项,如日志框架(spring-boot-starter-logging
)、数据库连接池(spring-boot-starter-data-jpa
)等。
3) 生成项目:
配置完成后,点击“Generate”按钮生成www.devze.com项目结构。将生成的项目文件下载到本地,并导入到IDE(如IntelliJ IDEA或Eclipse)中进行开发。
3、 配置application.yml
在Spring Boot项目中,通常使用`application.yml``文件来配置应用的相关参数。为了调用DeepSeek接口,我们需要在配置文件中添加DeepSeek的API Key和请求URL。
添加以下配置:deepseek: api: key: sk-63************5f # 替换为你的DeepSeek API Key url: https://api.deepseek.com/chat/completions # DeepSeek API请求URL
4、编写配置类
为了更方便地管理DeepSeek API的配置信息,我们可以编写一个配置类来读取application.yml
中的配置。
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Getter; @Configuration @Getter public class DeepSeekConfig { @Value("${deepseek.api.key}") private String apiKey; @Value("${deepseek.api.url}") private String apiUrl; }
5 编写请求/响应模型
在调用DeepSeek接口时,我们需要定义请求和响应的数据结构。根据DeepSeek API的文档,请求体通常包含模型名称、消息列表等字段,而响应体则包含生成的回复选项等字段。
import lombok.Data; import java.util.List; @Data public class DeepSeekRequest { private String model; private List<Message> messages; private boolean stream; @Data public static class Message { private String role; private String content; } } @Data public class DeepSeekResponse { private List<Choice> choices; @Data public static class Choice { private Delta delta; @Data public static class Delta { private String content; } } }
6 编写服务类
服务类用于封装向DeepSeek发出查询的过程。我们将使用RestTemplate
来发送HTTP请求,并处理响应结果。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.util.UriComponentsBuilder; import com.fasterXML.jackson.core.jsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @Service public class DeepSeekService { @Autowired private RestTemplate restTemplate; @Autowired private DeepSeekConfig deepSeekConfig; private final ObjectMapper objectMapper = new ObjectMapper(); public String askDeepSeek(String question) throws JsonProcessingException { DeepSeekRequest request = new DeepSeekRequest(); request.setModel("deepseek-chat"); request.setStream(false); List<DeepSeekRequest.Message> messages = List.of( new DeepSeekRequest.Message("user", question) ); request.setMessages(messages); HttpHeaders headers = new HttpHeaders(); headers.www.devze.comsetContentType(MediaType.APPLICATION_JSON); headers.setAuthorization("Bearer " + deepSeekConfig.getApiKey()); HttpEntity<String> entity = new HttpEntity<>(objectMapper.writeValueAsString(request), headers); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(deepSeekConfig.getApiUrl()); ResponseEntity<String> response = restTemplate.postForEntity(builder.toUriString(), entity, String.class); if (response.getStatusCode().is2xxSuccessful()) { DeepSeekResponse deepSeekResponse = objectMapper.readValue(response.getBody(), DeepSeekResponse.class); if (deepSeekResponse != null && deepSeekResponse.getChoices() != null && !deepSeekResponse.getChoices().isEmpty()) { return deepSeekResponse.getChoices().get(0).getDelta().getContent(); } } return "No valid response from DeepSeek"; } }
7 编写控制器类
控制器类用于处理HTTP请求,并调用服务类的方法来获取DeepSeek的响应结果。
import org.springframeandroidwork.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.http.ResponseEntity; @RestController public class DeepSeekController { @Autowired private DeepSeekService deepSeekService; @GetMapping("/ask") public ResponseEntity<String> askDeepSeek(@RequestParam String question) { try { String response = deepSeekService.askDeepSeek(question); return ResponseEntity.ok(response); } catch (Exception e) { return ResponseEntity.status(500).body("Error occurred while communicating with DeepSeek: " + e.getMessage()); } } }
8 测试与验证
完成以上步骤后,我们可以启动Spring Boot应用,并通过浏览器或Postman等工具来测试DeepSeek接口是否调用成功。
1)启动Spring Boot应用:
在IDE中运行@SpringBootApplication
主类,观察控制台输出:
2024-02-20T14:30:00.000+08:00 INFO 8080 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http)
2) 构造测试请求:
使用Postman发送GET请求:
GET http://localhost:8080/ask?question=如何学习Spring Boot框架?
3) 验证正常响应:
应收到JSON格式的AI响应:
{ "content": "学习Spring Boot可以从以下几个步骤入手...(具体学习建议)" }
4) 异常场景测试:
- 例如:无效API Key测试:
deepseek.api.key=sk-invalid_key
应收到401 Unauthorized错误:{ "code": "DEEPS编程EEK_API_ERROR", "message": "Invalid API Key" }
总结
本文介绍了如何在Spring Boot项目中调用DeepSeek接口实现智能对话功能。首先,需要申请DeepSeek API Key并创建Spring Boot项目。接着,在application.yml中配置API Key和请求URL,并编写配置类来管理这些配置。然后,定义请求/响应模型,编写服务类使用RestTemplate发送HTTP请求并处理响应。最后,编写控制器类处理HTTP请求,并测试验证接口调用是否成功。通过这些步骤,可以在Spring Boot项目中轻松集成DeepSeek大模型,实现智能对话和内容生成等功能。
到此这篇关于SpringBoot调用DeepSeek接口的实现的文章就介绍到这了,更多相关SpringBoot调用DeepSeek接口内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论