La integración de modelos de inteligencia artificial en aplicaciones Java se ha simlpificado con frameworks como Spring Boot. Este artículo detalla el proceso para conectar con la API de DeepSeek y crear un servicio backend con capacidades de diálogo automático.
Preparación del Entorno
- JDK 17 o superior
- Spring Boot 3.x
- Maven 3.8+
- Clave de API de DeepSeek (disponible en platform.deepseek.com)
Configuración de Dependencias
<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>
Archivo de Propiedades
En el archivo application.yml, define los parámetros de conexión:
deepseek:
secret-key: sk-tu-clave-aqui
url-base: https://api.deepseek.com
modelo-id: deepseek-chat
limite-tokens: 2048
Clase de Configuración
Crea una clase para gestionar la configuración y el cliente HTTP:
@Configuration
@ConfigurationProperties(prefix = "deepseek")
@Data
public class DeepSeekProperties {
private String secretKey;
private String urlBase;
private String modeloId;
private Integer limiteTokens;
@Bean
public WebClient clienteWebDeepSeek() {
return WebClient.builder()
.baseUrl(urlBase)
.defaultHeader("Authorization", "Bearer " + secretKey)
.defaultHeader("Content-Type", "application/json")
.build();
}
}
Entidades de Datos
Define las clases para estructurar solicitudes y respuestas:
@Data
public class SolicitudDialogo {
private String modelo;
private List<mensaje> mensajes;
@JsonProperty("max_tokens")
private Integer maxTokens;
private Boolean flujo = false;
@Data
@AllArgsConstructor
public static class Mensaje {
private String rol; // system / user / assistant
private String contenido;
}
}
@Data
public class RespuestaDialogo {
private String identificador;
private List<opcion> opciones;
@Data
public static class Opcion {
private Mensaje mensaje;
}
@Data
public static class Mensaje {
private String rol;
private String contenido;
}
}
</opcion></mensaje>
Implementación del Servicio
Desarrolla la lógica para interactuar con la API:
@Service
@RequiredArgsConstructor
public class ServicioDialogoAI {
private final WebClient clienteWebDeepSeek;
private final DeepSeekProperties propiedades;
public String obtenerRespuesta(String mensajeUsuario) {
SolicitudDialogo solicitud = new SolicitudDialogo();
solicitud.setModelo(propiedades.getModeloId());
solicitud.setMaxTokens(propiedades.getLimiteTokens());
solicitud.setMensajes(List.of(
new SolicitudDialogo.Mensaje("system", "Actúa como experto en desarrollo Java"),
new SolicitudDialogo.Mensaje("user", mensajeUsuario)
));
RespuestaDialogo respuesta = clienteWebDeepSeek
.post()
.uri("/v1/chat/completions")
.bodyValue(solicitud)
.retrieve()
.bodyToMono(RespuestaDialogo.class)
.block();
return respuesta.getOpciones().get(0).getMensaje().getContenido();
}
}
Controlador REST
Expón el servicio mediante un endpoint:
@RestController
@RequestMapping("/ia/v1")
@RequiredArgsConstructor
public class ControladorAI {
private final ServicioDialogoAI servicioDialogo;
@PostMapping("/dialogo")
public ResponseEntity<string> dialogar(@RequestBody Map<String, String> payload) {
String texto = payload.get("texto");
String resultado = servicioDialogo.obtenerRespuesta(texto);
return ResponseEntity.ok(resultado);
}
}
</string>
Prueba del Servicio
Ejecuta una solicitud de ejemplo:
curl -X POST http://localhost:8080/ia/v1/dialogo \
-H "Content-Type: application/json" \
-d '{"texto": "Proporciona un ejemplo de paginación en Spring Boot"}'