Integración de Spring Boot con la API de DeepSeek para Funcionalidades de IA

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"}'

Etiquetas: Spring Boot DeepSeek API java webflux jackson

Publicado el 7-13 13:43