Guía práctica: Spring Boot con DeepSeek y Ollama para modelos locales

Este artículo muestra cómo integrar DeepSeek (vía LangChain4j) y desplegar modelos localmente con Olllama en una aplicación Spring Boot. Se asume que ya tienes un proyecto Spring Boot configurado.

  1. Integración con DeepSeek

DeepSeek ofrece una API compatible con OpenAI. Solo necesitas obtener una clave de API y configurarla.

1.1 Obtener credenciales

Acccede a https://platform.deepseek.com (API Open Platform) y genera una clave API. Recarga la cuenta con al menos 1 yuan (moneda china). Guarda la clave, ej: sk-xxxxxxxx.

1.2 Configurar entorno local

Por seguridad, la clave se define como variable de entorno del sistema:

  1. Abre "Propiedades del sistema" → "Variables de entorno".
  2. Crea una nueva variable de sistema: nombre DEEPSEEK_API_KEY, valor tu clave.
  3. Reinicia tu IDE (IntelliJ) para que herede la variable.

1.3 Configuración en application.properties

# DeepSeek (formato compatible con OpenAI)
langchain4j.openai.chat-model.base-url=https://api.deepseek.com
langchain4j.openai.chat-model.api-key=${DEEPSEEK_API_KEY}
langchain4j.openai.chat-model.model-name=deepseek-chat
# Para usar modelo de razonamiento: deepseek-reasoner
# langchain4j.openai.chat-model.model-name=deepseek-reasoner

langchain4j.openai.chat-model.log-requests=true
langchain4j.openai.chat-model.log-responses=true
logging.level.root=debug

Nota: también puedes usar https://api.deepseek.com/v1 como base URL.

1.4 Prueba de conexión

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import dev.langchain4j.model.openai.OpenAiChatModel;

@SpringBootTest
class DeepSeekTest {

    @Autowired
    private OpenAiChatModel chatModel;  // Inyecta el bean configurado

    @Test
    void testDeepSeek() {
        String response = chatModel.chat("Hola, ¿cuál es la capital de Francia?");
        System.out.println("Respuesta: " + response);
    }
}

Si no se conecta, verifica:

  • Reinicio del IDE y que la varible DEEPSEEK_API_KEY esté visible. En IntelliJ: Run → Edit Configurations, busca la prueba y revisa Environment variables.
  • Los logs de depuración muestran que la petición se envía a https://api.deepseek.com/chat/completions. Una respuesta HTTP 200 indica éxito.
  1. Despliegue local con Ollama

Ollama permite ejecutar modelos de lenguaje localmente. Beneficios: privacidad, sin coste recurrente, funcionamiento offline.

2.1 Instalar Ollama

  1. Descarga desde https://ollama.com e instala.
  2. Abre una terminal y verifica: ollama --version
  3. Lista modelos disponibles: ollama list (inicialmente vacía).
  4. Descarga un modelo, ej: ollama pull deepseek-r1:1.5b (tamaño reducido).
  5. Ejecuta directamente: ollama run deepseek-r1:1.5b y prueba con un mensaje.

2.2 Agregar dependencia Spring Boot

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-ollama-spring-boot-starter</artifactId>
</dependency>

Verifica en el panel Maven que langchain4j-ollama se haya descargado.

2.3 Configuración en application.properties

langchain4j.ollama.chat-model.base-url=http://localhost:11434
langchain4j.ollama.chat-model.model-name=deepseek-r1:1.5b
langchain4j.ollama.chat-model.temperature=0.8
langchain4j.ollama.chat-model.timeout=PT60S

2.4 Prueba con Ollama

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import dev.langchain4j.model.ollama.OllamaChatModel;

@SpringBootTest
class OllamaTest {

    @Autowired
    private OllamaChatModel ollamaModel;

    @Test
    void testOllama() {
        String answer = ollamaModel.chat("¿Qué es un modelo de lenguaje?");
        System.out.println("Ollama responde: " + answer);
    }
}

La respuesta debe ser generada localmente sin conexión a Internet.

  1. Notas finales

Ambas integraciones (DeepSeek remoto y Ollama local) usan el mismo patrón de LangChain4j, facilitando cambiar entre proveedores. Ajusta el nombre del modelo según el que hayas descargado localmente. Para aplicaciones productivas, considera la configuración de timeouts y reintentos.

Etiquetas: DeepSeek ollama spring-boot langchain4j local-deployment

Publicado el 6-10 21:47