简介:本文详细介绍Spring项目接入DeepSeek的两种超简单方式:通过官方SDK集成和使用HTTP API直接调用。内容包含完整代码示例、配置说明及最佳实践建议,帮助开发者快速实现AI能力集成。
在当今AI技术蓬勃发展的时代,将大模型能力集成到现有系统中已成为企业提升竞争力的关键。DeepSeek作为先进的AI服务平台,为开发者提供了强大的自然语言处理能力。对于Spring开发者而言,如何高效、可靠地接入DeepSeek服务是需要掌握的重要技能。
针对这些痛点,本文将介绍两种经实践验证的可靠接入方案。
// pom.xml 依赖配置
<dependency>
<groupId>com.deepseek</groupId>
<artifactId>deepseek-sdk</artifactId>
<version>2.1.0</version>
</dependency>
@Configuration
public class DeepSeekConfig {
@Value("${deepseek.api-key}")
private String apiKey;
@Bean
public DeepSeekClient deepSeekClient() {
return new DeepSeekClient.Builder()
.apiKey(apiKey)
.connectTimeout(5000)
.readTimeout(10000)
.build();
}
}
@Service
public class AIService {
@Autowired
private DeepSeekClient client;
public String generateText(String prompt) {
TextGenerationRequest request = new TextGenerationRequest.Builder()
.prompt(prompt)
.maxTokens(1000)
.temperature(0.7)
.build();
TextGenerationResponse response = client.generateText(request);
return response.getText();
}
}
deepseek:
max-connections: 20
connection-ttl: 30000
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplateBuilder()
.rootUri("https://api.deepseek.com/v1")
.defaultHeader("Authorization", "Bearer ${deepseek.api-key}")
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(10))
.build();
}
}
@Data
public class ChatRequest {
private String model = "deepseek-chat";
private List<Message> messages;
private double temperature = 0.7;
@Data
public static class Message {
private String role;
private String content;
}
}
@Data
public class ChatResponse {
private String id;
private List<Choice> choices;
@Data
public static class Choice {
private Message message;
}
}
@Service
public class ChatService {
@Autowired
private RestTemplate restTemplate;
public String chatCompletion(String userMessage) {
ChatRequest request = new ChatRequest();
request.setMessages(List.of(
new ChatRequest.Message("user", userMessage)
));
ChatResponse response = restTemplate.postForObject(
"/chat/completions",
request,
ChatResponse.class
);
return response.getChoices().get(0).getMessage().getContent();
}
}
@RestControllerAdvice
public class AIExceptionHandler {
@ExceptionHandler(RestClientException.class)
public ResponseEntity<ErrorResponse> handleAIServiceError(RestClientException ex) {
// 解析错误响应
ErrorResponse error = new ErrorResponse(
"AI_SERVICE_ERROR",
"DeepSeek服务调用异常",
HttpStatus.BAD_GATEWAY.value()
);
return ResponseEntity
.status(HttpStatus.BAD_GATEWAY)
.body(error);
}
}
维度 | SDK方案 | HTTP API方案 |
---|---|---|
开发效率 | ★★★★★ | ★★★★☆ |
灵活性 | ★★★☆☆ | ★★★★★ |
性能 | ★★★★☆ | ★★★☆☆ |
维护成本 | ★★★★★ | ★★★★☆ |
选型建议:
@Async
public CompletableFuture<String> asyncCompletion(String prompt) {
// 实现异步调用逻辑
}
// 使用Guava RateLimiter
private final RateLimiter limiter = RateLimiter.create(100); // 100 QPS
public String limitedCompletion(String input) {
limiter.acquire();
return chatCompletion(input);
}
@Timed(value = "deepseek.call.duration",
description = "DeepSeek API调用耗时")
@Counted(value = "deepseek.call.count",
description = "DeepSeek API调用次数")
public String monitoredCall(String input) {
// 方法实现
}
@Bean
public RestTemplate sslRestTemplate() throws Exception {
SSLContext context = SSLContextBuilder
.create()
.loadTrustMaterial((chain, authType) -> true)
.build();
return new RestTemplateBuilder()
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(
HttpClientBuilder.create()
.setSSLContext(context)
.build()
))
.build();
}
建议在发送请求前实现:
public String sanitizeInput(String input) {
// 实现敏感词过滤逻辑
}
本文详细介绍了Spring项目接入DeepSeek的两种主流方式,从基础集成到高级优化提供了完整解决方案。开发者可根据项目实际需求选择合适的接入方案,同时结合文中的最佳实践建议,可以构建出稳定高效的AI集成方案。随着DeepSeek能力的持续升级,建议保持SDK的定期更新,以获取最新功能和性能优化。