时间:2026-03-23 14:02
人气:
作者:admin
随着AI大模型的快速普及,越来越多的Java开发者希望将AI能力集成到自己的项目中。本文手把手带你用Spring Boot接入DeepSeek API,实现一个具备AI对话能力的后端服务。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
deepseek:
api-key: sk-xxxxxxxxxxxxxxxx
base-url: https://api.deepseek.com
model: deepseek-chat
max-tokens: 2048
@Configuration
@ConfigurationProperties(prefix = "deepseek")
@Data
public class DeepSeekConfig {
private String apiKey;
private String baseUrl;
private String model;
private Integer maxTokens;
@Bean
public WebClient deepSeekWebClient() {
return WebClient.builder()
.baseUrl(baseUrl)
.defaultHeader("Authorization", "Bearer " + apiKey)
.defaultHeader("Content-Type", "application/json")
.build();
}
}
// 请求体
@Data
public class ChatRequest {
private String model;
private List<Message> messages;
@JsonProperty("max_tokens")
private Integer maxTokens;
private Boolean stream = false;
@Data
@AllArgsConstructor
public static class Message {
private String role; // system / user / assistant
private String content;
}
}
// 响应体
@Data
public class ChatResponse {
private String id;
private List<Choice> choices;
@Data
public static class Choice {
private Message message;
}
@Data
public static class Message {
private String role;
private String content;
}
}
@Service
@RequiredArgsConstructor
public class DeepSeekService {
private final WebClient deepSeekWebClient;
private final DeepSeekConfig config;
public String chat(String userMessage) {
ChatRequest request = new ChatRequest();
request.setModel(config.getModel());
request.setMaxTokens(config.getMaxTokens());
request.setMessages(List.of(
new ChatRequest.Message("system", "你是一个专业Java开发助手"),
new ChatRequest.Message("user", userMessage)
));
ChatResponse response = deepSeekWebClient
.post()
.uri("/v1/chat/completions")
.bodyValue(request)
.retrieve()
.bodyToMono(ChatResponse.class)
.block();
return response.getChoices().get(0).getMessage().getContent();
}
}
@RestController
@RequestMapping("/api/ai")
@RequiredArgsConstructor
public class AiController {
private final DeepSeekService deepSeekService;
@PostMapping("/chat")
public ResponseEntity<String> chat(@RequestBody Map<String, String> body) {
String message = body.get("message");
String reply = deepSeekService.chat(message);
return ResponseEntity.ok(reply);
}
}
curl -X POST http://localhost:8080/api/ai/chat \
-H "Content-Type: application/json" \
-d '{"message": "帮我写一个Spring Boot分页查询的示例"}'
通过以上步骤,我们完成了Spring Boot整合DeepSeek API的全流程。后续可以进一步扩展:
本文由AI辅助创作。
Hutool 的 `TimedCache` 到期会自动清理吗?